// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// RUN: c_compiler -c -o %t1.o -I "common" "common/testsuite.c"
// RUN: cxx_compiler cxx_rtti -c %s -I "common" -o %t2.o
// RUN: c_compiler -c %s -I "common" -o %t3.o
// RUN: linker -o %t2%exeext  %t1.o %t2.o %t3.o
// RUN: runtool %t2%exeext | checker "TEST PASSED"
#include "testsuite.h"
#ifdef __cplusplus

struct  S2440C7_nt  {
  void  mf2440c7(); // _ZN10S2440C7_nt8mf2440c7Ev
};
//SIG(-1 S2440C7_nt) C1{ m}


void  S2440C7_nt ::mf2440c7(){}

//skip512 S2440C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C6_nt  {
  void *s2440c6f0;
  int s2440c6f1;
  ::S2440C7_nt s2440c6f2;
  ::S2440C7_nt s2440c6f3;
  void  mf2440c6(); // _ZN10S2440C6_nt8mf2440c6Ev
};
//SIG(-1 S2440C6_nt) C1{ m Fp Fi FC2{ m} FC2}


void  S2440C6_nt ::mf2440c6(){}

//skip512 S2440C6_nt

#else // __cplusplus

Class_Descriptor cd_S2440C6_nt = {  "S2440C6_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C5_nt  : S2440C6_nt {
};
//SIG(-1 S2440C5_nt) C1{ BC2{ m Fp Fi FC3{ m} FC3}}



//skip512 S2440C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S2440C6_nt;
static Base_Class bases_S2440C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2440C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C4_nt  {
  void *s2440c4f0;
  int s2440c4f1;
  ::S2440C5_nt s2440c4f2;
  ::S2440C5_nt s2440c4f3;
  int s2440c4f4;
  virtual  ~S2440C4_nt(); // _ZN10S2440C4_ntD1Ev
  virtual void  v9(); // _ZN10S2440C4_nt2v9Ev
  virtual void  v10(); // _ZN10S2440C4_nt3v10Ev
  virtual void  v11(); // _ZN10S2440C4_nt3v11Ev
  virtual void  v12(); // _ZN10S2440C4_nt3v12Ev
  virtual void  v13(); // _ZN10S2440C4_nt3v13Ev
  virtual void  v14(); // _ZN10S2440C4_nt3v14Ev
  virtual void  v15(); // _ZN10S2440C4_nt3v15Ev
  virtual void  v16(); // _ZN10S2440C4_nt3v16Ev
  virtual void  v17(); // _ZN10S2440C4_nt3v17Ev
  virtual void  v18(); // _ZN10S2440C4_nt3v18Ev
  virtual void  v19(); // _ZN10S2440C4_nt3v19Ev
  virtual void  v20(); // _ZN10S2440C4_nt3v20Ev
  virtual void  v21(); // _ZN10S2440C4_nt3v21Ev
  virtual void  v22(); // _ZN10S2440C4_nt3v22Ev
  virtual void  v23(); // _ZN10S2440C4_nt3v23Ev
  virtual void  v24(); // _ZN10S2440C4_nt3v24Ev
  virtual void  v25(); // _ZN10S2440C4_nt3v25Ev
  virtual void  v26(); // _ZN10S2440C4_nt3v26Ev
  virtual void  v27(); // _ZN10S2440C4_nt3v27Ev
  virtual void  v28(); // _ZN10S2440C4_nt3v28Ev
  virtual void  v29(); // _ZN10S2440C4_nt3v29Ev
  virtual void  v30(); // _ZN10S2440C4_nt3v30Ev
  virtual void  v31(); // _ZN10S2440C4_nt3v31Ev
  S2440C4_nt(); // tgen
};
//SIG(-1 S2440C4_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp Fi FC2{ BC3{ m Fp Fi FC4{ m} FC4}} FC2 Fi}


 S2440C4_nt ::~S2440C4_nt(){ note_dtor("S2440C4_nt", this);}
void  S2440C4_nt ::v9(){vfunc_called(this, "_ZN10S2440C4_nt2v9Ev");}
void  S2440C4_nt ::v10(){vfunc_called(this, "_ZN10S2440C4_nt3v10Ev");}
void  S2440C4_nt ::v11(){vfunc_called(this, "_ZN10S2440C4_nt3v11Ev");}
void  S2440C4_nt ::v12(){vfunc_called(this, "_ZN10S2440C4_nt3v12Ev");}
void  S2440C4_nt ::v13(){vfunc_called(this, "_ZN10S2440C4_nt3v13Ev");}
void  S2440C4_nt ::v14(){vfunc_called(this, "_ZN10S2440C4_nt3v14Ev");}
void  S2440C4_nt ::v15(){vfunc_called(this, "_ZN10S2440C4_nt3v15Ev");}
void  S2440C4_nt ::v16(){vfunc_called(this, "_ZN10S2440C4_nt3v16Ev");}
void  S2440C4_nt ::v17(){vfunc_called(this, "_ZN10S2440C4_nt3v17Ev");}
void  S2440C4_nt ::v18(){vfunc_called(this, "_ZN10S2440C4_nt3v18Ev");}
void  S2440C4_nt ::v19(){vfunc_called(this, "_ZN10S2440C4_nt3v19Ev");}
void  S2440C4_nt ::v20(){vfunc_called(this, "_ZN10S2440C4_nt3v20Ev");}
void  S2440C4_nt ::v21(){vfunc_called(this, "_ZN10S2440C4_nt3v21Ev");}
void  S2440C4_nt ::v22(){vfunc_called(this, "_ZN10S2440C4_nt3v22Ev");}
void  S2440C4_nt ::v23(){vfunc_called(this, "_ZN10S2440C4_nt3v23Ev");}
void  S2440C4_nt ::v24(){vfunc_called(this, "_ZN10S2440C4_nt3v24Ev");}
void  S2440C4_nt ::v25(){vfunc_called(this, "_ZN10S2440C4_nt3v25Ev");}
void  S2440C4_nt ::v26(){vfunc_called(this, "_ZN10S2440C4_nt3v26Ev");}
void  S2440C4_nt ::v27(){vfunc_called(this, "_ZN10S2440C4_nt3v27Ev");}
void  S2440C4_nt ::v28(){vfunc_called(this, "_ZN10S2440C4_nt3v28Ev");}
void  S2440C4_nt ::v29(){vfunc_called(this, "_ZN10S2440C4_nt3v29Ev");}
void  S2440C4_nt ::v30(){vfunc_called(this, "_ZN10S2440C4_nt3v30Ev");}
void  S2440C4_nt ::v31(){vfunc_called(this, "_ZN10S2440C4_nt3v31Ev");}
S2440C4_nt ::S2440C4_nt(){ note_ctor("S2440C4_nt", this);} // tgen

//skip512 S2440C4_nt

#else // __cplusplus

extern void _ZN10S2440C4_ntC1Ev();
extern void _ZN10S2440C4_ntD1Ev();
Name_Map name_map_S2440C4_nt[] = {
  NSPAIR(_ZN10S2440C4_ntC1Ev),
  NSPAIR(_ZN10S2440C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2440C4_nt[];
extern void _ZN10S2440C4_ntD1Ev();
extern void _ZN10S2440C4_ntD0Ev();
extern void _ZN10S2440C4_nt2v9Ev();
extern void _ZN10S2440C4_nt3v10Ev();
extern void _ZN10S2440C4_nt3v11Ev();
extern void _ZN10S2440C4_nt3v12Ev();
extern void _ZN10S2440C4_nt3v13Ev();
extern void _ZN10S2440C4_nt3v14Ev();
extern void _ZN10S2440C4_nt3v15Ev();
extern void _ZN10S2440C4_nt3v16Ev();
extern void _ZN10S2440C4_nt3v17Ev();
extern void _ZN10S2440C4_nt3v18Ev();
extern void _ZN10S2440C4_nt3v19Ev();
extern void _ZN10S2440C4_nt3v20Ev();
extern void _ZN10S2440C4_nt3v21Ev();
extern void _ZN10S2440C4_nt3v22Ev();
extern void _ZN10S2440C4_nt3v23Ev();
extern void _ZN10S2440C4_nt3v24Ev();
extern void _ZN10S2440C4_nt3v25Ev();
extern void _ZN10S2440C4_nt3v26Ev();
extern void _ZN10S2440C4_nt3v27Ev();
extern void _ZN10S2440C4_nt3v28Ev();
extern void _ZN10S2440C4_nt3v29Ev();
extern void _ZN10S2440C4_nt3v30Ev();
extern void _ZN10S2440C4_nt3v31Ev();
static  VTBL_ENTRY vtc_S2440C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2440C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2440C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v31Ev,
};
extern VTBL_ENTRY _ZTI10S2440C4_nt[];
VTBL_ENTRY *P__ZTI10S2440C4_nt = _ZTI10S2440C4_nt; 
extern  VTBL_ENTRY _ZTV10S2440C4_nt[];
Class_Descriptor cd_S2440C4_nt = {  "S2440C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2440C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI10S2440C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2440C4_nt),27, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C14_nt  {
  __tsi64 s2440c14f0[2];
  void  mf2440c14(); // _ZN11S2440C14_nt9mf2440c14Ev
};
//SIG(-1 S2440C14_nt) C1{ m FL[2]}


void  S2440C14_nt ::mf2440c14(){}

//skip512 S2440C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C13_nt  {
  ::S2440C14_nt s2440c13f0;
  void  mf2440c13(); // _ZN11S2440C13_nt9mf2440c13Ev
};
//SIG(-1 S2440C13_nt) C1{ m FC2{ m FL[2]}}


void  S2440C13_nt ::mf2440c13(){}

//skip512 S2440C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C17_nt  {
  ::S2440C13_nt s2440c17f0;
  void  mf2440c17(); // _ZN11S2440C17_nt9mf2440c17Ev
};
//SIG(-1 S2440C17_nt) C1{ m FC2{ m FC3{ m FL[2]}}}


void  S2440C17_nt ::mf2440c17(){}

//skip512 S2440C17_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C18_nt  {
  ::S2440C13_nt s2440c18f0;
  ::S2440C13_nt s2440c18f1;
  ::S2440C13_nt s2440c18f2;
  ::S2440C13_nt s2440c18f3;
  void  mf2440c18(); // _ZN11S2440C18_nt9mf2440c18Ev
};
//SIG(-1 S2440C18_nt) C1{ m FC2{ m FC3{ m FL[2]}} FC2 FC2 FC2}


void  S2440C18_nt ::mf2440c18(){}

//skip512 S2440C18_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C21  {
  void  mf2440c21(); // _ZN8S2440C219mf2440c21Ev
};
//SIG(-1 S2440C21) C1{ m}


void  S2440C21 ::mf2440c21(){}

static void Test_S2440C21()
{
  {
    init_simple_test("S2440C21");
    S2440C21 lv;
    check2(sizeof(lv), 1, "sizeof(S2440C21)");
    check2(__alignof__(lv), 1, "__alignof__(S2440C21)");
  }
}
static Arrange_To_Call_Me vS2440C21(Test_S2440C21, "S2440C21", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C20_nt  {
  void *s2440c20f0;
  int s2440c20f1;
  ::S2440C21 s2440c20f2;
  void  mf2440c20(); // _ZN11S2440C20_nt9mf2440c20Ev
};
//SIG(-1 S2440C20_nt) C1{ m Fp Fi FC2{ m}}


void  S2440C20_nt ::mf2440c20(){}

//skip512 S2440C20_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C19_nt  {
  ::S2440C20_nt s2440c19f0;
  int s2440c19f1;
  void  mf2440c19(); // _ZN11S2440C19_nt9mf2440c19Ev
};
//SIG(-1 S2440C19_nt) C1{ m FC2{ m Fp Fi FC3{ m}} Fi}


void  S2440C19_nt ::mf2440c19(){}

//skip512 S2440C19_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C24  {
  void  mf2440c24(); // _ZN8S2440C249mf2440c24Ev
};
//SIG(-1 S2440C24) C1{ m}


void  S2440C24 ::mf2440c24(){}

static void Test_S2440C24()
{
  {
    init_simple_test("S2440C24");
    S2440C24 lv;
    check2(sizeof(lv), 1, "sizeof(S2440C24)");
    check2(__alignof__(lv), 1, "__alignof__(S2440C24)");
  }
}
static Arrange_To_Call_Me vS2440C24(Test_S2440C24, "S2440C24", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C22  {
  void *s2440c22f0;
  int s2440c22f1;
  ::S2440C21 s2440c22f2;
  ::S2440C24 s2440c22f3;
  void  mf2440c22(); // _ZN8S2440C229mf2440c22Ev
};
//SIG(-1 S2440C22) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S2440C22 ::mf2440c22(){}

static void Test_S2440C22()
{
  {
    init_simple_test("S2440C22");
    S2440C22 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2440C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2440C22)");
    check_field_offset(lv, s2440c22f0, 0, "S2440C22.s2440c22f0");
    check_field_offset(lv, s2440c22f1, ABISELECT(8,4), "S2440C22.s2440c22f1");
    check_field_offset(lv, s2440c22f2, ABISELECT(12,8), "S2440C22.s2440c22f2");
    check_field_offset(lv, s2440c22f3, ABISELECT(13,9), "S2440C22.s2440c22f3");
  }
}
static Arrange_To_Call_Me vS2440C22(Test_S2440C22, "S2440C22", ABISELECT(16,12));

#else // __cplusplus

Class_Descriptor cd_S2440C22 = {  "S2440C22", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C28  {
  void  mf2440c28(); // _ZN8S2440C289mf2440c28Ev
};
//SIG(-1 S2440C28) C1{ m}


void  S2440C28 ::mf2440c28(){}

static void Test_S2440C28()
{
  {
    init_simple_test("S2440C28");
    S2440C28 lv;
    check2(sizeof(lv), 1, "sizeof(S2440C28)");
    check2(__alignof__(lv), 1, "__alignof__(S2440C28)");
  }
}
static Arrange_To_Call_Me vS2440C28(Test_S2440C28, "S2440C28", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C26  {
  void *s2440c26f0;
  int s2440c26f1;
  ::S2440C24 s2440c26f2;
  ::S2440C28 s2440c26f3;
  void  mf2440c26(); // _ZN8S2440C269mf2440c26Ev
};
//SIG(-1 S2440C26) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S2440C26 ::mf2440c26(){}

static void Test_S2440C26()
{
  {
    init_simple_test("S2440C26");
    S2440C26 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2440C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2440C26)");
    check_field_offset(lv, s2440c26f0, 0, "S2440C26.s2440c26f0");
    check_field_offset(lv, s2440c26f1, ABISELECT(8,4), "S2440C26.s2440c26f1");
    check_field_offset(lv, s2440c26f2, ABISELECT(12,8), "S2440C26.s2440c26f2");
    check_field_offset(lv, s2440c26f3, ABISELECT(13,9), "S2440C26.s2440c26f3");
  }
}
static Arrange_To_Call_Me vS2440C26(Test_S2440C26, "S2440C26", ABISELECT(16,12));

#else // __cplusplus

Class_Descriptor cd_S2440C26 = {  "S2440C26", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C25  : S2440C26 {
};
//SIG(-1 S2440C25) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



static void Test_S2440C25()
{
  extern Class_Descriptor cd_S2440C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2440C25, buf);
    S2440C25 &lv = *(new (buf) S2440C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2440C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2440C25)");
    check_base_class_offset(lv, (S2440C26*), 0, "S2440C25");
    test_class_info(&lv, &cd_S2440C25);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2440C25(Test_S2440C25, "S2440C25", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2440C26;
static Base_Class bases_S2440C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2440C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2440C25 = {  "S2440C25", // class name
  bases_S2440C25, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C29_nt  {
  void *s2440c29f0;
  int s2440c29f1[2];
  ::S2440C28 s2440c29f2;
  void  mf2440c29(); // _ZN11S2440C29_nt9mf2440c29Ev
};
//SIG(-1 S2440C29_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S2440C29_nt ::mf2440c29(){}

//skip512 S2440C29_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C38  {
  void  mf2440c38(); // _ZN8S2440C389mf2440c38Ev
};
//SIG(-1 S2440C38) C1{ m}


void  S2440C38 ::mf2440c38(){}

static void Test_S2440C38()
{
  {
    init_simple_test("S2440C38");
    S2440C38 lv;
    check2(sizeof(lv), 1, "sizeof(S2440C38)");
    check2(__alignof__(lv), 1, "__alignof__(S2440C38)");
  }
}
static Arrange_To_Call_Me vS2440C38(Test_S2440C38, "S2440C38", 1);

#else // __cplusplus

Class_Descriptor cd_S2440C38 = {  "S2440C38", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C37  {
  void *s2440c37f0;
  int s2440c37f1[2];
  ::S2440C38 s2440c37f2;
  void  mf2440c37(); // _ZN8S2440C379mf2440c37Ev
};
//SIG(-1 S2440C37) C1{ m Fp Fi[2] FC2{ m}}


void  S2440C37 ::mf2440c37(){}

static void Test_S2440C37()
{
  {
    init_simple_test("S2440C37");
    S2440C37 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2440C37)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2440C37)");
    check_field_offset(lv, s2440c37f0, 0, "S2440C37.s2440c37f0");
    check_field_offset(lv, s2440c37f1, ABISELECT(8,4), "S2440C37.s2440c37f1");
    check_field_offset(lv, s2440c37f2, ABISELECT(16,12), "S2440C37.s2440c37f2");
  }
}
static Arrange_To_Call_Me vS2440C37(Test_S2440C37, "S2440C37", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C3_nt  : S2440C4_nt {
  ::S2440C13_nt s2440c3f0;
  ::S2440C13_nt s2440c3f1;
  ::S2440C13_nt s2440c3f2;
  ::S2440C13_nt s2440c3f3;
  ::S2440C17_nt s2440c3f4;
  ::S2440C18_nt s2440c3f5;
  ::S2440C18_nt s2440c3f6;
  ::S2440C13_nt s2440c3f7;
  ::S2440C13_nt s2440c3f8;
  ::S2440C13_nt s2440c3f9;
  void *s2440c3f10;
  ::S2440C17_nt s2440c3f11;
  ::S2440C19_nt s2440c3f12;
  int s2440c3f13;
  void *s2440c3f14[7];
  ::S2440C22 s2440c3f15;
  int s2440c3f16:8;
  int s2440c3f17:8;
  int s2440c3f18:16;
  int s2440c3f19:16;
  int s2440c3f20:8;
  int s2440c3f21:8;
  int s2440c3f22:8;
  int s2440c3f23:32;
  int s2440c3f24:8;
  int s2440c3f25:4;
  int s2440c3f26:4;
  int s2440c3f27:4;
  int s2440c3f28:4;
  int s2440c3f29:4;
  int s2440c3f30:4;
  int s2440c3f31:4;
  int s2440c3f32:4;
  int s2440c3f33:4;
  int s2440c3f34:4;
  unsigned char s2440c3f35:1;
  unsigned char s2440c3f36:1;
  unsigned char s2440c3f37:1;
  unsigned char s2440c3f38:1;
  unsigned char s2440c3f39:1;
  unsigned char s2440c3f40:1;
  unsigned char s2440c3f41:1;
  unsigned char s2440c3f42:1;
  unsigned char s2440c3f43:1;
  unsigned char s2440c3f44:1;
  unsigned char s2440c3f45:1;
  unsigned char s2440c3f46:1;
  unsigned char s2440c3f47:1;
  unsigned char s2440c3f48:1;
  unsigned char s2440c3f49:1;
  unsigned char s2440c3f50:1;
  unsigned char s2440c3f51:1;
  unsigned char s2440c3f52:1;
  unsigned char s2440c3f53:1;
  unsigned char s2440c3f54:1;
  unsigned char s2440c3f55:1;
  unsigned char s2440c3f56:1;
  unsigned char s2440c3f57:1;
  unsigned char s2440c3f58:1;
  unsigned char s2440c3f59:1;
  unsigned char s2440c3f60:1;
  unsigned char s2440c3f61:1;
  unsigned char s2440c3f62:1;
  unsigned char s2440c3f63:1;
  unsigned char s2440c3f64:1;
  unsigned char s2440c3f65:1;
  unsigned char s2440c3f66:1;
  unsigned char s2440c3f67:1;
  unsigned char s2440c3f68:1;
  unsigned char s2440c3f69:1;
  unsigned char s2440c3f70:1;
  unsigned char s2440c3f71:1;
  unsigned char s2440c3f72:1;
  unsigned char s2440c3f73:1;
  unsigned char s2440c3f74:1;
  unsigned char s2440c3f75:1;
  int s2440c3f76[7];
  void *s2440c3f77[6];
  int s2440c3f78:8;
  int s2440c3f79:8;
  int s2440c3f80:8;
  int s2440c3f81:8;
  int s2440c3f82:8;
  int s2440c3f83:8;
  ::S2440C25 s2440c3f84;
  void *s2440c3f85[4];
  int s2440c3f86:8;
  int s2440c3f87:8;
  int s2440c3f88:8;
  int s2440c3f89:8;
  int s2440c3f90:8;
  int s2440c3f91:16;
  int s2440c3f92:16;
  int s2440c3f93:16;
  int s2440c3f94:4;
  int s2440c3f95:4;
  int s2440c3f96:4;
  int s2440c3f97:4;
  int s2440c3f98:4;
  int s2440c3f99:4;
  int s2440c3f100:4;
  int s2440c3f101:4;
  int s2440c3f102:4;
  int s2440c3f103:4;
  int s2440c3f104:4;
  int s2440c3f105:4;
  int s2440c3f106:8;
  int s2440c3f107:8;
  int s2440c3f108:8;
  void *s2440c3f109[7];
  ::S2440C29_nt s2440c3f110;
  void *s2440c3f111[2];
  int s2440c3f112:16;
  int s2440c3f113:16;
  ::S2440C25 s2440c3f114;
  ::S2440C29_nt s2440c3f115;
  ::S2440C37 s2440c3f116;
  void *s2440c3f117[2];
  int s2440c3f118:24;
  int s2440c3f119:8;
  void *s2440c3f120;
  virtual  ~S2440C3_nt(); // _ZN10S2440C3_ntD1Ev
  virtual void  v32(); // _ZN10S2440C3_nt3v32Ev
  virtual void  v33(); // _ZN10S2440C3_nt3v33Ev
  virtual void  v34(); // _ZN10S2440C3_nt3v34Ev
  virtual void  v35(); // _ZN10S2440C3_nt3v35Ev
  virtual void  v36(); // _ZN10S2440C3_nt3v36Ev
  virtual void  v37(); // _ZN10S2440C3_nt3v37Ev
  virtual void  v38(); // _ZN10S2440C3_nt3v38Ev
  virtual void  v39(); // _ZN10S2440C3_nt3v39Ev
  virtual void  v40(); // _ZN10S2440C3_nt3v40Ev
  virtual void  v41(); // _ZN10S2440C3_nt3v41Ev
  virtual void  v42(); // _ZN10S2440C3_nt3v42Ev
  virtual void  v43(); // _ZN10S2440C3_nt3v43Ev
  virtual void  v44(); // _ZN10S2440C3_nt3v44Ev
  virtual void  v45(); // _ZN10S2440C3_nt3v45Ev
  virtual void  v46(); // _ZN10S2440C3_nt3v46Ev
  virtual void  v47(); // _ZN10S2440C3_nt3v47Ev
  virtual void  v48(); // _ZN10S2440C3_nt3v48Ev
  virtual void  v49(); // _ZN10S2440C3_nt3v49Ev
  virtual void  v50(); // _ZN10S2440C3_nt3v50Ev
  virtual void  v51(); // _ZN10S2440C3_nt3v51Ev
  virtual void  v52(); // _ZN10S2440C3_nt3v52Ev
  virtual void  v53(); // _ZN10S2440C3_nt3v53Ev
  virtual void  v54(); // _ZN10S2440C3_nt3v54Ev
  virtual void  v55(); // _ZN10S2440C3_nt3v55Ev
  virtual void  v56(); // _ZN10S2440C3_nt3v56Ev
  virtual void  v57(); // _ZN10S2440C3_nt3v57Ev
  virtual void  v58(); // _ZN10S2440C3_nt3v58Ev
  virtual void  v59(); // _ZN10S2440C3_nt3v59Ev
  virtual void  v60(); // _ZN10S2440C3_nt3v60Ev
  virtual void  v61(); // _ZN10S2440C3_nt3v61Ev
  virtual void  v62(); // _ZN10S2440C3_nt3v62Ev
  virtual void  v63(); // _ZN10S2440C3_nt3v63Ev
  virtual void  v64(); // _ZN10S2440C3_nt3v64Ev
  virtual void  v65(); // _ZN10S2440C3_nt3v65Ev
  virtual void  v66(); // _ZN10S2440C3_nt3v66Ev
  virtual void  v67(); // _ZN10S2440C3_nt3v67Ev
  virtual void  v68(); // _ZN10S2440C3_nt3v68Ev
  virtual void  v69(); // _ZN10S2440C3_nt3v69Ev
  virtual void  v70(); // _ZN10S2440C3_nt3v70Ev
  virtual void  v71(); // _ZN10S2440C3_nt3v71Ev
  virtual void  v72(); // _ZN10S2440C3_nt3v72Ev
  virtual void  v73(); // _ZN10S2440C3_nt3v73Ev
  virtual void  v74(); // _ZN10S2440C3_nt3v74Ev
  virtual void  v75(); // _ZN10S2440C3_nt3v75Ev
  virtual void  v76(); // _ZN10S2440C3_nt3v76Ev
  virtual void  v77(); // _ZN10S2440C3_nt3v77Ev
  virtual void  v78(); // _ZN10S2440C3_nt3v78Ev
  virtual void  v79(); // _ZN10S2440C3_nt3v79Ev
  virtual void  v80(); // _ZN10S2440C3_nt3v80Ev
  virtual void  v81(); // _ZN10S2440C3_nt3v81Ev
  virtual void  v82(); // _ZN10S2440C3_nt3v82Ev
  virtual void  v83(); // _ZN10S2440C3_nt3v83Ev
  virtual void  v84(); // _ZN10S2440C3_nt3v84Ev
  virtual void  v85(); // _ZN10S2440C3_nt3v85Ev
  virtual void  v86(); // _ZN10S2440C3_nt3v86Ev
  virtual void  v87(); // _ZN10S2440C3_nt3v87Ev
  virtual void  v88(); // _ZN10S2440C3_nt3v88Ev
  virtual void  v89(); // _ZN10S2440C3_nt3v89Ev
  virtual void  v90(); // _ZN10S2440C3_nt3v90Ev
  virtual void  v91(); // _ZN10S2440C3_nt3v91Ev
  virtual void  v92(); // _ZN10S2440C3_nt3v92Ev
  virtual void  v93(); // _ZN10S2440C3_nt3v93Ev
  virtual void  v94(); // _ZN10S2440C3_nt3v94Ev
  virtual void  v95(); // _ZN10S2440C3_nt3v95Ev
  virtual void  v96(); // _ZN10S2440C3_nt3v96Ev
  virtual void  v97(); // _ZN10S2440C3_nt3v97Ev
  virtual void  v98(); // _ZN10S2440C3_nt3v98Ev
  virtual void  v99(); // _ZN10S2440C3_nt3v99Ev
  virtual void  v100(); // _ZN10S2440C3_nt4v100Ev
  virtual void  v101(); // _ZN10S2440C3_nt4v101Ev
  virtual void  v102(); // _ZN10S2440C3_nt4v102Ev
  virtual void  v103(); // _ZN10S2440C3_nt4v103Ev
  virtual void  v104(); // _ZN10S2440C3_nt4v104Ev
  virtual void  v105(); // _ZN10S2440C3_nt4v105Ev
  virtual void  v106(); // _ZN10S2440C3_nt4v106Ev
  virtual void  v107(); // _ZN10S2440C3_nt4v107Ev
  virtual void  v108(); // _ZN10S2440C3_nt4v108Ev
  virtual void  v109(); // _ZN10S2440C3_nt4v109Ev
  S2440C3_nt(); // tgen
};
//SIG(-1 S2440C3_nt) C1{ BC2{ vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 Fp Fi FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC3 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 FC6{ m FC7{ m FL[2]}} FC6 FC6 FC6 FC8{ m FC6} FC9{ m FC6 FC6 FC6 FC6} FC9 FC6 FC6 FC6 Fp FC8 FC10{ m FC11{ m Fp Fi FC12{ m}} Fi} Fi Fp[7] FC13{ m Fp Fi FC12 FC14{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC15{ BC16{ m Fp Fi FC14 FC17{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC18{ m Fp Fi[2] FC17} Fp[2] Fi:16 Fi:16 FC15 FC18 FC19{ m Fp Fi[2] FC20{ m}} Fp[2] Fi:24 Fi:8 Fp}


 S2440C3_nt ::~S2440C3_nt(){ note_dtor("S2440C3_nt", this);}
void  S2440C3_nt ::v32(){vfunc_called(this, "_ZN10S2440C3_nt3v32Ev");}
void  S2440C3_nt ::v33(){vfunc_called(this, "_ZN10S2440C3_nt3v33Ev");}
void  S2440C3_nt ::v34(){vfunc_called(this, "_ZN10S2440C3_nt3v34Ev");}
void  S2440C3_nt ::v35(){vfunc_called(this, "_ZN10S2440C3_nt3v35Ev");}
void  S2440C3_nt ::v36(){vfunc_called(this, "_ZN10S2440C3_nt3v36Ev");}
void  S2440C3_nt ::v37(){vfunc_called(this, "_ZN10S2440C3_nt3v37Ev");}
void  S2440C3_nt ::v38(){vfunc_called(this, "_ZN10S2440C3_nt3v38Ev");}
void  S2440C3_nt ::v39(){vfunc_called(this, "_ZN10S2440C3_nt3v39Ev");}
void  S2440C3_nt ::v40(){vfunc_called(this, "_ZN10S2440C3_nt3v40Ev");}
void  S2440C3_nt ::v41(){vfunc_called(this, "_ZN10S2440C3_nt3v41Ev");}
void  S2440C3_nt ::v42(){vfunc_called(this, "_ZN10S2440C3_nt3v42Ev");}
void  S2440C3_nt ::v43(){vfunc_called(this, "_ZN10S2440C3_nt3v43Ev");}
void  S2440C3_nt ::v44(){vfunc_called(this, "_ZN10S2440C3_nt3v44Ev");}
void  S2440C3_nt ::v45(){vfunc_called(this, "_ZN10S2440C3_nt3v45Ev");}
void  S2440C3_nt ::v46(){vfunc_called(this, "_ZN10S2440C3_nt3v46Ev");}
void  S2440C3_nt ::v47(){vfunc_called(this, "_ZN10S2440C3_nt3v47Ev");}
void  S2440C3_nt ::v48(){vfunc_called(this, "_ZN10S2440C3_nt3v48Ev");}
void  S2440C3_nt ::v49(){vfunc_called(this, "_ZN10S2440C3_nt3v49Ev");}
void  S2440C3_nt ::v50(){vfunc_called(this, "_ZN10S2440C3_nt3v50Ev");}
void  S2440C3_nt ::v51(){vfunc_called(this, "_ZN10S2440C3_nt3v51Ev");}
void  S2440C3_nt ::v52(){vfunc_called(this, "_ZN10S2440C3_nt3v52Ev");}
void  S2440C3_nt ::v53(){vfunc_called(this, "_ZN10S2440C3_nt3v53Ev");}
void  S2440C3_nt ::v54(){vfunc_called(this, "_ZN10S2440C3_nt3v54Ev");}
void  S2440C3_nt ::v55(){vfunc_called(this, "_ZN10S2440C3_nt3v55Ev");}
void  S2440C3_nt ::v56(){vfunc_called(this, "_ZN10S2440C3_nt3v56Ev");}
void  S2440C3_nt ::v57(){vfunc_called(this, "_ZN10S2440C3_nt3v57Ev");}
void  S2440C3_nt ::v58(){vfunc_called(this, "_ZN10S2440C3_nt3v58Ev");}
void  S2440C3_nt ::v59(){vfunc_called(this, "_ZN10S2440C3_nt3v59Ev");}
void  S2440C3_nt ::v60(){vfunc_called(this, "_ZN10S2440C3_nt3v60Ev");}
void  S2440C3_nt ::v61(){vfunc_called(this, "_ZN10S2440C3_nt3v61Ev");}
void  S2440C3_nt ::v62(){vfunc_called(this, "_ZN10S2440C3_nt3v62Ev");}
void  S2440C3_nt ::v63(){vfunc_called(this, "_ZN10S2440C3_nt3v63Ev");}
void  S2440C3_nt ::v64(){vfunc_called(this, "_ZN10S2440C3_nt3v64Ev");}
void  S2440C3_nt ::v65(){vfunc_called(this, "_ZN10S2440C3_nt3v65Ev");}
void  S2440C3_nt ::v66(){vfunc_called(this, "_ZN10S2440C3_nt3v66Ev");}
void  S2440C3_nt ::v67(){vfunc_called(this, "_ZN10S2440C3_nt3v67Ev");}
void  S2440C3_nt ::v68(){vfunc_called(this, "_ZN10S2440C3_nt3v68Ev");}
void  S2440C3_nt ::v69(){vfunc_called(this, "_ZN10S2440C3_nt3v69Ev");}
void  S2440C3_nt ::v70(){vfunc_called(this, "_ZN10S2440C3_nt3v70Ev");}
void  S2440C3_nt ::v71(){vfunc_called(this, "_ZN10S2440C3_nt3v71Ev");}
void  S2440C3_nt ::v72(){vfunc_called(this, "_ZN10S2440C3_nt3v72Ev");}
void  S2440C3_nt ::v73(){vfunc_called(this, "_ZN10S2440C3_nt3v73Ev");}
void  S2440C3_nt ::v74(){vfunc_called(this, "_ZN10S2440C3_nt3v74Ev");}
void  S2440C3_nt ::v75(){vfunc_called(this, "_ZN10S2440C3_nt3v75Ev");}
void  S2440C3_nt ::v76(){vfunc_called(this, "_ZN10S2440C3_nt3v76Ev");}
void  S2440C3_nt ::v77(){vfunc_called(this, "_ZN10S2440C3_nt3v77Ev");}
void  S2440C3_nt ::v78(){vfunc_called(this, "_ZN10S2440C3_nt3v78Ev");}
void  S2440C3_nt ::v79(){vfunc_called(this, "_ZN10S2440C3_nt3v79Ev");}
void  S2440C3_nt ::v80(){vfunc_called(this, "_ZN10S2440C3_nt3v80Ev");}
void  S2440C3_nt ::v81(){vfunc_called(this, "_ZN10S2440C3_nt3v81Ev");}
void  S2440C3_nt ::v82(){vfunc_called(this, "_ZN10S2440C3_nt3v82Ev");}
void  S2440C3_nt ::v83(){vfunc_called(this, "_ZN10S2440C3_nt3v83Ev");}
void  S2440C3_nt ::v84(){vfunc_called(this, "_ZN10S2440C3_nt3v84Ev");}
void  S2440C3_nt ::v85(){vfunc_called(this, "_ZN10S2440C3_nt3v85Ev");}
void  S2440C3_nt ::v86(){vfunc_called(this, "_ZN10S2440C3_nt3v86Ev");}
void  S2440C3_nt ::v87(){vfunc_called(this, "_ZN10S2440C3_nt3v87Ev");}
void  S2440C3_nt ::v88(){vfunc_called(this, "_ZN10S2440C3_nt3v88Ev");}
void  S2440C3_nt ::v89(){vfunc_called(this, "_ZN10S2440C3_nt3v89Ev");}
void  S2440C3_nt ::v90(){vfunc_called(this, "_ZN10S2440C3_nt3v90Ev");}
void  S2440C3_nt ::v91(){vfunc_called(this, "_ZN10S2440C3_nt3v91Ev");}
void  S2440C3_nt ::v92(){vfunc_called(this, "_ZN10S2440C3_nt3v92Ev");}
void  S2440C3_nt ::v93(){vfunc_called(this, "_ZN10S2440C3_nt3v93Ev");}
void  S2440C3_nt ::v94(){vfunc_called(this, "_ZN10S2440C3_nt3v94Ev");}
void  S2440C3_nt ::v95(){vfunc_called(this, "_ZN10S2440C3_nt3v95Ev");}
void  S2440C3_nt ::v96(){vfunc_called(this, "_ZN10S2440C3_nt3v96Ev");}
void  S2440C3_nt ::v97(){vfunc_called(this, "_ZN10S2440C3_nt3v97Ev");}
void  S2440C3_nt ::v98(){vfunc_called(this, "_ZN10S2440C3_nt3v98Ev");}
void  S2440C3_nt ::v99(){vfunc_called(this, "_ZN10S2440C3_nt3v99Ev");}
void  S2440C3_nt ::v100(){vfunc_called(this, "_ZN10S2440C3_nt4v100Ev");}
void  S2440C3_nt ::v101(){vfunc_called(this, "_ZN10S2440C3_nt4v101Ev");}
void  S2440C3_nt ::v102(){vfunc_called(this, "_ZN10S2440C3_nt4v102Ev");}
void  S2440C3_nt ::v103(){vfunc_called(this, "_ZN10S2440C3_nt4v103Ev");}
void  S2440C3_nt ::v104(){vfunc_called(this, "_ZN10S2440C3_nt4v104Ev");}
void  S2440C3_nt ::v105(){vfunc_called(this, "_ZN10S2440C3_nt4v105Ev");}
void  S2440C3_nt ::v106(){vfunc_called(this, "_ZN10S2440C3_nt4v106Ev");}
void  S2440C3_nt ::v107(){vfunc_called(this, "_ZN10S2440C3_nt4v107Ev");}
void  S2440C3_nt ::v108(){vfunc_called(this, "_ZN10S2440C3_nt4v108Ev");}
void  S2440C3_nt ::v109(){vfunc_called(this, "_ZN10S2440C3_nt4v109Ev");}
S2440C3_nt ::S2440C3_nt(){ note_ctor("S2440C3_nt", this);} // tgen

//skip512 S2440C3_nt

#else // __cplusplus

extern void _ZN10S2440C3_ntC1Ev();
extern void _ZN10S2440C3_ntD1Ev();
Name_Map name_map_S2440C3_nt[] = {
  NSPAIR(_ZN10S2440C3_ntC1Ev),
  NSPAIR(_ZN10S2440C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2440C4_nt;
extern VTBL_ENTRY _ZTI10S2440C4_nt[];
extern  VTBL_ENTRY _ZTV10S2440C4_nt[];
static Base_Class bases_S2440C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2440C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2440C3_nt[];
extern void _ZN10S2440C3_ntD1Ev();
extern void _ZN10S2440C3_ntD0Ev();
extern void _ZN10S2440C4_nt2v9Ev();
extern void _ZN10S2440C4_nt3v10Ev();
extern void _ZN10S2440C4_nt3v11Ev();
extern void _ZN10S2440C4_nt3v12Ev();
extern void _ZN10S2440C4_nt3v13Ev();
extern void _ZN10S2440C4_nt3v14Ev();
extern void _ZN10S2440C4_nt3v15Ev();
extern void _ZN10S2440C4_nt3v16Ev();
extern void _ZN10S2440C4_nt3v17Ev();
extern void _ZN10S2440C4_nt3v18Ev();
extern void _ZN10S2440C4_nt3v19Ev();
extern void _ZN10S2440C4_nt3v20Ev();
extern void _ZN10S2440C4_nt3v21Ev();
extern void _ZN10S2440C4_nt3v22Ev();
extern void _ZN10S2440C4_nt3v23Ev();
extern void _ZN10S2440C4_nt3v24Ev();
extern void _ZN10S2440C4_nt3v25Ev();
extern void _ZN10S2440C4_nt3v26Ev();
extern void _ZN10S2440C4_nt3v27Ev();
extern void _ZN10S2440C4_nt3v28Ev();
extern void _ZN10S2440C4_nt3v29Ev();
extern void _ZN10S2440C4_nt3v30Ev();
extern void _ZN10S2440C4_nt3v31Ev();
extern void _ZN10S2440C3_nt3v32Ev();
extern void _ZN10S2440C3_nt3v33Ev();
extern void _ZN10S2440C3_nt3v34Ev();
extern void _ZN10S2440C3_nt3v35Ev();
extern void _ZN10S2440C3_nt3v36Ev();
extern void _ZN10S2440C3_nt3v37Ev();
extern void _ZN10S2440C3_nt3v38Ev();
extern void _ZN10S2440C3_nt3v39Ev();
extern void _ZN10S2440C3_nt3v40Ev();
extern void _ZN10S2440C3_nt3v41Ev();
extern void _ZN10S2440C3_nt3v42Ev();
extern void _ZN10S2440C3_nt3v43Ev();
extern void _ZN10S2440C3_nt3v44Ev();
extern void _ZN10S2440C3_nt3v45Ev();
extern void _ZN10S2440C3_nt3v46Ev();
extern void _ZN10S2440C3_nt3v47Ev();
extern void _ZN10S2440C3_nt3v48Ev();
extern void _ZN10S2440C3_nt3v49Ev();
extern void _ZN10S2440C3_nt3v50Ev();
extern void _ZN10S2440C3_nt3v51Ev();
extern void _ZN10S2440C3_nt3v52Ev();
extern void _ZN10S2440C3_nt3v53Ev();
extern void _ZN10S2440C3_nt3v54Ev();
extern void _ZN10S2440C3_nt3v55Ev();
extern void _ZN10S2440C3_nt3v56Ev();
extern void _ZN10S2440C3_nt3v57Ev();
extern void _ZN10S2440C3_nt3v58Ev();
extern void _ZN10S2440C3_nt3v59Ev();
extern void _ZN10S2440C3_nt3v60Ev();
extern void _ZN10S2440C3_nt3v61Ev();
extern void _ZN10S2440C3_nt3v62Ev();
extern void _ZN10S2440C3_nt3v63Ev();
extern void _ZN10S2440C3_nt3v64Ev();
extern void _ZN10S2440C3_nt3v65Ev();
extern void _ZN10S2440C3_nt3v66Ev();
extern void _ZN10S2440C3_nt3v67Ev();
extern void _ZN10S2440C3_nt3v68Ev();
extern void _ZN10S2440C3_nt3v69Ev();
extern void _ZN10S2440C3_nt3v70Ev();
extern void _ZN10S2440C3_nt3v71Ev();
extern void _ZN10S2440C3_nt3v72Ev();
extern void _ZN10S2440C3_nt3v73Ev();
extern void _ZN10S2440C3_nt3v74Ev();
extern void _ZN10S2440C3_nt3v75Ev();
extern void _ZN10S2440C3_nt3v76Ev();
extern void _ZN10S2440C3_nt3v77Ev();
extern void _ZN10S2440C3_nt3v78Ev();
extern void _ZN10S2440C3_nt3v79Ev();
extern void _ZN10S2440C3_nt3v80Ev();
extern void _ZN10S2440C3_nt3v81Ev();
extern void _ZN10S2440C3_nt3v82Ev();
extern void _ZN10S2440C3_nt3v83Ev();
extern void _ZN10S2440C3_nt3v84Ev();
extern void _ZN10S2440C3_nt3v85Ev();
extern void _ZN10S2440C3_nt3v86Ev();
extern void _ZN10S2440C3_nt3v87Ev();
extern void _ZN10S2440C3_nt3v88Ev();
extern void _ZN10S2440C3_nt3v89Ev();
extern void _ZN10S2440C3_nt3v90Ev();
extern void _ZN10S2440C3_nt3v91Ev();
extern void _ZN10S2440C3_nt3v92Ev();
extern void _ZN10S2440C3_nt3v93Ev();
extern void _ZN10S2440C3_nt3v94Ev();
extern void _ZN10S2440C3_nt3v95Ev();
extern void _ZN10S2440C3_nt3v96Ev();
extern void _ZN10S2440C3_nt3v97Ev();
extern void _ZN10S2440C3_nt3v98Ev();
extern void _ZN10S2440C3_nt3v99Ev();
extern void _ZN10S2440C3_nt4v100Ev();
extern void _ZN10S2440C3_nt4v101Ev();
extern void _ZN10S2440C3_nt4v102Ev();
extern void _ZN10S2440C3_nt4v103Ev();
extern void _ZN10S2440C3_nt4v104Ev();
extern void _ZN10S2440C3_nt4v105Ev();
extern void _ZN10S2440C3_nt4v106Ev();
extern void _ZN10S2440C3_nt4v107Ev();
extern void _ZN10S2440C3_nt4v108Ev();
extern void _ZN10S2440C3_nt4v109Ev();
static  VTBL_ENTRY vtc_S2440C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2440C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2440C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v109Ev,
};
extern VTBL_ENTRY _ZTI10S2440C3_nt[];
VTBL_ENTRY *P__ZTI10S2440C3_nt = _ZTI10S2440C3_nt; 
extern  VTBL_ENTRY _ZTV10S2440C3_nt[];
Class_Descriptor cd_S2440C3_nt = {  "S2440C3_nt", // class name
  bases_S2440C3_nt, 1,
  &(vtc_S2440C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(832,632), // object size
  NSPAIRA(_ZTI10S2440C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2440C3_nt),105, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C2_nt  : S2440C3_nt {
  int s2440c2f0[4];
  void *s2440c2f1;
  unsigned char s2440c2f2:1;
  unsigned char s2440c2f3:1;
  unsigned char s2440c2f4:1;
  unsigned char s2440c2f5:1;
  unsigned char s2440c2f6:1;
  unsigned char s2440c2f7:1;
  int s2440c2f8:8;
  int s2440c2f9:16;
  int s2440c2f10:16;
  int s2440c2f11:16;
  int s2440c2f12:16;
  int s2440c2f13:16;
  int s2440c2f14;
  ::S2440C22 s2440c2f15;
  unsigned char s2440c2f16:1;
  unsigned char s2440c2f17:1;
  virtual  ~S2440C2_nt(); // _ZN10S2440C2_ntD1Ev
  virtual void  v110(); // _ZN10S2440C2_nt4v110Ev
  virtual void  v111(); // _ZN10S2440C2_nt4v111Ev
  virtual void  v112(); // _ZN10S2440C2_nt4v112Ev
  virtual void  v113(); // _ZN10S2440C2_nt4v113Ev
  virtual void  v114(); // _ZN10S2440C2_nt4v114Ev
  virtual void  v115(); // _ZN10S2440C2_nt4v115Ev
  virtual void  v116(); // _ZN10S2440C2_nt4v116Ev
  virtual void  v117(); // _ZN10S2440C2_nt4v117Ev
  virtual void  v118(); // _ZN10S2440C2_nt4v118Ev
  virtual void  v119(); // _ZN10S2440C2_nt4v119Ev
  virtual void  v120(); // _ZN10S2440C2_nt4v120Ev
  virtual void  v121(); // _ZN10S2440C2_nt4v121Ev
  virtual void  v122(); // _ZN10S2440C2_nt4v122Ev
  virtual void  v123(); // _ZN10S2440C2_nt4v123Ev
  virtual void  v124(); // _ZN10S2440C2_nt4v124Ev
  virtual void  v125(); // _ZN10S2440C2_nt4v125Ev
  virtual void  v126(); // _ZN10S2440C2_nt4v126Ev
  virtual void  v127(); // _ZN10S2440C2_nt4v127Ev
  virtual void  v128(); // _ZN10S2440C2_nt4v128Ev
  virtual void  v129(); // _ZN10S2440C2_nt4v129Ev
  virtual void  v130(); // _ZN10S2440C2_nt4v130Ev
  virtual void  v131(); // _ZN10S2440C2_nt4v131Ev
  virtual void  v132(); // _ZN10S2440C2_nt4v132Ev
  virtual void  v133(); // _ZN10S2440C2_nt4v133Ev
  virtual void  v134(); // _ZN10S2440C2_nt4v134Ev
  virtual void  v135(); // _ZN10S2440C2_nt4v135Ev
  virtual void  v136(); // _ZN10S2440C2_nt4v136Ev
  virtual void  v137(); // _ZN10S2440C2_nt4v137Ev
  virtual void  v138(); // _ZN10S2440C2_nt4v138Ev
  virtual void  v139(); // _ZN10S2440C2_nt4v139Ev
  virtual void  v140(); // _ZN10S2440C2_nt4v140Ev
  virtual void  v141(); // _ZN10S2440C2_nt4v141Ev
  virtual void  v142(); // _ZN10S2440C2_nt4v142Ev
  virtual void  v143(); // _ZN10S2440C2_nt4v143Ev
  virtual void  v144(); // _ZN10S2440C2_nt4v144Ev
  virtual void  v145(); // _ZN10S2440C2_nt4v145Ev
  virtual void  v146(); // _ZN10S2440C2_nt4v146Ev
  virtual void  v147(); // _ZN10S2440C2_nt4v147Ev
  virtual void  v148(); // _ZN10S2440C2_nt4v148Ev
  S2440C2_nt(); // tgen
};
//SIG(-1 S2440C2_nt) C1{ BC2{ BC3{ vd v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 Fp Fi FC4{ BC5{ m Fp Fi FC6{ m} FC6}} FC4 Fi} vd v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 FC7{ m FC8{ m FL[2]}} FC7 FC7 FC7 FC9{ m FC7} FC10{ m FC7 FC7 FC7 FC7} FC10 FC7 FC7 FC7 Fp FC9 FC11{ m FC12{ m Fp Fi FC13{ m}} Fi} Fi Fp[7] FC14{ m Fp Fi FC13 FC15{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC16{ BC17{ m Fp Fi FC15 FC18{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC19{ m Fp Fi[2] FC18} Fp[2] Fi:16 Fi:16 FC16 FC19 FC20{ m Fp Fi[2] FC21{ m}} Fp[2] Fi:24 Fi:8 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 Fi[4] Fp Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi:8 Fi:16 Fi:16 Fi:16 Fi:16 Fi:16 Fi FC14 Fc:1 Fc:1}


 S2440C2_nt ::~S2440C2_nt(){ note_dtor("S2440C2_nt", this);}
void  S2440C2_nt ::v110(){vfunc_called(this, "_ZN10S2440C2_nt4v110Ev");}
void  S2440C2_nt ::v111(){vfunc_called(this, "_ZN10S2440C2_nt4v111Ev");}
void  S2440C2_nt ::v112(){vfunc_called(this, "_ZN10S2440C2_nt4v112Ev");}
void  S2440C2_nt ::v113(){vfunc_called(this, "_ZN10S2440C2_nt4v113Ev");}
void  S2440C2_nt ::v114(){vfunc_called(this, "_ZN10S2440C2_nt4v114Ev");}
void  S2440C2_nt ::v115(){vfunc_called(this, "_ZN10S2440C2_nt4v115Ev");}
void  S2440C2_nt ::v116(){vfunc_called(this, "_ZN10S2440C2_nt4v116Ev");}
void  S2440C2_nt ::v117(){vfunc_called(this, "_ZN10S2440C2_nt4v117Ev");}
void  S2440C2_nt ::v118(){vfunc_called(this, "_ZN10S2440C2_nt4v118Ev");}
void  S2440C2_nt ::v119(){vfunc_called(this, "_ZN10S2440C2_nt4v119Ev");}
void  S2440C2_nt ::v120(){vfunc_called(this, "_ZN10S2440C2_nt4v120Ev");}
void  S2440C2_nt ::v121(){vfunc_called(this, "_ZN10S2440C2_nt4v121Ev");}
void  S2440C2_nt ::v122(){vfunc_called(this, "_ZN10S2440C2_nt4v122Ev");}
void  S2440C2_nt ::v123(){vfunc_called(this, "_ZN10S2440C2_nt4v123Ev");}
void  S2440C2_nt ::v124(){vfunc_called(this, "_ZN10S2440C2_nt4v124Ev");}
void  S2440C2_nt ::v125(){vfunc_called(this, "_ZN10S2440C2_nt4v125Ev");}
void  S2440C2_nt ::v126(){vfunc_called(this, "_ZN10S2440C2_nt4v126Ev");}
void  S2440C2_nt ::v127(){vfunc_called(this, "_ZN10S2440C2_nt4v127Ev");}
void  S2440C2_nt ::v128(){vfunc_called(this, "_ZN10S2440C2_nt4v128Ev");}
void  S2440C2_nt ::v129(){vfunc_called(this, "_ZN10S2440C2_nt4v129Ev");}
void  S2440C2_nt ::v130(){vfunc_called(this, "_ZN10S2440C2_nt4v130Ev");}
void  S2440C2_nt ::v131(){vfunc_called(this, "_ZN10S2440C2_nt4v131Ev");}
void  S2440C2_nt ::v132(){vfunc_called(this, "_ZN10S2440C2_nt4v132Ev");}
void  S2440C2_nt ::v133(){vfunc_called(this, "_ZN10S2440C2_nt4v133Ev");}
void  S2440C2_nt ::v134(){vfunc_called(this, "_ZN10S2440C2_nt4v134Ev");}
void  S2440C2_nt ::v135(){vfunc_called(this, "_ZN10S2440C2_nt4v135Ev");}
void  S2440C2_nt ::v136(){vfunc_called(this, "_ZN10S2440C2_nt4v136Ev");}
void  S2440C2_nt ::v137(){vfunc_called(this, "_ZN10S2440C2_nt4v137Ev");}
void  S2440C2_nt ::v138(){vfunc_called(this, "_ZN10S2440C2_nt4v138Ev");}
void  S2440C2_nt ::v139(){vfunc_called(this, "_ZN10S2440C2_nt4v139Ev");}
void  S2440C2_nt ::v140(){vfunc_called(this, "_ZN10S2440C2_nt4v140Ev");}
void  S2440C2_nt ::v141(){vfunc_called(this, "_ZN10S2440C2_nt4v141Ev");}
void  S2440C2_nt ::v142(){vfunc_called(this, "_ZN10S2440C2_nt4v142Ev");}
void  S2440C2_nt ::v143(){vfunc_called(this, "_ZN10S2440C2_nt4v143Ev");}
void  S2440C2_nt ::v144(){vfunc_called(this, "_ZN10S2440C2_nt4v144Ev");}
void  S2440C2_nt ::v145(){vfunc_called(this, "_ZN10S2440C2_nt4v145Ev");}
void  S2440C2_nt ::v146(){vfunc_called(this, "_ZN10S2440C2_nt4v146Ev");}
void  S2440C2_nt ::v147(){vfunc_called(this, "_ZN10S2440C2_nt4v147Ev");}
void  S2440C2_nt ::v148(){vfunc_called(this, "_ZN10S2440C2_nt4v148Ev");}
S2440C2_nt ::S2440C2_nt(){ note_ctor("S2440C2_nt", this);} // tgen

//skip512 S2440C2_nt

#else // __cplusplus

extern void _ZN10S2440C2_ntC1Ev();
extern void _ZN10S2440C2_ntD1Ev();
Name_Map name_map_S2440C2_nt[] = {
  NSPAIR(_ZN10S2440C2_ntC1Ev),
  NSPAIR(_ZN10S2440C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2440C4_nt;
extern VTBL_ENTRY _ZTI10S2440C4_nt[];
extern  VTBL_ENTRY _ZTV10S2440C4_nt[];
extern Class_Descriptor cd_S2440C3_nt;
extern VTBL_ENTRY _ZTI10S2440C3_nt[];
extern  VTBL_ENTRY _ZTV10S2440C3_nt[];
static Base_Class bases_S2440C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2440C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2440C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2440C2_nt[];
extern void _ZN10S2440C2_ntD1Ev();
extern void _ZN10S2440C2_ntD0Ev();
extern void _ZN10S2440C4_nt2v9Ev();
extern void _ZN10S2440C4_nt3v10Ev();
extern void _ZN10S2440C4_nt3v11Ev();
extern void _ZN10S2440C4_nt3v12Ev();
extern void _ZN10S2440C4_nt3v13Ev();
extern void _ZN10S2440C4_nt3v14Ev();
extern void _ZN10S2440C4_nt3v15Ev();
extern void _ZN10S2440C4_nt3v16Ev();
extern void _ZN10S2440C4_nt3v17Ev();
extern void _ZN10S2440C4_nt3v18Ev();
extern void _ZN10S2440C4_nt3v19Ev();
extern void _ZN10S2440C4_nt3v20Ev();
extern void _ZN10S2440C4_nt3v21Ev();
extern void _ZN10S2440C4_nt3v22Ev();
extern void _ZN10S2440C4_nt3v23Ev();
extern void _ZN10S2440C4_nt3v24Ev();
extern void _ZN10S2440C4_nt3v25Ev();
extern void _ZN10S2440C4_nt3v26Ev();
extern void _ZN10S2440C4_nt3v27Ev();
extern void _ZN10S2440C4_nt3v28Ev();
extern void _ZN10S2440C4_nt3v29Ev();
extern void _ZN10S2440C4_nt3v30Ev();
extern void _ZN10S2440C4_nt3v31Ev();
extern void _ZN10S2440C3_nt3v32Ev();
extern void _ZN10S2440C3_nt3v33Ev();
extern void _ZN10S2440C3_nt3v34Ev();
extern void _ZN10S2440C3_nt3v35Ev();
extern void _ZN10S2440C3_nt3v36Ev();
extern void _ZN10S2440C3_nt3v37Ev();
extern void _ZN10S2440C3_nt3v38Ev();
extern void _ZN10S2440C3_nt3v39Ev();
extern void _ZN10S2440C3_nt3v40Ev();
extern void _ZN10S2440C3_nt3v41Ev();
extern void _ZN10S2440C3_nt3v42Ev();
extern void _ZN10S2440C3_nt3v43Ev();
extern void _ZN10S2440C3_nt3v44Ev();
extern void _ZN10S2440C3_nt3v45Ev();
extern void _ZN10S2440C3_nt3v46Ev();
extern void _ZN10S2440C3_nt3v47Ev();
extern void _ZN10S2440C3_nt3v48Ev();
extern void _ZN10S2440C3_nt3v49Ev();
extern void _ZN10S2440C3_nt3v50Ev();
extern void _ZN10S2440C3_nt3v51Ev();
extern void _ZN10S2440C3_nt3v52Ev();
extern void _ZN10S2440C3_nt3v53Ev();
extern void _ZN10S2440C3_nt3v54Ev();
extern void _ZN10S2440C3_nt3v55Ev();
extern void _ZN10S2440C3_nt3v56Ev();
extern void _ZN10S2440C3_nt3v57Ev();
extern void _ZN10S2440C3_nt3v58Ev();
extern void _ZN10S2440C3_nt3v59Ev();
extern void _ZN10S2440C3_nt3v60Ev();
extern void _ZN10S2440C3_nt3v61Ev();
extern void _ZN10S2440C3_nt3v62Ev();
extern void _ZN10S2440C3_nt3v63Ev();
extern void _ZN10S2440C3_nt3v64Ev();
extern void _ZN10S2440C3_nt3v65Ev();
extern void _ZN10S2440C3_nt3v66Ev();
extern void _ZN10S2440C3_nt3v67Ev();
extern void _ZN10S2440C3_nt3v68Ev();
extern void _ZN10S2440C3_nt3v69Ev();
extern void _ZN10S2440C3_nt3v70Ev();
extern void _ZN10S2440C3_nt3v71Ev();
extern void _ZN10S2440C3_nt3v72Ev();
extern void _ZN10S2440C3_nt3v73Ev();
extern void _ZN10S2440C3_nt3v74Ev();
extern void _ZN10S2440C3_nt3v75Ev();
extern void _ZN10S2440C3_nt3v76Ev();
extern void _ZN10S2440C3_nt3v77Ev();
extern void _ZN10S2440C3_nt3v78Ev();
extern void _ZN10S2440C3_nt3v79Ev();
extern void _ZN10S2440C3_nt3v80Ev();
extern void _ZN10S2440C3_nt3v81Ev();
extern void _ZN10S2440C3_nt3v82Ev();
extern void _ZN10S2440C3_nt3v83Ev();
extern void _ZN10S2440C3_nt3v84Ev();
extern void _ZN10S2440C3_nt3v85Ev();
extern void _ZN10S2440C3_nt3v86Ev();
extern void _ZN10S2440C3_nt3v87Ev();
extern void _ZN10S2440C3_nt3v88Ev();
extern void _ZN10S2440C3_nt3v89Ev();
extern void _ZN10S2440C3_nt3v90Ev();
extern void _ZN10S2440C3_nt3v91Ev();
extern void _ZN10S2440C3_nt3v92Ev();
extern void _ZN10S2440C3_nt3v93Ev();
extern void _ZN10S2440C3_nt3v94Ev();
extern void _ZN10S2440C3_nt3v95Ev();
extern void _ZN10S2440C3_nt3v96Ev();
extern void _ZN10S2440C3_nt3v97Ev();
extern void _ZN10S2440C3_nt3v98Ev();
extern void _ZN10S2440C3_nt3v99Ev();
extern void _ZN10S2440C3_nt4v100Ev();
extern void _ZN10S2440C3_nt4v101Ev();
extern void _ZN10S2440C3_nt4v102Ev();
extern void _ZN10S2440C3_nt4v103Ev();
extern void _ZN10S2440C3_nt4v104Ev();
extern void _ZN10S2440C3_nt4v105Ev();
extern void _ZN10S2440C3_nt4v106Ev();
extern void _ZN10S2440C3_nt4v107Ev();
extern void _ZN10S2440C3_nt4v108Ev();
extern void _ZN10S2440C3_nt4v109Ev();
extern void _ZN10S2440C2_nt4v110Ev();
extern void _ZN10S2440C2_nt4v111Ev();
extern void _ZN10S2440C2_nt4v112Ev();
extern void _ZN10S2440C2_nt4v113Ev();
extern void _ZN10S2440C2_nt4v114Ev();
extern void _ZN10S2440C2_nt4v115Ev();
extern void _ZN10S2440C2_nt4v116Ev();
extern void _ZN10S2440C2_nt4v117Ev();
extern void _ZN10S2440C2_nt4v118Ev();
extern void _ZN10S2440C2_nt4v119Ev();
extern void _ZN10S2440C2_nt4v120Ev();
extern void _ZN10S2440C2_nt4v121Ev();
extern void _ZN10S2440C2_nt4v122Ev();
extern void _ZN10S2440C2_nt4v123Ev();
extern void _ZN10S2440C2_nt4v124Ev();
extern void _ZN10S2440C2_nt4v125Ev();
extern void _ZN10S2440C2_nt4v126Ev();
extern void _ZN10S2440C2_nt4v127Ev();
extern void _ZN10S2440C2_nt4v128Ev();
extern void _ZN10S2440C2_nt4v129Ev();
extern void _ZN10S2440C2_nt4v130Ev();
extern void _ZN10S2440C2_nt4v131Ev();
extern void _ZN10S2440C2_nt4v132Ev();
extern void _ZN10S2440C2_nt4v133Ev();
extern void _ZN10S2440C2_nt4v134Ev();
extern void _ZN10S2440C2_nt4v135Ev();
extern void _ZN10S2440C2_nt4v136Ev();
extern void _ZN10S2440C2_nt4v137Ev();
extern void _ZN10S2440C2_nt4v138Ev();
extern void _ZN10S2440C2_nt4v139Ev();
extern void _ZN10S2440C2_nt4v140Ev();
extern void _ZN10S2440C2_nt4v141Ev();
extern void _ZN10S2440C2_nt4v142Ev();
extern void _ZN10S2440C2_nt4v143Ev();
extern void _ZN10S2440C2_nt4v144Ev();
extern void _ZN10S2440C2_nt4v145Ev();
extern void _ZN10S2440C2_nt4v146Ev();
extern void _ZN10S2440C2_nt4v147Ev();
extern void _ZN10S2440C2_nt4v148Ev();
static  VTBL_ENTRY vtc_S2440C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2440C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2440C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v148Ev,
};
extern VTBL_ENTRY _ZTI10S2440C2_nt[];
VTBL_ENTRY *P__ZTI10S2440C2_nt = _ZTI10S2440C2_nt; 
extern  VTBL_ENTRY _ZTV10S2440C2_nt[];
Class_Descriptor cd_S2440C2_nt = {  "S2440C2_nt", // class name
  bases_S2440C2_nt, 2,
  &(vtc_S2440C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(896,684), // object size
  NSPAIRA(_ZTI10S2440C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2440C2_nt),144, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2440C1  : S2440C2_nt {
  virtual  ~S2440C1(); // _ZN7S2440C1D1Ev
  virtual void  v1(); // _ZN7S2440C12v1Ev
  virtual void  v2(); // _ZN7S2440C12v2Ev
  virtual void  v3(); // _ZN7S2440C12v3Ev
  virtual void  v4(); // _ZN7S2440C12v4Ev
  virtual void  v5(); // _ZN7S2440C12v5Ev
  virtual void  v6(); // _ZN7S2440C12v6Ev
  virtual void  v7(); // _ZN7S2440C12v7Ev
  virtual void  v8(); // _ZN7S2440C12v8Ev
  S2440C1(); // tgen
};
//SIG(1 S2440C1) C1{ BC2{ BC3{ BC4{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 Fp Fi FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC5 Fi} vd v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 FC8{ m FC9{ m FL[2]}} FC8 FC8 FC8 FC10{ m FC8} FC11{ m FC8 FC8 FC8 FC8} FC11 FC8 FC8 FC8 Fp FC10 FC12{ m FC13{ m Fp Fi FC14{ m}} Fi} Fi Fp[7] FC15{ m Fp Fi FC14 FC16{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC17{ BC18{ m Fp Fi FC16 FC19{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC20{ m Fp Fi[2] FC19} Fp[2] Fi:16 Fi:16 FC17 FC20 FC21{ m Fp Fi[2] FC22{ m}} Fp[2] Fi:24 Fi:8 Fp} vd v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 Fi[4] Fp Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi:8 Fi:16 Fi:16 Fi:16 Fi:16 Fi:16 Fi FC15 Fc:1 Fc:1} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S2440C1 ::~S2440C1(){ note_dtor("S2440C1", this);}
void  S2440C1 ::v1(){vfunc_called(this, "_ZN7S2440C12v1Ev");}
void  S2440C1 ::v2(){vfunc_called(this, "_ZN7S2440C12v2Ev");}
void  S2440C1 ::v3(){vfunc_called(this, "_ZN7S2440C12v3Ev");}
void  S2440C1 ::v4(){vfunc_called(this, "_ZN7S2440C12v4Ev");}
void  S2440C1 ::v5(){vfunc_called(this, "_ZN7S2440C12v5Ev");}
void  S2440C1 ::v6(){vfunc_called(this, "_ZN7S2440C12v6Ev");}
void  S2440C1 ::v7(){vfunc_called(this, "_ZN7S2440C12v7Ev");}
void  S2440C1 ::v8(){vfunc_called(this, "_ZN7S2440C12v8Ev");}
S2440C1 ::S2440C1(){ note_ctor("S2440C1", this);} // tgen

static void Test_S2440C1()
{
  extern Class_Descriptor cd_S2440C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(113,172)];
    init_test(&cd_S2440C1, buf);
    S2440C1 *dp, &lv = *(dp=new (buf) S2440C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(896,684), "sizeof(S2440C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2440C1)");
    check_base_class_offset(lv, (S2440C4_nt*)(S2440C3_nt*)(S2440C2_nt*), 0, "S2440C1");
    check_base_class_offset(lv, (S2440C3_nt*)(S2440C2_nt*), 0, "S2440C1");
    check_base_class_offset(lv, (S2440C2_nt*), 0, "S2440C1");
    test_class_info(&lv, &cd_S2440C1);
    dp->~S2440C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2440C1(Test_S2440C1, "S2440C1", ABISELECT(896,684));

#else // __cplusplus

extern void _ZN7S2440C1C1Ev();
extern void _ZN7S2440C1D1Ev();
Name_Map name_map_S2440C1[] = {
  NSPAIR(_ZN7S2440C1C1Ev),
  NSPAIR(_ZN7S2440C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2440C4_nt;
extern VTBL_ENTRY _ZTI10S2440C4_nt[];
extern  VTBL_ENTRY _ZTV10S2440C4_nt[];
extern Class_Descriptor cd_S2440C3_nt;
extern VTBL_ENTRY _ZTI10S2440C3_nt[];
extern  VTBL_ENTRY _ZTV10S2440C3_nt[];
extern Class_Descriptor cd_S2440C2_nt;
extern VTBL_ENTRY _ZTI10S2440C2_nt[];
extern  VTBL_ENTRY _ZTV10S2440C2_nt[];
static Base_Class bases_S2440C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2440C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2440C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2440C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2440C1[];
extern void _ZN7S2440C1D1Ev();
extern void _ZN7S2440C1D0Ev();
extern void _ZN10S2440C4_nt2v9Ev();
extern void _ZN10S2440C4_nt3v10Ev();
extern void _ZN10S2440C4_nt3v11Ev();
extern void _ZN10S2440C4_nt3v12Ev();
extern void _ZN10S2440C4_nt3v13Ev();
extern void _ZN10S2440C4_nt3v14Ev();
extern void _ZN10S2440C4_nt3v15Ev();
extern void _ZN10S2440C4_nt3v16Ev();
extern void _ZN10S2440C4_nt3v17Ev();
extern void _ZN10S2440C4_nt3v18Ev();
extern void _ZN10S2440C4_nt3v19Ev();
extern void _ZN10S2440C4_nt3v20Ev();
extern void _ZN10S2440C4_nt3v21Ev();
extern void _ZN10S2440C4_nt3v22Ev();
extern void _ZN10S2440C4_nt3v23Ev();
extern void _ZN10S2440C4_nt3v24Ev();
extern void _ZN10S2440C4_nt3v25Ev();
extern void _ZN10S2440C4_nt3v26Ev();
extern void _ZN10S2440C4_nt3v27Ev();
extern void _ZN10S2440C4_nt3v28Ev();
extern void _ZN10S2440C4_nt3v29Ev();
extern void _ZN10S2440C4_nt3v30Ev();
extern void _ZN10S2440C4_nt3v31Ev();
extern void _ZN10S2440C3_nt3v32Ev();
extern void _ZN10S2440C3_nt3v33Ev();
extern void _ZN10S2440C3_nt3v34Ev();
extern void _ZN10S2440C3_nt3v35Ev();
extern void _ZN10S2440C3_nt3v36Ev();
extern void _ZN10S2440C3_nt3v37Ev();
extern void _ZN10S2440C3_nt3v38Ev();
extern void _ZN10S2440C3_nt3v39Ev();
extern void _ZN10S2440C3_nt3v40Ev();
extern void _ZN10S2440C3_nt3v41Ev();
extern void _ZN10S2440C3_nt3v42Ev();
extern void _ZN10S2440C3_nt3v43Ev();
extern void _ZN10S2440C3_nt3v44Ev();
extern void _ZN10S2440C3_nt3v45Ev();
extern void _ZN10S2440C3_nt3v46Ev();
extern void _ZN10S2440C3_nt3v47Ev();
extern void _ZN10S2440C3_nt3v48Ev();
extern void _ZN10S2440C3_nt3v49Ev();
extern void _ZN10S2440C3_nt3v50Ev();
extern void _ZN10S2440C3_nt3v51Ev();
extern void _ZN10S2440C3_nt3v52Ev();
extern void _ZN10S2440C3_nt3v53Ev();
extern void _ZN10S2440C3_nt3v54Ev();
extern void _ZN10S2440C3_nt3v55Ev();
extern void _ZN10S2440C3_nt3v56Ev();
extern void _ZN10S2440C3_nt3v57Ev();
extern void _ZN10S2440C3_nt3v58Ev();
extern void _ZN10S2440C3_nt3v59Ev();
extern void _ZN10S2440C3_nt3v60Ev();
extern void _ZN10S2440C3_nt3v61Ev();
extern void _ZN10S2440C3_nt3v62Ev();
extern void _ZN10S2440C3_nt3v63Ev();
extern void _ZN10S2440C3_nt3v64Ev();
extern void _ZN10S2440C3_nt3v65Ev();
extern void _ZN10S2440C3_nt3v66Ev();
extern void _ZN10S2440C3_nt3v67Ev();
extern void _ZN10S2440C3_nt3v68Ev();
extern void _ZN10S2440C3_nt3v69Ev();
extern void _ZN10S2440C3_nt3v70Ev();
extern void _ZN10S2440C3_nt3v71Ev();
extern void _ZN10S2440C3_nt3v72Ev();
extern void _ZN10S2440C3_nt3v73Ev();
extern void _ZN10S2440C3_nt3v74Ev();
extern void _ZN10S2440C3_nt3v75Ev();
extern void _ZN10S2440C3_nt3v76Ev();
extern void _ZN10S2440C3_nt3v77Ev();
extern void _ZN10S2440C3_nt3v78Ev();
extern void _ZN10S2440C3_nt3v79Ev();
extern void _ZN10S2440C3_nt3v80Ev();
extern void _ZN10S2440C3_nt3v81Ev();
extern void _ZN10S2440C3_nt3v82Ev();
extern void _ZN10S2440C3_nt3v83Ev();
extern void _ZN10S2440C3_nt3v84Ev();
extern void _ZN10S2440C3_nt3v85Ev();
extern void _ZN10S2440C3_nt3v86Ev();
extern void _ZN10S2440C3_nt3v87Ev();
extern void _ZN10S2440C3_nt3v88Ev();
extern void _ZN10S2440C3_nt3v89Ev();
extern void _ZN10S2440C3_nt3v90Ev();
extern void _ZN10S2440C3_nt3v91Ev();
extern void _ZN10S2440C3_nt3v92Ev();
extern void _ZN10S2440C3_nt3v93Ev();
extern void _ZN10S2440C3_nt3v94Ev();
extern void _ZN10S2440C3_nt3v95Ev();
extern void _ZN10S2440C3_nt3v96Ev();
extern void _ZN10S2440C3_nt3v97Ev();
extern void _ZN10S2440C3_nt3v98Ev();
extern void _ZN10S2440C3_nt3v99Ev();
extern void _ZN10S2440C3_nt4v100Ev();
extern void _ZN10S2440C3_nt4v101Ev();
extern void _ZN10S2440C3_nt4v102Ev();
extern void _ZN10S2440C3_nt4v103Ev();
extern void _ZN10S2440C3_nt4v104Ev();
extern void _ZN10S2440C3_nt4v105Ev();
extern void _ZN10S2440C3_nt4v106Ev();
extern void _ZN10S2440C3_nt4v107Ev();
extern void _ZN10S2440C3_nt4v108Ev();
extern void _ZN10S2440C3_nt4v109Ev();
extern void _ZN10S2440C2_nt4v110Ev();
extern void _ZN10S2440C2_nt4v111Ev();
extern void _ZN10S2440C2_nt4v112Ev();
extern void _ZN10S2440C2_nt4v113Ev();
extern void _ZN10S2440C2_nt4v114Ev();
extern void _ZN10S2440C2_nt4v115Ev();
extern void _ZN10S2440C2_nt4v116Ev();
extern void _ZN10S2440C2_nt4v117Ev();
extern void _ZN10S2440C2_nt4v118Ev();
extern void _ZN10S2440C2_nt4v119Ev();
extern void _ZN10S2440C2_nt4v120Ev();
extern void _ZN10S2440C2_nt4v121Ev();
extern void _ZN10S2440C2_nt4v122Ev();
extern void _ZN10S2440C2_nt4v123Ev();
extern void _ZN10S2440C2_nt4v124Ev();
extern void _ZN10S2440C2_nt4v125Ev();
extern void _ZN10S2440C2_nt4v126Ev();
extern void _ZN10S2440C2_nt4v127Ev();
extern void _ZN10S2440C2_nt4v128Ev();
extern void _ZN10S2440C2_nt4v129Ev();
extern void _ZN10S2440C2_nt4v130Ev();
extern void _ZN10S2440C2_nt4v131Ev();
extern void _ZN10S2440C2_nt4v132Ev();
extern void _ZN10S2440C2_nt4v133Ev();
extern void _ZN10S2440C2_nt4v134Ev();
extern void _ZN10S2440C2_nt4v135Ev();
extern void _ZN10S2440C2_nt4v136Ev();
extern void _ZN10S2440C2_nt4v137Ev();
extern void _ZN10S2440C2_nt4v138Ev();
extern void _ZN10S2440C2_nt4v139Ev();
extern void _ZN10S2440C2_nt4v140Ev();
extern void _ZN10S2440C2_nt4v141Ev();
extern void _ZN10S2440C2_nt4v142Ev();
extern void _ZN10S2440C2_nt4v143Ev();
extern void _ZN10S2440C2_nt4v144Ev();
extern void _ZN10S2440C2_nt4v145Ev();
extern void _ZN10S2440C2_nt4v146Ev();
extern void _ZN10S2440C2_nt4v147Ev();
extern void _ZN10S2440C2_nt4v148Ev();
extern void _ZN7S2440C12v1Ev();
extern void _ZN7S2440C12v2Ev();
extern void _ZN7S2440C12v3Ev();
extern void _ZN7S2440C12v4Ev();
extern void _ZN7S2440C12v5Ev();
extern void _ZN7S2440C12v6Ev();
extern void _ZN7S2440C12v7Ev();
extern void _ZN7S2440C12v8Ev();
static  VTBL_ENTRY vtc_S2440C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2440C1[0]),
  (VTBL_ENTRY)&_ZN7S2440C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2440C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2440C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2440C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S2440C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN7S2440C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2440C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2440C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2440C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2440C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2440C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2440C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2440C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S2440C1[];
extern  VTBL_ENTRY _ZTV7S2440C1[];
Class_Descriptor cd_S2440C1 = {  "S2440C1", // class name
  bases_S2440C1, 3,
  &(vtc_S2440C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(896,684), // object size
  NSPAIRA(_ZTI7S2440C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2440C1),152, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4206C3  {
  void *s4206c3f0;
  int s4206c3f1;
  ::S2440C25 s4206c3f2;
  ::S2440C5_nt s4206c3f3;
  int s4206c3f4;
  virtual  ~S4206C3(); // _ZN7S4206C3D1Ev
  virtual void  v10(); // _ZN7S4206C33v10Ev
  virtual void  v11(); // _ZN7S4206C33v11Ev
  virtual void  v12(); // _ZN7S4206C33v12Ev
  virtual void  v13(); // _ZN7S4206C33v13Ev
  virtual void  v14(); // _ZN7S4206C33v14Ev
  virtual void  v15(); // _ZN7S4206C33v15Ev
  virtual void  v16(); // _ZN7S4206C33v16Ev
  virtual void  v17(); // _ZN7S4206C33v17Ev
  virtual void  v18(); // _ZN7S4206C33v18Ev
  virtual void  v19(); // _ZN7S4206C33v19Ev
  virtual void  v20(); // _ZN7S4206C33v20Ev
  virtual void  v21(); // _ZN7S4206C33v21Ev
  virtual void  v22(); // _ZN7S4206C33v22Ev
  virtual void  v23(); // _ZN7S4206C33v23Ev
  virtual void  v24(); // _ZN7S4206C33v24Ev
  virtual void  v25(); // _ZN7S4206C33v25Ev
  virtual void  v26(); // _ZN7S4206C33v26Ev
  virtual void  v27(); // _ZN7S4206C33v27Ev
  virtual void  v28(); // _ZN7S4206C33v28Ev
  virtual void  v29(); // _ZN7S4206C33v29Ev
  virtual void  v30(); // _ZN7S4206C33v30Ev
  virtual void  v31(); // _ZN7S4206C33v31Ev
  virtual void  v32(); // _ZN7S4206C33v32Ev
  S4206C3(); // tgen
};
//SIG(-1 S4206C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp Fi FC2{ BC3{ m Fp Fi FC4{ m} FC5{ m}}} FC6{ BC7{ m Fp Fi FC8{ m} FC8}} Fi}


 S4206C3 ::~S4206C3(){ note_dtor("S4206C3", this);}
void  S4206C3 ::v10(){vfunc_called(this, "_ZN7S4206C33v10Ev");}
void  S4206C3 ::v11(){vfunc_called(this, "_ZN7S4206C33v11Ev");}
void  S4206C3 ::v12(){vfunc_called(this, "_ZN7S4206C33v12Ev");}
void  S4206C3 ::v13(){vfunc_called(this, "_ZN7S4206C33v13Ev");}
void  S4206C3 ::v14(){vfunc_called(this, "_ZN7S4206C33v14Ev");}
void  S4206C3 ::v15(){vfunc_called(this, "_ZN7S4206C33v15Ev");}
void  S4206C3 ::v16(){vfunc_called(this, "_ZN7S4206C33v16Ev");}
void  S4206C3 ::v17(){vfunc_called(this, "_ZN7S4206C33v17Ev");}
void  S4206C3 ::v18(){vfunc_called(this, "_ZN7S4206C33v18Ev");}
void  S4206C3 ::v19(){vfunc_called(this, "_ZN7S4206C33v19Ev");}
void  S4206C3 ::v20(){vfunc_called(this, "_ZN7S4206C33v20Ev");}
void  S4206C3 ::v21(){vfunc_called(this, "_ZN7S4206C33v21Ev");}
void  S4206C3 ::v22(){vfunc_called(this, "_ZN7S4206C33v22Ev");}
void  S4206C3 ::v23(){vfunc_called(this, "_ZN7S4206C33v23Ev");}
void  S4206C3 ::v24(){vfunc_called(this, "_ZN7S4206C33v24Ev");}
void  S4206C3 ::v25(){vfunc_called(this, "_ZN7S4206C33v25Ev");}
void  S4206C3 ::v26(){vfunc_called(this, "_ZN7S4206C33v26Ev");}
void  S4206C3 ::v27(){vfunc_called(this, "_ZN7S4206C33v27Ev");}
void  S4206C3 ::v28(){vfunc_called(this, "_ZN7S4206C33v28Ev");}
void  S4206C3 ::v29(){vfunc_called(this, "_ZN7S4206C33v29Ev");}
void  S4206C3 ::v30(){vfunc_called(this, "_ZN7S4206C33v30Ev");}
void  S4206C3 ::v31(){vfunc_called(this, "_ZN7S4206C33v31Ev");}
void  S4206C3 ::v32(){vfunc_called(this, "_ZN7S4206C33v32Ev");}
S4206C3 ::S4206C3(){ note_ctor("S4206C3", this);} // tgen

static void Test_S4206C3()
{
  extern Class_Descriptor cd_S4206C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S4206C3, buf);
    S4206C3 *dp, &lv = *(dp=new (buf) S4206C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S4206C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4206C3)");
    check_field_offset(lv, s4206c3f0, ABISELECT(8,4), "S4206C3.s4206c3f0");
    check_field_offset(lv, s4206c3f1, ABISELECT(16,8), "S4206C3.s4206c3f1");
    check_field_offset(lv, s4206c3f2, ABISELECT(24,12), "S4206C3.s4206c3f2");
    check_field_offset(lv, s4206c3f3, ABISELECT(40,24), "S4206C3.s4206c3f3");
    check_field_offset(lv, s4206c3f4, ABISELECT(56,36), "S4206C3.s4206c3f4");
    test_class_info(&lv, &cd_S4206C3);
    dp->~S4206C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4206C3(Test_S4206C3, "S4206C3", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S4206C3C1Ev();
extern void _ZN7S4206C3D1Ev();
Name_Map name_map_S4206C3[] = {
  NSPAIR(_ZN7S4206C3C1Ev),
  NSPAIR(_ZN7S4206C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4206C3[];
extern void _ZN7S4206C3D1Ev();
extern void _ZN7S4206C3D0Ev();
extern void _ZN7S4206C33v10Ev();
extern void _ZN7S4206C33v11Ev();
extern void _ZN7S4206C33v12Ev();
extern void _ZN7S4206C33v13Ev();
extern void _ZN7S4206C33v14Ev();
extern void _ZN7S4206C33v15Ev();
extern void _ZN7S4206C33v16Ev();
extern void _ZN7S4206C33v17Ev();
extern void _ZN7S4206C33v18Ev();
extern void _ZN7S4206C33v19Ev();
extern void _ZN7S4206C33v20Ev();
extern void _ZN7S4206C33v21Ev();
extern void _ZN7S4206C33v22Ev();
extern void _ZN7S4206C33v23Ev();
extern void _ZN7S4206C33v24Ev();
extern void _ZN7S4206C33v25Ev();
extern void _ZN7S4206C33v26Ev();
extern void _ZN7S4206C33v27Ev();
extern void _ZN7S4206C33v28Ev();
extern void _ZN7S4206C33v29Ev();
extern void _ZN7S4206C33v30Ev();
extern void _ZN7S4206C33v31Ev();
extern void _ZN7S4206C33v32Ev();
static  VTBL_ENTRY vtc_S4206C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4206C3[0]),
  (VTBL_ENTRY)&_ZN7S4206C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4206C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v32Ev,
};
extern VTBL_ENTRY _ZTI7S4206C3[];
extern  VTBL_ENTRY _ZTV7S4206C3[];
Class_Descriptor cd_S4206C3 = {  "S4206C3", // class name
  0,0,//no base classes
  &(vtc_S4206C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S4206C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4206C3),27, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4206C14_nt  {
  ::S2440C14_nt s4206c14f0;
  void  mf4206c14(); // _ZN11S4206C14_nt9mf4206c14Ev
};
//SIG(-1 S4206C14_nt) C1{ m FC2{ m FL[2]}}


void  S4206C14_nt ::mf4206c14(){}

//skip512 S4206C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4206C24_nt  : S2440C22 {
};
//SIG(-1 S4206C24_nt) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



//skip512 S4206C24_nt

#else // __cplusplus

extern Class_Descriptor cd_S2440C22;
static Base_Class bases_S4206C24_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2440C22,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4206C36_nt  {
  void *s4206c36f0;
  int s4206c36f1[2];
  ::S2440C38 s4206c36f2;
  void  mf4206c36(); // _ZN11S4206C36_nt9mf4206c36Ev
};
//SIG(-1 S4206C36_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S4206C36_nt ::mf4206c36(){}

//skip512 S4206C36_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4206C2  : S4206C3 {
  ::S2440C13_nt s4206c2f0;
  ::S2440C13_nt s4206c2f1;
  ::S2440C13_nt s4206c2f2;
  ::S4206C14_nt s4206c2f3;
  ::S2440C17_nt s4206c2f4;
  ::S2440C18_nt s4206c2f5;
  ::S2440C18_nt s4206c2f6;
  ::S2440C13_nt s4206c2f7;
  ::S2440C13_nt s4206c2f8;
  ::S2440C13_nt s4206c2f9;
  void *s4206c2f10;
  ::S2440C17_nt s4206c2f11;
  ::S2440C19_nt s4206c2f12;
  int s4206c2f13;
  void *s4206c2f14[7];
  ::S2440C26 s4206c2f15;
  int s4206c2f16:8;
  int s4206c2f17:8;
  int s4206c2f18:16;
  int s4206c2f19:16;
  int s4206c2f20:8;
  int s4206c2f21:8;
  int s4206c2f22:8;
  int s4206c2f23:32;
  int s4206c2f24:8;
  int s4206c2f25:4;
  int s4206c2f26:4;
  int s4206c2f27:4;
  int s4206c2f28:4;
  int s4206c2f29:4;
  int s4206c2f30:4;
  int s4206c2f31:4;
  int s4206c2f32:4;
  int s4206c2f33:4;
  int s4206c2f34:4;
  unsigned char s4206c2f35:1;
  unsigned char s4206c2f36:1;
  unsigned char s4206c2f37:1;
  unsigned char s4206c2f38:1;
  unsigned char s4206c2f39:1;
  unsigned char s4206c2f40:1;
  unsigned char s4206c2f41:1;
  unsigned char s4206c2f42:1;
  unsigned char s4206c2f43:1;
  unsigned char s4206c2f44:1;
  unsigned char s4206c2f45:1;
  unsigned char s4206c2f46:1;
  unsigned char s4206c2f47:1;
  unsigned char s4206c2f48:1;
  unsigned char s4206c2f49:1;
  unsigned char s4206c2f50:1;
  unsigned char s4206c2f51:1;
  unsigned char s4206c2f52:1;
  unsigned char s4206c2f53:1;
  unsigned char s4206c2f54:1;
  unsigned char s4206c2f55:1;
  unsigned char s4206c2f56:1;
  unsigned char s4206c2f57:1;
  unsigned char s4206c2f58:1;
  unsigned char s4206c2f59:1;
  unsigned char s4206c2f60:1;
  unsigned char s4206c2f61:1;
  unsigned char s4206c2f62:1;
  unsigned char s4206c2f63:1;
  unsigned char s4206c2f64:1;
  unsigned char s4206c2f65:1;
  unsigned char s4206c2f66:1;
  unsigned char s4206c2f67:1;
  unsigned char s4206c2f68:1;
  unsigned char s4206c2f69:1;
  unsigned char s4206c2f70:1;
  unsigned char s4206c2f71:1;
  unsigned char s4206c2f72:1;
  unsigned char s4206c2f73:1;
  unsigned char s4206c2f74:1;
  unsigned char s4206c2f75:1;
  int s4206c2f76[7];
  void *s4206c2f77[6];
  int s4206c2f78:8;
  int s4206c2f79:8;
  int s4206c2f80:8;
  int s4206c2f81:8;
  int s4206c2f82:8;
  int s4206c2f83:8;
  ::S4206C24_nt s4206c2f84;
  void *s4206c2f85[4];
  int s4206c2f86:8;
  int s4206c2f87:8;
  int s4206c2f88:8;
  int s4206c2f89:8;
  int s4206c2f90:8;
  int s4206c2f91:16;
  int s4206c2f92:16;
  int s4206c2f93:16;
  int s4206c2f94:4;
  int s4206c2f95:4;
  int s4206c2f96:4;
  int s4206c2f97:4;
  int s4206c2f98:4;
  int s4206c2f99:4;
  int s4206c2f100:4;
  int s4206c2f101:4;
  int s4206c2f102:4;
  int s4206c2f103:4;
  int s4206c2f104:4;
  int s4206c2f105:4;
  int s4206c2f106:8;
  int s4206c2f107:8;
  int s4206c2f108:8;
  void *s4206c2f109[7];
  ::S2440C37 s4206c2f110;
  void *s4206c2f111[2];
  int s4206c2f112:16;
  int s4206c2f113:16;
  ::S4206C24_nt s4206c2f114;
  ::S2440C29_nt s4206c2f115;
  ::S4206C36_nt s4206c2f116;
  void *s4206c2f117[2];
  int s4206c2f118:24;
  int s4206c2f119:8;
  void *s4206c2f120;
  virtual  ~S4206C2(); // _ZN7S4206C2D1Ev
  virtual void  v33(); // _ZN7S4206C23v33Ev
  virtual void  v34(); // _ZN7S4206C23v34Ev
  virtual void  v35(); // _ZN7S4206C23v35Ev
  virtual void  v36(); // _ZN7S4206C23v36Ev
  virtual void  v37(); // _ZN7S4206C23v37Ev
  virtual void  v38(); // _ZN7S4206C23v38Ev
  virtual void  v39(); // _ZN7S4206C23v39Ev
  virtual void  v40(); // _ZN7S4206C23v40Ev
  virtual void  v41(); // _ZN7S4206C23v41Ev
  virtual void  v42(); // _ZN7S4206C23v42Ev
  virtual void  v43(); // _ZN7S4206C23v43Ev
  virtual void  v44(); // _ZN7S4206C23v44Ev
  virtual void  v45(); // _ZN7S4206C23v45Ev
  virtual void  v46(); // _ZN7S4206C23v46Ev
  virtual void  v47(); // _ZN7S4206C23v47Ev
  virtual void  v48(); // _ZN7S4206C23v48Ev
  virtual void  v49(); // _ZN7S4206C23v49Ev
  virtual void  v50(); // _ZN7S4206C23v50Ev
  virtual void  v51(); // _ZN7S4206C23v51Ev
  virtual void  v52(); // _ZN7S4206C23v52Ev
  virtual void  v53(); // _ZN7S4206C23v53Ev
  virtual void  v54(); // _ZN7S4206C23v54Ev
  virtual void  v55(); // _ZN7S4206C23v55Ev
  virtual void  v56(); // _ZN7S4206C23v56Ev
  virtual void  v57(); // _ZN7S4206C23v57Ev
  virtual void  v58(); // _ZN7S4206C23v58Ev
  virtual void  v59(); // _ZN7S4206C23v59Ev
  virtual void  v60(); // _ZN7S4206C23v60Ev
  virtual void  v61(); // _ZN7S4206C23v61Ev
  virtual void  v62(); // _ZN7S4206C23v62Ev
  virtual void  v63(); // _ZN7S4206C23v63Ev
  virtual void  v64(); // _ZN7S4206C23v64Ev
  virtual void  v65(); // _ZN7S4206C23v65Ev
  virtual void  v66(); // _ZN7S4206C23v66Ev
  virtual void  v67(); // _ZN7S4206C23v67Ev
  virtual void  v68(); // _ZN7S4206C23v68Ev
  virtual void  v69(); // _ZN7S4206C23v69Ev
  virtual void  v70(); // _ZN7S4206C23v70Ev
  virtual void  v71(); // _ZN7S4206C23v71Ev
  virtual void  v72(); // _ZN7S4206C23v72Ev
  virtual void  v73(); // _ZN7S4206C23v73Ev
  virtual void  v74(); // _ZN7S4206C23v74Ev
  virtual void  v75(); // _ZN7S4206C23v75Ev
  virtual void  v76(); // _ZN7S4206C23v76Ev
  virtual void  v77(); // _ZN7S4206C23v77Ev
  virtual void  v78(); // _ZN7S4206C23v78Ev
  virtual void  v79(); // _ZN7S4206C23v79Ev
  virtual void  v80(); // _ZN7S4206C23v80Ev
  virtual void  v81(); // _ZN7S4206C23v81Ev
  virtual void  v82(); // _ZN7S4206C23v82Ev
  virtual void  v83(); // _ZN7S4206C23v83Ev
  virtual void  v84(); // _ZN7S4206C23v84Ev
  virtual void  v85(); // _ZN7S4206C23v85Ev
  virtual void  v86(); // _ZN7S4206C23v86Ev
  virtual void  v87(); // _ZN7S4206C23v87Ev
  virtual void  v88(); // _ZN7S4206C23v88Ev
  virtual void  v89(); // _ZN7S4206C23v89Ev
  virtual void  v90(); // _ZN7S4206C23v90Ev
  virtual void  v91(); // _ZN7S4206C23v91Ev
  virtual void  v92(); // _ZN7S4206C23v92Ev
  virtual void  v93(); // _ZN7S4206C23v93Ev
  virtual void  v94(); // _ZN7S4206C23v94Ev
  virtual void  v95(); // _ZN7S4206C23v95Ev
  virtual void  v96(); // _ZN7S4206C23v96Ev
  virtual void  v97(); // _ZN7S4206C23v97Ev
  virtual void  v98(); // _ZN7S4206C23v98Ev
  virtual void  v99(); // _ZN7S4206C23v99Ev
  virtual void  v100(); // _ZN7S4206C24v100Ev
  virtual void  v101(); // _ZN7S4206C24v101Ev
  virtual void  v102(); // _ZN7S4206C24v102Ev
  virtual void  v103(); // _ZN7S4206C24v103Ev
  virtual void  v104(); // _ZN7S4206C24v104Ev
  virtual void  v105(); // _ZN7S4206C24v105Ev
  virtual void  v106(); // _ZN7S4206C24v106Ev
  virtual void  v107(); // _ZN7S4206C24v107Ev
  virtual void  v108(); // _ZN7S4206C24v108Ev
  virtual void  v109(); // _ZN7S4206C24v109Ev
  virtual void  v110(); // _ZN7S4206C24v110Ev
  S4206C2(); // tgen
};
//SIG(-1 S4206C2) C1{ BC2{ vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 Fp Fi FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}} FC7{ BC8{ m Fp Fi FC9{ m} FC9}} Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 FC10{ m FC11{ m FL[2]}} FC10 FC10 FC12{ m FC11} FC13{ m FC10} FC14{ m FC10 FC10 FC10 FC10} FC14 FC10 FC10 FC10 Fp FC13 FC15{ m FC16{ m Fp Fi FC17{ m}} Fi} Fi Fp[7] FC4 Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC18{ BC19{ m Fp Fi FC17 FC5}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC20{ m Fp Fi[2] FC21{ m}} Fp[2] Fi:16 Fi:16 FC18 FC22{ m Fp Fi[2] FC6} FC23{ m Fp Fi[2] FC21} Fp[2] Fi:24 Fi:8 Fp}


 S4206C2 ::~S4206C2(){ note_dtor("S4206C2", this);}
void  S4206C2 ::v33(){vfunc_called(this, "_ZN7S4206C23v33Ev");}
void  S4206C2 ::v34(){vfunc_called(this, "_ZN7S4206C23v34Ev");}
void  S4206C2 ::v35(){vfunc_called(this, "_ZN7S4206C23v35Ev");}
void  S4206C2 ::v36(){vfunc_called(this, "_ZN7S4206C23v36Ev");}
void  S4206C2 ::v37(){vfunc_called(this, "_ZN7S4206C23v37Ev");}
void  S4206C2 ::v38(){vfunc_called(this, "_ZN7S4206C23v38Ev");}
void  S4206C2 ::v39(){vfunc_called(this, "_ZN7S4206C23v39Ev");}
void  S4206C2 ::v40(){vfunc_called(this, "_ZN7S4206C23v40Ev");}
void  S4206C2 ::v41(){vfunc_called(this, "_ZN7S4206C23v41Ev");}
void  S4206C2 ::v42(){vfunc_called(this, "_ZN7S4206C23v42Ev");}
void  S4206C2 ::v43(){vfunc_called(this, "_ZN7S4206C23v43Ev");}
void  S4206C2 ::v44(){vfunc_called(this, "_ZN7S4206C23v44Ev");}
void  S4206C2 ::v45(){vfunc_called(this, "_ZN7S4206C23v45Ev");}
void  S4206C2 ::v46(){vfunc_called(this, "_ZN7S4206C23v46Ev");}
void  S4206C2 ::v47(){vfunc_called(this, "_ZN7S4206C23v47Ev");}
void  S4206C2 ::v48(){vfunc_called(this, "_ZN7S4206C23v48Ev");}
void  S4206C2 ::v49(){vfunc_called(this, "_ZN7S4206C23v49Ev");}
void  S4206C2 ::v50(){vfunc_called(this, "_ZN7S4206C23v50Ev");}
void  S4206C2 ::v51(){vfunc_called(this, "_ZN7S4206C23v51Ev");}
void  S4206C2 ::v52(){vfunc_called(this, "_ZN7S4206C23v52Ev");}
void  S4206C2 ::v53(){vfunc_called(this, "_ZN7S4206C23v53Ev");}
void  S4206C2 ::v54(){vfunc_called(this, "_ZN7S4206C23v54Ev");}
void  S4206C2 ::v55(){vfunc_called(this, "_ZN7S4206C23v55Ev");}
void  S4206C2 ::v56(){vfunc_called(this, "_ZN7S4206C23v56Ev");}
void  S4206C2 ::v57(){vfunc_called(this, "_ZN7S4206C23v57Ev");}
void  S4206C2 ::v58(){vfunc_called(this, "_ZN7S4206C23v58Ev");}
void  S4206C2 ::v59(){vfunc_called(this, "_ZN7S4206C23v59Ev");}
void  S4206C2 ::v60(){vfunc_called(this, "_ZN7S4206C23v60Ev");}
void  S4206C2 ::v61(){vfunc_called(this, "_ZN7S4206C23v61Ev");}
void  S4206C2 ::v62(){vfunc_called(this, "_ZN7S4206C23v62Ev");}
void  S4206C2 ::v63(){vfunc_called(this, "_ZN7S4206C23v63Ev");}
void  S4206C2 ::v64(){vfunc_called(this, "_ZN7S4206C23v64Ev");}
void  S4206C2 ::v65(){vfunc_called(this, "_ZN7S4206C23v65Ev");}
void  S4206C2 ::v66(){vfunc_called(this, "_ZN7S4206C23v66Ev");}
void  S4206C2 ::v67(){vfunc_called(this, "_ZN7S4206C23v67Ev");}
void  S4206C2 ::v68(){vfunc_called(this, "_ZN7S4206C23v68Ev");}
void  S4206C2 ::v69(){vfunc_called(this, "_ZN7S4206C23v69Ev");}
void  S4206C2 ::v70(){vfunc_called(this, "_ZN7S4206C23v70Ev");}
void  S4206C2 ::v71(){vfunc_called(this, "_ZN7S4206C23v71Ev");}
void  S4206C2 ::v72(){vfunc_called(this, "_ZN7S4206C23v72Ev");}
void  S4206C2 ::v73(){vfunc_called(this, "_ZN7S4206C23v73Ev");}
void  S4206C2 ::v74(){vfunc_called(this, "_ZN7S4206C23v74Ev");}
void  S4206C2 ::v75(){vfunc_called(this, "_ZN7S4206C23v75Ev");}
void  S4206C2 ::v76(){vfunc_called(this, "_ZN7S4206C23v76Ev");}
void  S4206C2 ::v77(){vfunc_called(this, "_ZN7S4206C23v77Ev");}
void  S4206C2 ::v78(){vfunc_called(this, "_ZN7S4206C23v78Ev");}
void  S4206C2 ::v79(){vfunc_called(this, "_ZN7S4206C23v79Ev");}
void  S4206C2 ::v80(){vfunc_called(this, "_ZN7S4206C23v80Ev");}
void  S4206C2 ::v81(){vfunc_called(this, "_ZN7S4206C23v81Ev");}
void  S4206C2 ::v82(){vfunc_called(this, "_ZN7S4206C23v82Ev");}
void  S4206C2 ::v83(){vfunc_called(this, "_ZN7S4206C23v83Ev");}
void  S4206C2 ::v84(){vfunc_called(this, "_ZN7S4206C23v84Ev");}
void  S4206C2 ::v85(){vfunc_called(this, "_ZN7S4206C23v85Ev");}
void  S4206C2 ::v86(){vfunc_called(this, "_ZN7S4206C23v86Ev");}
void  S4206C2 ::v87(){vfunc_called(this, "_ZN7S4206C23v87Ev");}
void  S4206C2 ::v88(){vfunc_called(this, "_ZN7S4206C23v88Ev");}
void  S4206C2 ::v89(){vfunc_called(this, "_ZN7S4206C23v89Ev");}
void  S4206C2 ::v90(){vfunc_called(this, "_ZN7S4206C23v90Ev");}
void  S4206C2 ::v91(){vfunc_called(this, "_ZN7S4206C23v91Ev");}
void  S4206C2 ::v92(){vfunc_called(this, "_ZN7S4206C23v92Ev");}
void  S4206C2 ::v93(){vfunc_called(this, "_ZN7S4206C23v93Ev");}
void  S4206C2 ::v94(){vfunc_called(this, "_ZN7S4206C23v94Ev");}
void  S4206C2 ::v95(){vfunc_called(this, "_ZN7S4206C23v95Ev");}
void  S4206C2 ::v96(){vfunc_called(this, "_ZN7S4206C23v96Ev");}
void  S4206C2 ::v97(){vfunc_called(this, "_ZN7S4206C23v97Ev");}
void  S4206C2 ::v98(){vfunc_called(this, "_ZN7S4206C23v98Ev");}
void  S4206C2 ::v99(){vfunc_called(this, "_ZN7S4206C23v99Ev");}
void  S4206C2 ::v100(){vfunc_called(this, "_ZN7S4206C24v100Ev");}
void  S4206C2 ::v101(){vfunc_called(this, "_ZN7S4206C24v101Ev");}
void  S4206C2 ::v102(){vfunc_called(this, "_ZN7S4206C24v102Ev");}
void  S4206C2 ::v103(){vfunc_called(this, "_ZN7S4206C24v103Ev");}
void  S4206C2 ::v104(){vfunc_called(this, "_ZN7S4206C24v104Ev");}
void  S4206C2 ::v105(){vfunc_called(this, "_ZN7S4206C24v105Ev");}
void  S4206C2 ::v106(){vfunc_called(this, "_ZN7S4206C24v106Ev");}
void  S4206C2 ::v107(){vfunc_called(this, "_ZN7S4206C24v107Ev");}
void  S4206C2 ::v108(){vfunc_called(this, "_ZN7S4206C24v108Ev");}
void  S4206C2 ::v109(){vfunc_called(this, "_ZN7S4206C24v109Ev");}
void  S4206C2 ::v110(){vfunc_called(this, "_ZN7S4206C24v110Ev");}
S4206C2 ::S4206C2(){ note_ctor("S4206C2", this);} // tgen

static void Test_S4206C2()
{
  extern Class_Descriptor cd_S4206C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(105,159)];
    init_test(&cd_S4206C2, buf);
    S4206C2 *dp, &lv = *(dp=new (buf) S4206C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,632), "sizeof(S4206C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4206C2)");
    check_base_class_offset(lv, (S4206C3*), 0, "S4206C2");
    check_field_offset(lv, s4206c2f0, ABISELECT(64,40), "S4206C2.s4206c2f0");
    check_field_offset(lv, s4206c2f1, ABISELECT(80,56), "S4206C2.s4206c2f1");
    check_field_offset(lv, s4206c2f2, ABISELECT(96,72), "S4206C2.s4206c2f2");
    check_field_offset(lv, s4206c2f3, ABISELECT(112,88), "S4206C2.s4206c2f3");
    check_field_offset(lv, s4206c2f4, ABISELECT(128,104), "S4206C2.s4206c2f4");
    check_field_offset(lv, s4206c2f5, ABISELECT(144,120), "S4206C2.s4206c2f5");
    check_field_offset(lv, s4206c2f6, ABISELECT(208,184), "S4206C2.s4206c2f6");
    check_field_offset(lv, s4206c2f7, ABISELECT(272,248), "S4206C2.s4206c2f7");
    check_field_offset(lv, s4206c2f8, ABISELECT(288,264), "S4206C2.s4206c2f8");
    check_field_offset(lv, s4206c2f9, ABISELECT(304,280), "S4206C2.s4206c2f9");
    check_field_offset(lv, s4206c2f10, ABISELECT(320,296), "S4206C2.s4206c2f10");
    check_field_offset(lv, s4206c2f11, ABISELECT(328,300), "S4206C2.s4206c2f11");
    check_field_offset(lv, s4206c2f12, ABISELECT(344,316), "S4206C2.s4206c2f12");
    check_field_offset(lv, s4206c2f13, ABISELECT(368,332), "S4206C2.s4206c2f13");
    check_field_offset(lv, s4206c2f14, ABISELECT(376,336), "S4206C2.s4206c2f14");
    check_field_offset(lv, s4206c2f15, ABISELECT(432,364), "S4206C2.s4206c2f15");
    set_bf_and_test(lv, s4206c2f16, ABISELECT(448,376), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f16, ABISELECT(448,376), 0, 8, hide_sll(1LL<<7), "S4206C2");
    set_bf_and_test(lv, s4206c2f17, ABISELECT(449,377), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f17, ABISELECT(449,377), 0, 8, hide_sll(1LL<<7), "S4206C2");
    set_bf_and_test(lv, s4206c2f18, ABISELECT(450,378), 0, 16, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f18, ABISELECT(450,378), 0, 16, hide_sll(1LL<<15), "S4206C2");
    set_bf_and_test(lv, s4206c2f19, ABISELECT(452,380), 0, 16, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f19, ABISELECT(452,380), 0, 16, hide_sll(1LL<<15), "S4206C2");
    set_bf_and_test(lv, s4206c2f20, ABISELECT(454,382), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f20, ABISELECT(454,382), 0, 8, hide_sll(1LL<<7), "S4206C2");
    set_bf_and_test(lv, s4206c2f21, ABISELECT(455,383), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f21, ABISELECT(455,383), 0, 8, hide_sll(1LL<<7), "S4206C2");
    set_bf_and_test(lv, s4206c2f22, ABISELECT(456,384), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f22, ABISELECT(456,384), 0, 8, hide_sll(1LL<<7), "S4206C2");
    set_bf_and_test(lv, s4206c2f23, ABISELECT(460,388), 0, 32, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f23, ABISELECT(460,388), 0, 32, hide_sll(1LL<<31), "S4206C2");
    set_bf_and_test(lv, s4206c2f24, ABISELECT(464,392), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f24, ABISELECT(464,392), 0, 8, hide_sll(1LL<<7), "S4206C2");
    set_bf_and_test(lv, s4206c2f25, ABISELECT(465,393), 0, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f25, ABISELECT(465,393), 0, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f26, ABISELECT(465,393), 4, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f26, ABISELECT(465,393), 4, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f27, ABISELECT(466,394), 0, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f27, ABISELECT(466,394), 0, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f28, ABISELECT(466,394), 4, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f28, ABISELECT(466,394), 4, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f29, ABISELECT(467,395), 0, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f29, ABISELECT(467,395), 0, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f30, ABISELECT(467,395), 4, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f30, ABISELECT(467,395), 4, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f31, ABISELECT(468,396), 0, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f31, ABISELECT(468,396), 0, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f32, ABISELECT(468,396), 4, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f32, ABISELECT(468,396), 4, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f33, ABISELECT(469,397), 0, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f33, ABISELECT(469,397), 0, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f34, ABISELECT(469,397), 4, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f34, ABISELECT(469,397), 4, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f35, ABISELECT(470,398), 0, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f36, ABISELECT(470,398), 1, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f37, ABISELECT(470,398), 2, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f38, ABISELECT(470,398), 3, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f39, ABISELECT(470,398), 4, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f40, ABISELECT(470,398), 5, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f41, ABISELECT(470,398), 6, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f42, ABISELECT(470,398), 7, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f43, ABISELECT(471,399), 0, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f44, ABISELECT(471,399), 1, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f45, ABISELECT(471,399), 2, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f46, ABISELECT(471,399), 3, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f47, ABISELECT(471,399), 4, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f48, ABISELECT(471,399), 5, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f49, ABISELECT(471,399), 6, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f50, ABISELECT(471,399), 7, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f51, ABISELECT(472,400), 0, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f52, ABISELECT(472,400), 1, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f53, ABISELECT(472,400), 2, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f54, ABISELECT(472,400), 3, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f55, ABISELECT(472,400), 4, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f56, ABISELECT(472,400), 5, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f57, ABISELECT(472,400), 6, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f58, ABISELECT(472,400), 7, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f59, ABISELECT(473,401), 0, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f60, ABISELECT(473,401), 1, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f61, ABISELECT(473,401), 2, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f62, ABISELECT(473,401), 3, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f63, ABISELECT(473,401), 4, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f64, ABISELECT(473,401), 5, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f65, ABISELECT(473,401), 6, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f66, ABISELECT(473,401), 7, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f67, ABISELECT(474,402), 0, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f68, ABISELECT(474,402), 1, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f69, ABISELECT(474,402), 2, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f70, ABISELECT(474,402), 3, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f71, ABISELECT(474,402), 4, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f72, ABISELECT(474,402), 5, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f73, ABISELECT(474,402), 6, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f74, ABISELECT(474,402), 7, 1, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f75, ABISELECT(475,403), 0, 1, 1, "S4206C2");
    check_field_offset(lv, s4206c2f76, ABISELECT(476,404), "S4206C2.s4206c2f76");
    check_field_offset(lv, s4206c2f77, ABISELECT(504,432), "S4206C2.s4206c2f77");
    set_bf_and_test(lv, s4206c2f78, ABISELECT(552,456), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f78, ABISELECT(552,456), 0, 8, hide_sll(1LL<<7), "S4206C2");
    set_bf_and_test(lv, s4206c2f79, ABISELECT(553,457), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f79, ABISELECT(553,457), 0, 8, hide_sll(1LL<<7), "S4206C2");
    set_bf_and_test(lv, s4206c2f80, ABISELECT(554,458), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f80, ABISELECT(554,458), 0, 8, hide_sll(1LL<<7), "S4206C2");
    set_bf_and_test(lv, s4206c2f81, ABISELECT(555,459), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f81, ABISELECT(555,459), 0, 8, hide_sll(1LL<<7), "S4206C2");
    set_bf_and_test(lv, s4206c2f82, ABISELECT(556,460), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f82, ABISELECT(556,460), 0, 8, hide_sll(1LL<<7), "S4206C2");
    set_bf_and_test(lv, s4206c2f83, ABISELECT(557,461), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f83, ABISELECT(557,461), 0, 8, hide_sll(1LL<<7), "S4206C2");
    check_field_offset(lv, s4206c2f84, ABISELECT(560,464), "S4206C2.s4206c2f84");
    check_field_offset(lv, s4206c2f85, ABISELECT(576,476), "S4206C2.s4206c2f85");
    set_bf_and_test(lv, s4206c2f86, ABISELECT(608,492), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f86, ABISELECT(608,492), 0, 8, hide_sll(1LL<<7), "S4206C2");
    set_bf_and_test(lv, s4206c2f87, ABISELECT(609,493), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f87, ABISELECT(609,493), 0, 8, hide_sll(1LL<<7), "S4206C2");
    set_bf_and_test(lv, s4206c2f88, ABISELECT(610,494), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f88, ABISELECT(610,494), 0, 8, hide_sll(1LL<<7), "S4206C2");
    set_bf_and_test(lv, s4206c2f89, ABISELECT(611,495), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f89, ABISELECT(611,495), 0, 8, hide_sll(1LL<<7), "S4206C2");
    set_bf_and_test(lv, s4206c2f90, ABISELECT(612,496), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f90, ABISELECT(612,496), 0, 8, hide_sll(1LL<<7), "S4206C2");
    set_bf_and_test(lv, s4206c2f91, ABISELECT(613,497), 0, 16, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f91, ABISELECT(613,497), 0, 16, hide_sll(1LL<<15), "S4206C2");
    set_bf_and_test(lv, s4206c2f92, ABISELECT(616,500), 0, 16, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f92, ABISELECT(616,500), 0, 16, hide_sll(1LL<<15), "S4206C2");
    set_bf_and_test(lv, s4206c2f93, ABISELECT(618,502), 0, 16, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f93, ABISELECT(618,502), 0, 16, hide_sll(1LL<<15), "S4206C2");
    set_bf_and_test(lv, s4206c2f94, ABISELECT(620,504), 0, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f94, ABISELECT(620,504), 0, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f95, ABISELECT(620,504), 4, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f95, ABISELECT(620,504), 4, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f96, ABISELECT(621,505), 0, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f96, ABISELECT(621,505), 0, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f97, ABISELECT(621,505), 4, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f97, ABISELECT(621,505), 4, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f98, ABISELECT(622,506), 0, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f98, ABISELECT(622,506), 0, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f99, ABISELECT(622,506), 4, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f99, ABISELECT(622,506), 4, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f100, ABISELECT(623,507), 0, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f100, ABISELECT(623,507), 0, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f101, ABISELECT(623,507), 4, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f101, ABISELECT(623,507), 4, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f102, ABISELECT(624,508), 0, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f102, ABISELECT(624,508), 0, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f103, ABISELECT(624,508), 4, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f103, ABISELECT(624,508), 4, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f104, ABISELECT(625,509), 0, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f104, ABISELECT(625,509), 0, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f105, ABISELECT(625,509), 4, 4, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f105, ABISELECT(625,509), 4, 4, hide_sll(1LL<<3), "S4206C2");
    set_bf_and_test(lv, s4206c2f106, ABISELECT(626,510), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f106, ABISELECT(626,510), 0, 8, hide_sll(1LL<<7), "S4206C2");
    set_bf_and_test(lv, s4206c2f107, ABISELECT(627,511), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f107, ABISELECT(627,511), 0, 8, hide_sll(1LL<<7), "S4206C2");
    set_bf_and_test(lv, s4206c2f108, ABISELECT(628,512), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f108, ABISELECT(628,512), 0, 8, hide_sll(1LL<<7), "S4206C2");
    check_field_offset(lv, s4206c2f109, ABISELECT(632,516), "S4206C2.s4206c2f109");
    check_field_offset(lv, s4206c2f110, ABISELECT(688,544), "S4206C2.s4206c2f110");
    check_field_offset(lv, s4206c2f111, ABISELECT(712,560), "S4206C2.s4206c2f111");
    set_bf_and_test(lv, s4206c2f112, ABISELECT(728,568), 0, 16, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f112, ABISELECT(728,568), 0, 16, hide_sll(1LL<<15), "S4206C2");
    set_bf_and_test(lv, s4206c2f113, ABISELECT(730,570), 0, 16, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f113, ABISELECT(730,570), 0, 16, hide_sll(1LL<<15), "S4206C2");
    check_field_offset(lv, s4206c2f114, ABISELECT(736,572), "S4206C2.s4206c2f114");
    check_field_offset(lv, s4206c2f115, ABISELECT(752,584), "S4206C2.s4206c2f115");
    check_field_offset(lv, s4206c2f116, ABISELECT(776,600), "S4206C2.s4206c2f116");
    check_field_offset(lv, s4206c2f117, ABISELECT(800,616), "S4206C2.s4206c2f117");
    set_bf_and_test(lv, s4206c2f118, ABISELECT(816,624), 0, 24, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f118, ABISELECT(816,624), 0, 24, hide_sll(1LL<<23), "S4206C2");
    set_bf_and_test(lv, s4206c2f119, ABISELECT(819,627), 0, 8, 1, "S4206C2");
    set_bf_and_test(lv, s4206c2f119, ABISELECT(819,627), 0, 8, hide_sll(1LL<<7), "S4206C2");
    check_field_offset(lv, s4206c2f120, ABISELECT(824,628), "S4206C2.s4206c2f120");
    test_class_info(&lv, &cd_S4206C2);
    dp->~S4206C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4206C2(Test_S4206C2, "S4206C2", ABISELECT(832,632));

#else // __cplusplus

extern void _ZN7S4206C2C1Ev();
extern void _ZN7S4206C2D1Ev();
Name_Map name_map_S4206C2[] = {
  NSPAIR(_ZN7S4206C2C1Ev),
  NSPAIR(_ZN7S4206C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4206C3;
extern VTBL_ENTRY _ZTI7S4206C3[];
extern  VTBL_ENTRY _ZTV7S4206C3[];
static Base_Class bases_S4206C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4206C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4206C2[];
extern void _ZN7S4206C2D1Ev();
extern void _ZN7S4206C2D0Ev();
extern void _ZN7S4206C33v10Ev();
extern void _ZN7S4206C33v11Ev();
extern void _ZN7S4206C33v12Ev();
extern void _ZN7S4206C33v13Ev();
extern void _ZN7S4206C33v14Ev();
extern void _ZN7S4206C33v15Ev();
extern void _ZN7S4206C33v16Ev();
extern void _ZN7S4206C33v17Ev();
extern void _ZN7S4206C33v18Ev();
extern void _ZN7S4206C33v19Ev();
extern void _ZN7S4206C33v20Ev();
extern void _ZN7S4206C33v21Ev();
extern void _ZN7S4206C33v22Ev();
extern void _ZN7S4206C33v23Ev();
extern void _ZN7S4206C33v24Ev();
extern void _ZN7S4206C33v25Ev();
extern void _ZN7S4206C33v26Ev();
extern void _ZN7S4206C33v27Ev();
extern void _ZN7S4206C33v28Ev();
extern void _ZN7S4206C33v29Ev();
extern void _ZN7S4206C33v30Ev();
extern void _ZN7S4206C33v31Ev();
extern void _ZN7S4206C33v32Ev();
extern void _ZN7S4206C23v33Ev();
extern void _ZN7S4206C23v34Ev();
extern void _ZN7S4206C23v35Ev();
extern void _ZN7S4206C23v36Ev();
extern void _ZN7S4206C23v37Ev();
extern void _ZN7S4206C23v38Ev();
extern void _ZN7S4206C23v39Ev();
extern void _ZN7S4206C23v40Ev();
extern void _ZN7S4206C23v41Ev();
extern void _ZN7S4206C23v42Ev();
extern void _ZN7S4206C23v43Ev();
extern void _ZN7S4206C23v44Ev();
extern void _ZN7S4206C23v45Ev();
extern void _ZN7S4206C23v46Ev();
extern void _ZN7S4206C23v47Ev();
extern void _ZN7S4206C23v48Ev();
extern void _ZN7S4206C23v49Ev();
extern void _ZN7S4206C23v50Ev();
extern void _ZN7S4206C23v51Ev();
extern void _ZN7S4206C23v52Ev();
extern void _ZN7S4206C23v53Ev();
extern void _ZN7S4206C23v54Ev();
extern void _ZN7S4206C23v55Ev();
extern void _ZN7S4206C23v56Ev();
extern void _ZN7S4206C23v57Ev();
extern void _ZN7S4206C23v58Ev();
extern void _ZN7S4206C23v59Ev();
extern void _ZN7S4206C23v60Ev();
extern void _ZN7S4206C23v61Ev();
extern void _ZN7S4206C23v62Ev();
extern void _ZN7S4206C23v63Ev();
extern void _ZN7S4206C23v64Ev();
extern void _ZN7S4206C23v65Ev();
extern void _ZN7S4206C23v66Ev();
extern void _ZN7S4206C23v67Ev();
extern void _ZN7S4206C23v68Ev();
extern void _ZN7S4206C23v69Ev();
extern void _ZN7S4206C23v70Ev();
extern void _ZN7S4206C23v71Ev();
extern void _ZN7S4206C23v72Ev();
extern void _ZN7S4206C23v73Ev();
extern void _ZN7S4206C23v74Ev();
extern void _ZN7S4206C23v75Ev();
extern void _ZN7S4206C23v76Ev();
extern void _ZN7S4206C23v77Ev();
extern void _ZN7S4206C23v78Ev();
extern void _ZN7S4206C23v79Ev();
extern void _ZN7S4206C23v80Ev();
extern void _ZN7S4206C23v81Ev();
extern void _ZN7S4206C23v82Ev();
extern void _ZN7S4206C23v83Ev();
extern void _ZN7S4206C23v84Ev();
extern void _ZN7S4206C23v85Ev();
extern void _ZN7S4206C23v86Ev();
extern void _ZN7S4206C23v87Ev();
extern void _ZN7S4206C23v88Ev();
extern void _ZN7S4206C23v89Ev();
extern void _ZN7S4206C23v90Ev();
extern void _ZN7S4206C23v91Ev();
extern void _ZN7S4206C23v92Ev();
extern void _ZN7S4206C23v93Ev();
extern void _ZN7S4206C23v94Ev();
extern void _ZN7S4206C23v95Ev();
extern void _ZN7S4206C23v96Ev();
extern void _ZN7S4206C23v97Ev();
extern void _ZN7S4206C23v98Ev();
extern void _ZN7S4206C23v99Ev();
extern void _ZN7S4206C24v100Ev();
extern void _ZN7S4206C24v101Ev();
extern void _ZN7S4206C24v102Ev();
extern void _ZN7S4206C24v103Ev();
extern void _ZN7S4206C24v104Ev();
extern void _ZN7S4206C24v105Ev();
extern void _ZN7S4206C24v106Ev();
extern void _ZN7S4206C24v107Ev();
extern void _ZN7S4206C24v108Ev();
extern void _ZN7S4206C24v109Ev();
extern void _ZN7S4206C24v110Ev();
static  VTBL_ENTRY vtc_S4206C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4206C2[0]),
  (VTBL_ENTRY)&_ZN7S4206C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4206C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v33Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v34Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v35Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v36Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v37Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v38Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v39Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v59Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v60Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v61Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v62Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v63Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v64Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v65Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v66Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v67Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v68Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v69Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v70Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v71Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v72Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v73Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v74Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v75Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v76Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v77Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v78Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v79Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v80Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v81Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v82Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v83Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v84Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v85Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v86Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v87Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v88Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v89Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v90Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v91Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v92Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v93Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v94Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v95Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v96Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v97Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v98Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v99Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v100Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v101Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v102Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v103Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v104Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v105Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v106Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v107Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v108Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v109Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v110Ev,
};
extern VTBL_ENTRY _ZTI7S4206C2[];
extern  VTBL_ENTRY _ZTV7S4206C2[];
Class_Descriptor cd_S4206C2 = {  "S4206C2", // class name
  bases_S4206C2, 1,
  &(vtc_S4206C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(832,632), // object size
  NSPAIRA(_ZTI7S4206C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4206C2),105, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4206C40  {
  ::S4206C36_nt s4206c40f0;
  __tsi64 s4206c40f1;
  void  mf4206c40(); // _ZN8S4206C409mf4206c40Ev
};
//SIG(-1 S4206C40) C1{ m FC2{ m Fp Fi[2] FC3{ m}} FL}


void  S4206C40 ::mf4206c40(){}

static void Test_S4206C40()
{
  {
    init_simple_test("S4206C40");
    S4206C40 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S4206C40)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4206C40)");
    check_field_offset(lv, s4206c40f0, 0, "S4206C40.s4206c40f0");
    check_field_offset(lv, s4206c40f1, ABISELECT(24,16), "S4206C40.s4206c40f1");
  }
}
static Arrange_To_Call_Me vS4206C40(Test_S4206C40, "S4206C40", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4206C43  {
  ::S2440C18_nt s4206c43f0;
  int s4206c43f1[2];
};
//SIG(1 S4206C43) C1{ FC2{ m FC3{ m FC4{ m FL[2]}} FC3 FC3 FC3} Fi[2]}



static void Test_S4206C43()
{
  {
    init_simple_test("S4206C43");
    S4206C43 lv;
    check2(sizeof(lv), 72, "sizeof(S4206C43)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4206C43)");
    check_field_offset(lv, s4206c43f0, 0, "S4206C43.s4206c43f0");
    check_field_offset(lv, s4206c43f1, 64, "S4206C43.s4206c43f1");
  }
}
static Arrange_To_Call_Me vS4206C43(Test_S4206C43, "S4206C43", 72);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4206C1  : S4206C2 {
  int s4206c1f0[4];
  char s4206c1f1[2];
  ::S2440C20_nt s4206c1f2;
  int s4206c1f3[6];
  ::S4206C40 s4206c1f4;
  char s4206c1f5;
  int s4206c1f6[3];
  ::S4206C43 s4206c1f7[10];
  virtual  ~S4206C1(); // _ZN7S4206C1D1Ev
  virtual void  v1(); // _ZN7S4206C12v1Ev
  virtual void  v2(); // _ZN7S4206C12v2Ev
  virtual void  v3(); // _ZN7S4206C12v3Ev
  virtual void  v4(); // _ZN7S4206C12v4Ev
  virtual void  v5(); // _ZN7S4206C12v5Ev
  virtual void  v6(); // _ZN7S4206C12v6Ev
  virtual void  v7(); // _ZN7S4206C12v7Ev
  virtual void  v8(); // _ZN7S4206C12v8Ev
  virtual void  v9(); // _ZN7S4206C12v9Ev
  S4206C1(); // tgen
};
//SIG(1 S4206C1) C1{ BC2{ BC3{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fp Fi FC4{ BC5{ m Fp Fi FC6{ m} FC7{ m}}} FC8{ BC9{ m Fp Fi FC10{ m} FC10}} Fi} vd v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 FC11{ m FC12{ m FL[2]}} FC11 FC11 FC13{ m FC12} FC14{ m FC11} FC15{ m FC11 FC11 FC11 FC11} FC15 FC11 FC11 FC11 Fp FC14 FC16{ m FC17{ m Fp Fi FC18{ m}} Fi} Fi Fp[7] FC5 Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC19{ BC20{ m Fp Fi FC18 FC6}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC21{ m Fp Fi[2] FC22{ m}} Fp[2] Fi:16 Fi:16 FC19 FC23{ m Fp Fi[2] FC7} FC24{ m Fp Fi[2] FC22} Fp[2] Fi:24 Fi:8 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fi[4] Fc[2] FC17 Fi[6] FC25{ m FC24 FL} Fc Fi[3] FC26{ FC15 Fi[2]}[10]}


 S4206C1 ::~S4206C1(){ note_dtor("S4206C1", this);}
void  S4206C1 ::v1(){vfunc_called(this, "_ZN7S4206C12v1Ev");}
void  S4206C1 ::v2(){vfunc_called(this, "_ZN7S4206C12v2Ev");}
void  S4206C1 ::v3(){vfunc_called(this, "_ZN7S4206C12v3Ev");}
void  S4206C1 ::v4(){vfunc_called(this, "_ZN7S4206C12v4Ev");}
void  S4206C1 ::v5(){vfunc_called(this, "_ZN7S4206C12v5Ev");}
void  S4206C1 ::v6(){vfunc_called(this, "_ZN7S4206C12v6Ev");}
void  S4206C1 ::v7(){vfunc_called(this, "_ZN7S4206C12v7Ev");}
void  S4206C1 ::v8(){vfunc_called(this, "_ZN7S4206C12v8Ev");}
void  S4206C1 ::v9(){vfunc_called(this, "_ZN7S4206C12v9Ev");}
S4206C1 ::S4206C1(){ note_ctor("S4206C1", this);} // tgen

static void Test_S4206C1()
{
  extern Class_Descriptor cd_S4206C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(209,363)];
    init_test(&cd_S4206C1, buf);
    S4206C1 *dp, &lv = *(dp=new (buf) S4206C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1664,1448), "sizeof(S4206C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4206C1)");
    check_base_class_offset(lv, (S4206C3*)(S4206C2*), 0, "S4206C1");
    check_base_class_offset(lv, (S4206C2*), 0, "S4206C1");
    check_field_offset(lv, s4206c1f0, ABISELECT(832,632), "S4206C1.s4206c1f0");
    check_field_offset(lv, s4206c1f1, ABISELECT(848,648), "S4206C1.s4206c1f1");
    check_field_offset(lv, s4206c1f2, ABISELECT(856,652), "S4206C1.s4206c1f2");
    check_field_offset(lv, s4206c1f3, ABISELECT(872,664), "S4206C1.s4206c1f3");
    check_field_offset(lv, s4206c1f4, ABISELECT(896,688), "S4206C1.s4206c1f4");
    check_field_offset(lv, s4206c1f5, ABISELECT(928,712), "S4206C1.s4206c1f5");
    check_field_offset(lv, s4206c1f6, ABISELECT(932,716), "S4206C1.s4206c1f6");
    check_field_offset(lv, s4206c1f7, ABISELECT(944,728), "S4206C1.s4206c1f7");
    test_class_info(&lv, &cd_S4206C1);
    dp->~S4206C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4206C1(Test_S4206C1, "S4206C1", ABISELECT(1664,1448));

#else // __cplusplus

extern void _ZN7S4206C1C1Ev();
extern void _ZN7S4206C1D1Ev();
Name_Map name_map_S4206C1[] = {
  NSPAIR(_ZN7S4206C1C1Ev),
  NSPAIR(_ZN7S4206C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4206C3;
extern VTBL_ENTRY _ZTI7S4206C3[];
extern  VTBL_ENTRY _ZTV7S4206C3[];
extern Class_Descriptor cd_S4206C2;
extern VTBL_ENTRY _ZTI7S4206C2[];
extern  VTBL_ENTRY _ZTV7S4206C2[];
static Base_Class bases_S4206C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4206C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4206C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4206C1[];
extern void _ZN7S4206C1D1Ev();
extern void _ZN7S4206C1D0Ev();
extern void _ZN7S4206C33v10Ev();
extern void _ZN7S4206C33v11Ev();
extern void _ZN7S4206C33v12Ev();
extern void _ZN7S4206C33v13Ev();
extern void _ZN7S4206C33v14Ev();
extern void _ZN7S4206C33v15Ev();
extern void _ZN7S4206C33v16Ev();
extern void _ZN7S4206C33v17Ev();
extern void _ZN7S4206C33v18Ev();
extern void _ZN7S4206C33v19Ev();
extern void _ZN7S4206C33v20Ev();
extern void _ZN7S4206C33v21Ev();
extern void _ZN7S4206C33v22Ev();
extern void _ZN7S4206C33v23Ev();
extern void _ZN7S4206C33v24Ev();
extern void _ZN7S4206C33v25Ev();
extern void _ZN7S4206C33v26Ev();
extern void _ZN7S4206C33v27Ev();
extern void _ZN7S4206C33v28Ev();
extern void _ZN7S4206C33v29Ev();
extern void _ZN7S4206C33v30Ev();
extern void _ZN7S4206C33v31Ev();
extern void _ZN7S4206C33v32Ev();
extern void _ZN7S4206C23v33Ev();
extern void _ZN7S4206C23v34Ev();
extern void _ZN7S4206C23v35Ev();
extern void _ZN7S4206C23v36Ev();
extern void _ZN7S4206C23v37Ev();
extern void _ZN7S4206C23v38Ev();
extern void _ZN7S4206C23v39Ev();
extern void _ZN7S4206C23v40Ev();
extern void _ZN7S4206C23v41Ev();
extern void _ZN7S4206C23v42Ev();
extern void _ZN7S4206C23v43Ev();
extern void _ZN7S4206C23v44Ev();
extern void _ZN7S4206C23v45Ev();
extern void _ZN7S4206C23v46Ev();
extern void _ZN7S4206C23v47Ev();
extern void _ZN7S4206C23v48Ev();
extern void _ZN7S4206C23v49Ev();
extern void _ZN7S4206C23v50Ev();
extern void _ZN7S4206C23v51Ev();
extern void _ZN7S4206C23v52Ev();
extern void _ZN7S4206C23v53Ev();
extern void _ZN7S4206C23v54Ev();
extern void _ZN7S4206C23v55Ev();
extern void _ZN7S4206C23v56Ev();
extern void _ZN7S4206C23v57Ev();
extern void _ZN7S4206C23v58Ev();
extern void _ZN7S4206C23v59Ev();
extern void _ZN7S4206C23v60Ev();
extern void _ZN7S4206C23v61Ev();
extern void _ZN7S4206C23v62Ev();
extern void _ZN7S4206C23v63Ev();
extern void _ZN7S4206C23v64Ev();
extern void _ZN7S4206C23v65Ev();
extern void _ZN7S4206C23v66Ev();
extern void _ZN7S4206C23v67Ev();
extern void _ZN7S4206C23v68Ev();
extern void _ZN7S4206C23v69Ev();
extern void _ZN7S4206C23v70Ev();
extern void _ZN7S4206C23v71Ev();
extern void _ZN7S4206C23v72Ev();
extern void _ZN7S4206C23v73Ev();
extern void _ZN7S4206C23v74Ev();
extern void _ZN7S4206C23v75Ev();
extern void _ZN7S4206C23v76Ev();
extern void _ZN7S4206C23v77Ev();
extern void _ZN7S4206C23v78Ev();
extern void _ZN7S4206C23v79Ev();
extern void _ZN7S4206C23v80Ev();
extern void _ZN7S4206C23v81Ev();
extern void _ZN7S4206C23v82Ev();
extern void _ZN7S4206C23v83Ev();
extern void _ZN7S4206C23v84Ev();
extern void _ZN7S4206C23v85Ev();
extern void _ZN7S4206C23v86Ev();
extern void _ZN7S4206C23v87Ev();
extern void _ZN7S4206C23v88Ev();
extern void _ZN7S4206C23v89Ev();
extern void _ZN7S4206C23v90Ev();
extern void _ZN7S4206C23v91Ev();
extern void _ZN7S4206C23v92Ev();
extern void _ZN7S4206C23v93Ev();
extern void _ZN7S4206C23v94Ev();
extern void _ZN7S4206C23v95Ev();
extern void _ZN7S4206C23v96Ev();
extern void _ZN7S4206C23v97Ev();
extern void _ZN7S4206C23v98Ev();
extern void _ZN7S4206C23v99Ev();
extern void _ZN7S4206C24v100Ev();
extern void _ZN7S4206C24v101Ev();
extern void _ZN7S4206C24v102Ev();
extern void _ZN7S4206C24v103Ev();
extern void _ZN7S4206C24v104Ev();
extern void _ZN7S4206C24v105Ev();
extern void _ZN7S4206C24v106Ev();
extern void _ZN7S4206C24v107Ev();
extern void _ZN7S4206C24v108Ev();
extern void _ZN7S4206C24v109Ev();
extern void _ZN7S4206C24v110Ev();
extern void _ZN7S4206C12v1Ev();
extern void _ZN7S4206C12v2Ev();
extern void _ZN7S4206C12v3Ev();
extern void _ZN7S4206C12v4Ev();
extern void _ZN7S4206C12v5Ev();
extern void _ZN7S4206C12v6Ev();
extern void _ZN7S4206C12v7Ev();
extern void _ZN7S4206C12v8Ev();
extern void _ZN7S4206C12v9Ev();
static  VTBL_ENTRY vtc_S4206C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4206C1[0]),
  (VTBL_ENTRY)&_ZN7S4206C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4206C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4206C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v33Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v34Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v35Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v36Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v37Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v38Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v39Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v59Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v60Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v61Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v62Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v63Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v64Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v65Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v66Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v67Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v68Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v69Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v70Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v71Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v72Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v73Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v74Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v75Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v76Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v77Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v78Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v79Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v80Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v81Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v82Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v83Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v84Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v85Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v86Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v87Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v88Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v89Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v90Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v91Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v92Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v93Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v94Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v95Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v96Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v97Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v98Ev,
  (VTBL_ENTRY)&_ZN7S4206C23v99Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v100Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v101Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v102Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v103Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v104Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v105Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v106Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v107Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v108Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v109Ev,
  (VTBL_ENTRY)&_ZN7S4206C24v110Ev,
  (VTBL_ENTRY)&_ZN7S4206C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4206C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4206C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4206C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4206C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4206C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4206C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4206C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4206C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S4206C1[];
extern  VTBL_ENTRY _ZTV7S4206C1[];
Class_Descriptor cd_S4206C1 = {  "S4206C1", // class name
  bases_S4206C1, 2,
  &(vtc_S4206C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1664,1448), // object size
  NSPAIRA(_ZTI7S4206C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4206C1),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S2489C4  {
  long double s2489c4f0;
  __tsi64 s2489c4f1;
  int s2489c4f2;
  long s2489c4f3;
  char s2489c4f4;
  int s2489c4f5[7];
  long double s2489c4f6;
  void *s2489c4f7;
  void *s2489c4f8[10];
  __tsi64 s2489c4f9;
  void *s2489c4f10;
  __tsi64 s2489c4f11;
  int s2489c4f12;
  void  mf2489c4(); // _ZN7S2489C48mf2489c4Ev
};
//SIG(1 S2489C4) U1{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi}

#endif // __cplusplus
#ifdef __cplusplus

struct  S2489C3  {
  char s2489c3f0;
  int s2489c3f1;
  __tsi64 s2489c3f2;
  ::S2489C4 s2489c3f3;
  short s2489c3f4;
  __tsi64 s2489c3f5:12;
  __tsi64 s2489c3f6;
  int s2489c3f7;
  void  mf2489c3(); // _ZN7S2489C38mf2489c3Ev
};
//SIG(-1 S2489C3) C1{ m Fc Fi FL FU2{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi}


void  S2489C3 ::mf2489c3(){}

static void Test_S2489C3()
{
  {
    init_simple_test("S2489C3");
    static S2489C3 lv;
    check2(sizeof(lv), ABISELECT(128,72), "sizeof(S2489C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C3)");
    check_field_offset(lv, s2489c3f0, 0, "S2489C3.s2489c3f0");
    check_field_offset(lv, s2489c3f1, 4, "S2489C3.s2489c3f1");
    check_field_offset(lv, s2489c3f2, 8, "S2489C3.s2489c3f2");
    check_field_offset(lv, s2489c3f3, 16, "S2489C3.s2489c3f3");
    check_field_offset(lv, s2489c3f4, ABISELECT(96,56), "S2489C3.s2489c3f4");
    set_bf_and_test(lv, s2489c3f5, ABISELECT(98,58), 0, 12, 1, "S2489C3");
    set_bf_and_test(lv, s2489c3f5, ABISELECT(98,58), 0, 12, hide_sll(1LL<<11), "S2489C3");
    check_field_offset(lv, s2489c3f6, ABISELECT(104,60), "S2489C3.s2489c3f6");
    check_field_offset(lv, s2489c3f7, ABISELECT(112,68), "S2489C3.s2489c3f7");
  }
}
static Arrange_To_Call_Me vS2489C3(Test_S2489C3, "S2489C3", ABISELECT(128,72));

#else // __cplusplus

extern VTBL_ENTRY _ZTI7S2489C3[];
VTBL_ENTRY *P__ZTI7S2489C3 = _ZTI7S2489C3; 
Class_Descriptor cd_S2489C3 = {  "S2489C3", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(128,72), // object size
  NSPAIRA(_ZTI7S2489C3),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S2489C7  {
  __tsi64 s2489c7f0;
  int s2489c7f1;
  __tsi64 s2489c7f2;
  void *s2489c7f3[7];
  __tsi64 s2489c7f4:12;
  void  mf2489c7(); // _ZN7S2489C78mf2489c7Ev
};
//SIG(1 S2489C7) U1{ m FL Fi FL Fp[7] FL:12}

#endif // __cplusplus
#ifdef __cplusplus

struct  S2489C6  : virtual S2489C3 {
  void *s2489c6f0;
  void *s2489c6f1;
  int s2489c6f2;
  int s2489c6f3;
  ::S2489C7 s2489c6f4;
  __tsi64  :0;
  long double s2489c6f6;
  ::S2489C7 s2489c6f7;
  void *s2489c6f8;
  __tsi64 s2489c6f9:3;
  ::S2489C3 s2489c6f10;
  __tsi64 s2489c6f11;
  ::S2489C7 s2489c6f12;
  virtual void  v1(); // _ZN7S2489C62v1Ev
  virtual void  v2(); // _ZN7S2489C62v2Ev
  ~S2489C6(); // tgen
  S2489C6(); // tgen
};
//SIG(-1 S2489C6) C1{ VBC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} v1 v2 Fp Fp Fi Fi FU4{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU4 Fp FL:3 FC2 FL FU4}


void  S2489C6 ::v1(){vfunc_called(this, "_ZN7S2489C62v1Ev");}
void  S2489C6 ::v2(){vfunc_called(this, "_ZN7S2489C62v2Ev");}
S2489C6 ::~S2489C6(){ note_dtor("S2489C6", this);} // tgen
S2489C6 ::S2489C6(){ note_ctor("S2489C6", this);} // tgen

static void Test_S2489C6()
{
  extern Class_Descriptor cd_S2489C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,70)];
    init_test(&cd_S2489C6, buf);
    S2489C6 *dp, &lv = *(dp=new (buf) S2489C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,276), "sizeof(S2489C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C6)");
    check_base_class_offset(lv, (S2489C3*), ABISELECT(384,204), "S2489C6");
    check_field_offset(lv, s2489c6f0, ABISELECT(8,4), "S2489C6.s2489c6f0");
    check_field_offset(lv, s2489c6f1, ABISELECT(16,8), "S2489C6.s2489c6f1");
    check_field_offset(lv, s2489c6f2, ABISELECT(24,12), "S2489C6.s2489c6f2");
    check_field_offset(lv, s2489c6f3, ABISELECT(28,16), "S2489C6.s2489c6f3");
    check_field_offset(lv, s2489c6f4, ABISELECT(32,20), "S2489C6.s2489c6f4");
    check_field_offset(lv, s2489c6f6, ABISELECT(96,48), "S2489C6.s2489c6f6");
    check_field_offset(lv, s2489c6f7, ABISELECT(112,60), "S2489C6.s2489c6f7");
    check_field_offset(lv, s2489c6f8, ABISELECT(168,88), "S2489C6.s2489c6f8");
    set_bf_and_test(lv, s2489c6f9, ABISELECT(176,92), 0, 3, 1, "S2489C6");
    set_bf_and_test(lv, s2489c6f9, ABISELECT(176,92), 0, 3, hide_sll(1LL<<2), "S2489C6");
    check_field_offset(lv, s2489c6f10, ABISELECT(192,96), "S2489C6.s2489c6f10");
    check_field_offset(lv, s2489c6f11, ABISELECT(320,168), "S2489C6.s2489c6f11");
    check_field_offset(lv, s2489c6f12, ABISELECT(328,176), "S2489C6.s2489c6f12");
    test_class_info(&lv, &cd_S2489C6);
    dp->~S2489C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2489C6(Test_S2489C6, "S2489C6", ABISELECT(512,276));

#else // __cplusplus

extern void _ZN7S2489C6C1Ev();
extern void _ZN7S2489C6D1Ev();
Name_Map name_map_S2489C6[] = {
  NSPAIR(_ZN7S2489C6C1Ev),
  NSPAIR(_ZN7S2489C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
static Base_Class bases_S2489C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(384,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2489C6[];
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY vtc_S2489C6[] = {
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S2489C6[];
static  VTT_ENTRY vtt_S2489C6[] = {
  {&(_ZTV7S2489C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
Class_Descriptor cd_S2489C6 = {  "S2489C6", // class name
  bases_S2489C6, 1,
  &(vtc_S2489C6[0]), // expected_vtbl_contents
  &(vtt_S2489C6[0]), // expected_vtt_contents
  ABISELECT(512,276), // object size
  NSPAIRA(_ZTI7S2489C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S2489C6),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2489C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2489C5  : S2489C3 , S2489C6 {
  void *s2489c5f0;
  long double s2489c5f1;
  ::S2489C3 s2489c5f2[7];
  long double s2489c5f3;
  ::S2489C4 s2489c5f4;
  short s2489c5f5;
  __tsi64 s2489c5f6;
  __tsi64 s2489c5f7;
  virtual void  v3(); // _ZN7S2489C52v3Ev
  ~S2489C5(); // tgen
  S2489C5(); // tgen
};
//SIG(-1 S2489C5) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 FL FU5} v1 Fp FD FC2[7] FD FU3 Fs FL FL}


void  S2489C5 ::v3(){vfunc_called(this, "_ZN7S2489C52v3Ev");}
S2489C5 ::~S2489C5(){ note_dtor("S2489C5", this);} // tgen
S2489C5 ::S2489C5(){ note_ctor("S2489C5", this);} // tgen

static void Test_S2489C5()
{
  extern Class_Descriptor cd_S2489C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(107,236)];
    init_test(&cd_S2489C5, buf);
    S2489C5 *dp, &lv = *(dp=new (buf) S2489C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1696,940), "sizeof(S2489C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C5)");
    /*is_ambiguous_... S2489C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(384,204), "S2489C5");
    check_base_class_offset(lv, (S2489C3*)(S2489C6*), ABISELECT(1568,868), "S2489C5");
    check_base_class_offset(lv, (S2489C6*), 0, "S2489C5");
    check_field_offset(lv, s2489c5f0, ABISELECT(512,276), "S2489C5.s2489c5f0");
    check_field_offset(lv, s2489c5f1, ABISELECT(528,280), "S2489C5.s2489c5f1");
    check_field_offset(lv, s2489c5f2, ABISELECT(544,292), "S2489C5.s2489c5f2");
    check_field_offset(lv, s2489c5f3, ABISELECT(1440,796), "S2489C5.s2489c5f3");
    check_field_offset(lv, s2489c5f4, ABISELECT(1456,808), "S2489C5.s2489c5f4");
    check_field_offset(lv, s2489c5f5, ABISELECT(1536,848), "S2489C5.s2489c5f5");
    check_field_offset(lv, s2489c5f6, ABISELECT(1544,852), "S2489C5.s2489c5f6");
    check_field_offset(lv, s2489c5f7, ABISELECT(1552,860), "S2489C5.s2489c5f7");
    test_class_info(&lv, &cd_S2489C5);
    dp->~S2489C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2489C5(Test_S2489C5, "S2489C5", ABISELECT(1696,940));

#else // __cplusplus

extern void _ZN7S2489C5C1Ev();
extern void _ZN7S2489C5D1Ev();
Name_Map name_map_S2489C5[] = {
  NSPAIR(_ZN7S2489C5C1Ev),
  NSPAIR(_ZN7S2489C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
static Base_Class bases_S2489C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(384,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(1568,868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2489C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2489C5[];
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY vtc_S2489C5[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C5[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern VTBL_ENTRY _ZTV7S2489C5[];
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C5[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
static  VTT_ENTRY vtt_S2489C5[] = {
  {&(_ZTV7S2489C5[3]),  3,6},
  {&(_tg__ZTV7S2489C6__7S2489C5[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S2489C5[];
extern  VTBL_ENTRY _ZTV7S2489C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C5[];
Class_Descriptor cd_S2489C5 = {  "S2489C5", // class name
  bases_S2489C5, 3,
  &(vtc_S2489C5[0]), // expected_vtbl_contents
  &(vtt_S2489C5[0]), // expected_vtt_contents
  ABISELECT(1696,940), // object size
  NSPAIRA(_ZTI7S2489C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2489C5),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2489C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2489C8  : virtual S2489C3 , virtual S2489C6 {
  __tsi64 s2489c8f0;
  __tsi64 s2489c8f1;
  __tsi64 s2489c8f2;
  __tsi64 s2489c8f3;
  int s2489c8f4;
  ::S2489C7 s2489c8f5;
  char s2489c8f6[10];
  int s2489c8f7;
  virtual  ~S2489C8(); // _ZN7S2489C8D2Ev
  virtual void  v4(); // _ZN7S2489C82v4Ev
  S2489C8(); // tgen
};
//SIG(-1 S2489C8) C1{ VBC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 FL FU5} vd v1 FL FL FL FL Fi FU5 Fc[10] Fi}


 S2489C8 ::~S2489C8(){ note_dtor("S2489C8", this);}
void  S2489C8 ::v4(){vfunc_called(this, "_ZN7S2489C82v4Ev");}
S2489C8 ::S2489C8(){ note_ctor("S2489C8", this);} // tgen

static void Test_S2489C8()
{
  extern Class_Descriptor cd_S2489C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,91)];
    init_test(&cd_S2489C8, buf);
    S2489C8 *dp, &lv = *(dp=new (buf) S2489C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,360), "sizeof(S2489C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C8)");
    check_base_class_offset(lv, (S2489C3*), ABISELECT(128,84), "S2489C8");
    check_base_class_offset(lv, (S2489C3*)(S2489C6*), ABISELECT(128,84), "S2489C8");
    check_base_class_offset(lv, (S2489C6*), ABISELECT(256,156), "S2489C8");
    check_field_offset(lv, s2489c8f0, ABISELECT(8,4), "S2489C8.s2489c8f0");
    check_field_offset(lv, s2489c8f1, ABISELECT(16,12), "S2489C8.s2489c8f1");
    check_field_offset(lv, s2489c8f2, ABISELECT(24,20), "S2489C8.s2489c8f2");
    check_field_offset(lv, s2489c8f3, ABISELECT(32,28), "S2489C8.s2489c8f3");
    check_field_offset(lv, s2489c8f4, ABISELECT(40,36), "S2489C8.s2489c8f4");
    check_field_offset(lv, s2489c8f5, ABISELECT(48,40), "S2489C8.s2489c8f5");
    check_field_offset(lv, s2489c8f6, ABISELECT(104,68), "S2489C8.s2489c8f6");
    check_field_offset(lv, s2489c8f7, ABISELECT(116,80), "S2489C8.s2489c8f7");
    test_class_info(&lv, &cd_S2489C8);
    dp->~S2489C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2489C8(Test_S2489C8, "S2489C8", ABISELECT(640,360));

#else // __cplusplus

extern void _ZN7S2489C8C1Ev();
extern void _ZN7S2489C8D2Ev();
Name_Map name_map_S2489C8[] = {
  NSPAIR(_ZN7S2489C8C1Ev),
  NSPAIR(_ZN7S2489C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
static Base_Class bases_S2489C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(128,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C6,    ABISELECT(256,156), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2489C8[];
extern void _ZN7S2489C8D1Ev();
extern void _ZN7S2489C8D0Ev();
extern void _ZN7S2489C82v4Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY vtc_S2489C8[] = {
  ABISELECT(256,156),
  ABISELECT(128,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-256,-156),
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S2489C8[];
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C8[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
static  VTT_ENTRY vtt_S2489C8[] = {
  {&(_ZTV7S2489C8[4]),  4,14},
  {&(_ZTV7S2489C8[12]),  12,14},
  {&(_tg__ZTV7S2489C6__7S2489C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S2489C8[];
extern  VTBL_ENTRY _ZTV7S2489C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C8[];
Class_Descriptor cd_S2489C8 = {  "S2489C8", // class name
  bases_S2489C8, 2,
  &(vtc_S2489C8[0]), // expected_vtbl_contents
  &(vtt_S2489C8[0]), // expected_vtt_contents
  ABISELECT(640,360), // object size
  NSPAIRA(_ZTI7S2489C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2489C8),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2489C8),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S2489C11  {
  void *s2489c11f0;
  int s2489c11f1;
  void *s2489c11f2;
  char s2489c11f3;
  char s2489c11f4;
  __tsi64 s2489c11f5[5];
  void *s2489c11f6;
  void *s2489c11f7;
  void *s2489c11f8;
  void  mf2489c11(); // _ZN8S2489C119mf2489c11Ev
};
//SIG(1 S2489C11) U1{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S2489C10  : S2489C3 , virtual S2489C6 , virtual S2489C8 , virtual S2489C5 {
  char s2489c10f0;
  int s2489c10f1[7];
  long s2489c10f2[5];
  __tsi64 s2489c10f3;
  __tsi64 s2489c10f4;
  __tsi64 s2489c10f5;
  ::S2489C11 s2489c10f6;
  virtual  ~S2489C10(); // _ZN8S2489C10D2Ev
  virtual void  v5(); // _ZN8S2489C102v5Ev
  S2489C10(); // tgen
};
//SIG(-1 S2489C10) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 FL FU5} VBC6{ VBC2 VBC4 vd v4 FL FL FL FL Fi FU5 Fc[10] Fi} VBC7{ BC2 BC4 v5 Fp FD FC2[7] FD FU3 Fs FL FL} vd v1 Fc Fi[7] Fl[5] FL FL FL FU8{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}}


 S2489C10 ::~S2489C10(){ note_dtor("S2489C10", this);}
void  S2489C10 ::v5(){vfunc_called(this, "_ZN8S2489C102v5Ev");}
S2489C10 ::S2489C10(){ note_ctor("S2489C10", this);} // tgen

static void Test_S2489C10()
{
  extern Class_Descriptor cd_S2489C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(157,356)];
    init_test(&cd_S2489C10, buf);
    S2489C10 *dp, &lv = *(dp=new (buf) S2489C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2496,1420), "sizeof(S2489C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C10)");
    /*is_ambiguous_... S2489C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(16,4), "S2489C10");
    /*is_ambiguous_... S2489C10::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*), ABISELECT(672,396), "S2489C10");
    check_base_class_offset(lv, (S2489C3*)(S2489C8*), ABISELECT(672,396), "S2489C10");
    check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C5*), ABISELECT(672,396), "S2489C10");
    /*is_ambiguous_... S2489C10::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*), ABISELECT(288,192), "S2489C10");
    check_base_class_offset(lv, (S2489C6*)(S2489C8*), ABISELECT(288,192), "S2489C10");
    check_base_class_offset(lv, (S2489C8*), ABISELECT(800,468), "S2489C10");
    /*is_ambiguous_... S2489C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C5*), ABISELECT(1312,756), "S2489C10");
    check_base_class_offset(lv, (S2489C6*)(S2489C5*), ABISELECT(928,552), "S2489C10");
    check_base_class_offset(lv, (S2489C5*), ABISELECT(928,552), "S2489C10");
    check_field_offset(lv, s2489c10f0, ABISELECT(144,76), "S2489C10.s2489c10f0");
    check_field_offset(lv, s2489c10f1, ABISELECT(148,80), "S2489C10.s2489c10f1");
    check_field_offset(lv, s2489c10f2, ABISELECT(176,108), "S2489C10.s2489c10f2");
    check_field_offset(lv, s2489c10f3, ABISELECT(216,128), "S2489C10.s2489c10f3");
    check_field_offset(lv, s2489c10f4, ABISELECT(224,136), "S2489C10.s2489c10f4");
    check_field_offset(lv, s2489c10f5, ABISELECT(232,144), "S2489C10.s2489c10f5");
    check_field_offset(lv, s2489c10f6, ABISELECT(240,152), "S2489C10.s2489c10f6");
    test_class_info(&lv, &cd_S2489C10);
    dp->~S2489C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2489C10(Test_S2489C10, "S2489C10", ABISELECT(2496,1420));

#else // __cplusplus

extern void _ZN8S2489C10C1Ev();
extern void _ZN8S2489C10D2Ev();
Name_Map name_map_S2489C10[] = {
  NSPAIR(_ZN8S2489C10C1Ev),
  NSPAIR(_ZN8S2489C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C8;
extern VTBL_ENTRY _ZTI7S2489C8[];
extern  VTBL_ENTRY _ZTV7S2489C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C5;
extern VTBL_ENTRY _ZTI7S2489C5[];
extern  VTBL_ENTRY _ZTV7S2489C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C5[];
static Base_Class bases_S2489C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(672,396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2489C6,    ABISELECT(288,192), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C8,    ABISELECT(800,468), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(1312,756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(928,552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2489C5,    ABISELECT(928,552), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2489C10[];
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZThn800_N8S2489C10D1Ev,_ZThn468_N8S2489C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void ABISELECT(_ZThn800_N8S2489C10D0Ev,_ZThn468_N8S2489C10D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY vtc_S2489C10[] = {
  ABISELECT(928,552),
  ABISELECT(800,468),
  ABISELECT(672,396),
  ABISELECT(288,192),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  0,
  ABISELECT(-800,-468),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-800,-468),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-928,-552),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern VTBL_ENTRY _ZTV8S2489C10[];
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C10[] = {
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C8D1Ev();
extern void _ZN7S2489C8D0Ev();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C10[] = {
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C8__8S2489C10[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(512,276),
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C10[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C5[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C67S2489C5__A1__8S2489C10[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
static  VTT_ENTRY vtt_S2489C10[] = {
  {&(_ZTV8S2489C10[6]),  6,34},
  {&(_ZTV8S2489C10[14]),  14,34},
  {&(_ZTV8S2489C10[22]),  22,34},
  {&(_ZTV8S2489C10[31]),  31,34},
  {&(_tg__ZTV7S2489C6__8S2489C10[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C10[4]),  4,7},
  {&(_tg__ZTV7S2489C6__7S2489C8__8S2489C10[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C10[3]),  3,6},
  {&(_tg__ZTV7S2489C67S2489C5__A1__8S2489C10[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S2489C10D0Ev,_ZThn468_N8S2489C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S2489C10D1Ev,_ZThn468_N8S2489C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2489C10 = {  "S2489C10", // class name
  bases_S2489C10, 7,
  &(vtc_S2489C10[0]), // expected_vtbl_contents
  &(vtt_S2489C10[0]), // expected_vtt_contents
  ABISELECT(2496,1420), // object size
  NSPAIRA(_ZTI8S2489C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S2489C10),34, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2489C10),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2489C12_nt  {
};
//SIG(-1 S2489C12_nt) C1{}



//skip512 S2489C12_nt

#else // __cplusplus

Class_Descriptor cd_S2489C12_nt = {  "S2489C12_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2489C9  : S2489C10 {
  void *s2489c9f0;
  void *s2489c9f1;
  void *s2489c9f2;
  int s2489c9f3;
  ::S2489C12_nt s2489c9f4;
  __tsi64 s2489c9f5;
  __tsi64 s2489c9f6;
  virtual  ~S2489C9(); // _ZN7S2489C9D2Ev
  virtual void  v6(); // _ZN7S2489C92v6Ev
  virtual void  v7(); // _ZN7S2489C92v7Ev
  S2489C9(); // tgen
};
//SIG(-1 S2489C9) C1{ BC2{ BC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC5{ VBC3 v3 v4 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 FL FU6} VBC7{ VBC3 VBC5 vd v5 FL FL FL FL Fi FU6 Fc[10] Fi} VBC8{ BC3 BC5 v6 Fp FD FC3[7] FD FU4 Fs FL FL} vd v7 Fc Fi[7] Fl[5] FL FL FL FU9{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} vd v1 v2 Fp Fp Fp Fi FC10{} FL FL}


 S2489C9 ::~S2489C9(){ note_dtor("S2489C9", this);}
void  S2489C9 ::v6(){vfunc_called(this, "_ZN7S2489C92v6Ev");}
void  S2489C9 ::v7(){vfunc_called(this, "_ZN7S2489C92v7Ev");}
S2489C9 ::S2489C9(){ note_ctor("S2489C9", this);} // tgen

static void Test_S2489C9()
{
  extern Class_Descriptor cd_S2489C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(160,365)];
    init_test(&cd_S2489C9, buf);
    S2489C9 *dp, &lv = *(dp=new (buf) S2489C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2544,1456), "sizeof(S2489C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C9)");
    /*is_ambiguous_... S2489C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*), ABISELECT(16,4), "S2489C9");
    /*is_ambiguous_... S2489C9::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*), ABISELECT(720,432), "S2489C9");
    check_base_class_offset(lv, (S2489C3*)(S2489C8*), ABISELECT(720,432), "S2489C9");
    check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C5*), ABISELECT(720,432), "S2489C9");
    /*is_ambiguous_... S2489C10::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*), ABISELECT(336,228), "S2489C9");
    check_base_class_offset(lv, (S2489C6*)(S2489C8*), ABISELECT(336,228), "S2489C9");
    check_base_class_offset(lv, (S2489C8*)(S2489C10*), ABISELECT(848,504), "S2489C9");
    /*is_ambiguous_... S2489C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C5*), ABISELECT(1360,792), "S2489C9");
    check_base_class_offset(lv, (S2489C6*)(S2489C5*), ABISELECT(976,588), "S2489C9");
    check_base_class_offset(lv, (S2489C5*)(S2489C10*), ABISELECT(976,588), "S2489C9");
    check_base_class_offset(lv, (S2489C10*), 0, "S2489C9");
    check_field_offset(lv, s2489c9f0, ABISELECT(280,192), "S2489C9.s2489c9f0");
    check_field_offset(lv, s2489c9f1, ABISELECT(288,196), "S2489C9.s2489c9f1");
    check_field_offset(lv, s2489c9f2, ABISELECT(296,200), "S2489C9.s2489c9f2");
    check_field_offset(lv, s2489c9f3, ABISELECT(304,204), "S2489C9.s2489c9f3");
    check_field_offset(lv, s2489c9f4, ABISELECT(308,208), "S2489C9.s2489c9f4");
    check_field_offset(lv, s2489c9f5, ABISELECT(312,212), "S2489C9.s2489c9f5");
    check_field_offset(lv, s2489c9f6, ABISELECT(320,220), "S2489C9.s2489c9f6");
    test_class_info(&lv, &cd_S2489C9);
    dp->~S2489C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2489C9(Test_S2489C9, "S2489C9", ABISELECT(2544,1456));

#else // __cplusplus

extern void _ZN7S2489C9C1Ev();
extern void _ZN7S2489C9D2Ev();
Name_Map name_map_S2489C9[] = {
  NSPAIR(_ZN7S2489C9C1Ev),
  NSPAIR(_ZN7S2489C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C8;
extern VTBL_ENTRY _ZTI7S2489C8[];
extern  VTBL_ENTRY _ZTV7S2489C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C5;
extern VTBL_ENTRY _ZTI7S2489C5[];
extern  VTBL_ENTRY _ZTV7S2489C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C5[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
static Base_Class bases_S2489C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(720,432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2489C6,    ABISELECT(336,228), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2489C8,    ABISELECT(848,504), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(1360,792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(976,588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2489C5,    ABISELECT(976,588), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2489C9[];
extern void _ZN7S2489C9D1Ev();
extern void _ZN7S2489C9D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev)();
extern void ABISELECT(_ZThn848_N7S2489C9D1Ev,_ZThn504_N7S2489C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev)();
extern void ABISELECT(_ZThn848_N7S2489C9D0Ev,_ZThn504_N7S2489C9D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY vtc_S2489C9[] = {
  ABISELECT(976,588),
  ABISELECT(848,504),
  ABISELECT(720,432),
  ABISELECT(336,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-336,-228),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  0,
  ABISELECT(-848,-504),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-848,-504),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-976,-588),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern VTBL_ENTRY _ZTV7S2489C9[];
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C10__7S2489C9[] = {
  ABISELECT(976,588),
  ABISELECT(848,504),
  ABISELECT(720,432),
  ABISELECT(336,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C10__7S2489C9[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-336,-228),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZThn848_N8S2489C10D1Ev,_ZThn504_N8S2489C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void ABISELECT(_ZThn848_N8S2489C10D0Ev,_ZThn504_N8S2489C10D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C10__7S2489C9[] = {
  0,
  ABISELECT(-848,-504),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-848,-504),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C10__7S2489C9[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-976,-588),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C9[] = {
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C8D1Ev();
extern void _ZN7S2489C8D0Ev();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__7S2489C9[] = {
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C8__7S2489C9[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(512,276),
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__7S2489C9[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C5[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C67S2489C5__A1__7S2489C9[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
static  VTT_ENTRY vtt_S2489C9[] = {
  {&(_ZTV7S2489C9[6]),  6,36},
  {&(_tg__ZTV8S2489C10__7S2489C9[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C10__7S2489C9[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C10__7S2489C9[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C10__7S2489C9[6]),  6,9},
  {&(_ZTV7S2489C9[16]),  16,36},
  {&(_ZTV7S2489C9[24]),  24,36},
  {&(_ZTV7S2489C9[33]),  33,36},
  {&(_tg__ZTV7S2489C6__7S2489C9[3]),  3,5},
  {&(_tg__ZTV7S2489C8__7S2489C9[4]),  4,7},
  {&(_tg__ZTV7S2489C6__7S2489C8__7S2489C9[5]),  5,7},
  {&(_tg__ZTV7S2489C5__7S2489C9[3]),  3,6},
  {&(_tg__ZTV7S2489C67S2489C5__A1__7S2489C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S2489C9[];
extern  VTBL_ENTRY _ZTV7S2489C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C9[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S2489C10D0Ev,_ZThn504_N8S2489C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S2489C10D1Ev,_ZThn504_N8S2489C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S2489C9D0Ev,_ZThn504_N7S2489C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S2489C9D1Ev,_ZThn504_N7S2489C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2489C9 = {  "S2489C9", // class name
  bases_S2489C9, 8,
  &(vtc_S2489C9[0]), // expected_vtbl_contents
  &(vtt_S2489C9[0]), // expected_vtt_contents
  ABISELECT(2544,1456), // object size
  NSPAIRA(_ZTI7S2489C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2489C9),36, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2489C9),13, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2489C2  : S2489C3 , virtual S2489C5 , virtual S2489C8 , S2489C9 {
  long double s2489c2f0;
  virtual  ~S2489C2(); // _ZN7S2489C2D2Ev
  S2489C2(); // tgen
};
//SIG(-1 S2489C2) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ BC2 BC5{ VBC2 v1 v2 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC2 FL FU6} v3 Fp FD FC2[7] FD FU3 Fs FL FL} VBC7{ VBC2 VBC5 vd v4 FL FL FL FL Fi FU6 Fc[10] Fi} BC8{ BC9{ BC2 VBC5 VBC7 VBC4 vd v5 Fc Fi[7] Fl[5] FL FL FL FU10{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} vd v6 v7 Fp Fp Fp Fi FC11{} FL FL} vd FD}


 S2489C2 ::~S2489C2(){ note_dtor("S2489C2", this);}
S2489C2 ::S2489C2(){ note_ctor("S2489C2", this);} // tgen

static void Test_S2489C2()
{
  extern Class_Descriptor cd_S2489C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(169,386)];
    init_test(&cd_S2489C2, buf);
    S2489C2 *dp, &lv = *(dp=new (buf) S2489C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2688,1540), "sizeof(S2489C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C2)");
    /*is_ambiguous_... S2489C2::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(336,228), "S2489C2");
    /*is_ambiguous_... S2489C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C5*), ABISELECT(864,516), "S2489C2");
    check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C5*), ABISELECT(2048,1180), "S2489C2");
    check_base_class_offset(lv, (S2489C3*)(S2489C8*), ABISELECT(2048,1180), "S2489C2");
    /*is_ambiguous_... S2489C2::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*), ABISELECT(2048,1180), "S2489C2");
    check_base_class_offset(lv, (S2489C6*)(S2489C5*), ABISELECT(480,312), "S2489C2");
    check_base_class_offset(lv, (S2489C5*), ABISELECT(480,312), "S2489C2");
    check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C9*), ABISELECT(480,312), "S2489C2");
    check_base_class_offset(lv, (S2489C6*)(S2489C8*), ABISELECT(2304,1336), "S2489C2");
    /*is_ambiguous_... S2489C10::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C9*), ABISELECT(2304,1336), "S2489C2");
    check_base_class_offset(lv, (S2489C8*), ABISELECT(2176,1252), "S2489C2");
    check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C9*), ABISELECT(2176,1252), "S2489C2");
    /*is_ambiguous_... S2489C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C9*), ABISELECT(16,4), "S2489C2");
    check_base_class_offset(lv, (S2489C10*)(S2489C9*), 0, "S2489C2");
    check_base_class_offset(lv, (S2489C9*), 0, "S2489C2");
    check_field_offset(lv, s2489c2f0, ABISELECT(464,300), "S2489C2.s2489c2f0");
    test_class_info(&lv, &cd_S2489C2);
    dp->~S2489C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2489C2(Test_S2489C2, "S2489C2", ABISELECT(2688,1540));

#else // __cplusplus

extern void _ZN7S2489C2C1Ev();
extern void _ZN7S2489C2D2Ev();
Name_Map name_map_S2489C2[] = {
  NSPAIR(_ZN7S2489C2C1Ev),
  NSPAIR(_ZN7S2489C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C5;
extern VTBL_ENTRY _ZTI7S2489C5[];
extern  VTBL_ENTRY _ZTV7S2489C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C5[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C8;
extern VTBL_ENTRY _ZTI7S2489C8[];
extern  VTBL_ENTRY _ZTV7S2489C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C9;
extern VTBL_ENTRY _ZTI7S2489C9[];
extern  VTBL_ENTRY _ZTV7S2489C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C9[];
static Base_Class bases_S2489C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(336,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(864,516), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(2048,1180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2489C6,    ABISELECT(480,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2489C5,    ABISELECT(480,312), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C6,    ABISELECT(2304,1336), //bcp->offset
    29, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2489C8,    ABISELECT(2176,1252), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2489C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2489C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2489C2[];
extern void _ZN7S2489C2D1Ev();
extern void _ZN7S2489C2D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S2489C2D1Ev,_ZTv0_n20_N7S2489C2D1Ev)();
extern void ABISELECT(_ZThn2176_N7S2489C2D1Ev,_ZThn1252_N7S2489C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2489C2D0Ev,_ZTv0_n20_N7S2489C2D0Ev)();
extern void ABISELECT(_ZThn2176_N7S2489C2D0Ev,_ZThn1252_N7S2489C2D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY vtc_S2489C2[] = {
  ABISELECT(480,312),
  ABISELECT(2176,1252),
  ABISELECT(2048,1180),
  ABISELECT(2304,1336),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C2[0]),
  (VTBL_ENTRY)&_ZN7S2489C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C2D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI7S2489C2[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
  0,
  ABISELECT(-2176,-1252),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(-2176,-1252),
  (VTBL_ENTRY)&(_ZTI7S2489C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C2D1Ev,_ZTv0_n20_N7S2489C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C2D0Ev,_ZTv0_n20_N7S2489C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-2304,-1336),
  (VTBL_ENTRY)&(_ZTI7S2489C2[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S2489C2[];
extern void _ZN7S2489C9D1Ev();
extern void _ZN7S2489C9D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C9__7S2489C2[] = {
  ABISELECT(480,312),
  ABISELECT(2176,1252),
  ABISELECT(2048,1180),
  ABISELECT(2304,1336),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C107S2489C9__7S2489C2[] = {
  ABISELECT(480,312),
  ABISELECT(2176,1252),
  ABISELECT(2048,1180),
  ABISELECT(2304,1336),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C107S2489C9__7S2489C2[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-2304,-1336),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZThn2176_N8S2489C10D1Ev,_ZThn1252_N8S2489C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void ABISELECT(_ZThn2176_N8S2489C10D0Ev,_ZThn1252_N8S2489C10D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C107S2489C9__7S2489C2[] = {
  0,
  ABISELECT(-2176,-1252),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(-2176,-1252),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C107S2489C9__7S2489C2[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C9__7S2489C2[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-2304,-1336),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev)();
extern void ABISELECT(_ZThn2176_N7S2489C9D1Ev,_ZThn1252_N7S2489C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev)();
extern void ABISELECT(_ZThn2176_N7S2489C9D0Ev,_ZThn1252_N7S2489C9D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__7S2489C9__7S2489C2[] = {
  0,
  ABISELECT(-2176,-1252),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(-2176,-1252),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__7S2489C9__7S2489C2[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__7S2489C2[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C5[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C67S2489C5__7S2489C2[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C8D1Ev();
extern void _ZN7S2489C8D0Ev();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__7S2489C2[] = {
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C8__7S2489C2[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A1__7S2489C2[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
static  VTT_ENTRY vtt_S2489C2[] = {
  {&(_ZTV7S2489C2[6]),  6,36},
  {&(_tg__ZTV7S2489C9__7S2489C2[6]),  6,11},
  {&(_tg__ZTV8S2489C107S2489C9__7S2489C2[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C107S2489C9__7S2489C2[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C107S2489C9__7S2489C2[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C107S2489C9__7S2489C2[6]),  6,9},
  {&(_tg__ZTV7S2489C6__7S2489C9__7S2489C2[5]),  5,7},
  {&(_tg__ZTV7S2489C8__7S2489C9__7S2489C2[6]),  6,9},
  {&(_tg__ZTV7S2489C5__7S2489C9__7S2489C2[6]),  6,9},
  {&(_ZTV7S2489C2[17]),  17,36},
  {&(_ZTV7S2489C2[26]),  26,36},
  {&(_ZTV7S2489C2[34]),  34,36},
  {&(_tg__ZTV7S2489C5__7S2489C2[3]),  3,6},
  {&(_tg__ZTV7S2489C67S2489C5__7S2489C2[3]),  3,5},
  {&(_tg__ZTV7S2489C8__7S2489C2[4]),  4,7},
  {&(_tg__ZTV7S2489C6__7S2489C8__7S2489C2[5]),  5,7},
  {&(_tg__ZTV7S2489C6__A1__7S2489C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S2489C2[];
extern  VTBL_ENTRY _ZTV7S2489C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C2[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N7S2489C9D0Ev,_ZThn1252_N7S2489C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N7S2489C9D1Ev,_ZThn1252_N7S2489C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N8S2489C10D0Ev,_ZThn1252_N8S2489C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N8S2489C10D1Ev,_ZThn1252_N8S2489C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2489C2D0Ev,_ZTv0_n20_N7S2489C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N7S2489C2D0Ev,_ZThn1252_N7S2489C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2489C2D1Ev,_ZTv0_n20_N7S2489C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N7S2489C2D1Ev,_ZThn1252_N7S2489C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2489C2 = {  "S2489C2", // class name
  bases_S2489C2, 10,
  &(vtc_S2489C2[0]), // expected_vtbl_contents
  &(vtt_S2489C2[0]), // expected_vtt_contents
  ABISELECT(2688,1540), // object size
  NSPAIRA(_ZTI7S2489C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2489C2),36, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2489C2),17, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2489C14  : virtual S2489C5 , virtual S2489C8 {
  int s2489c14f0;
  void *s2489c14f1;
  int s2489c14f2;
  ::S2489C7 s2489c14f3;
  ~S2489C14(); // tgen
  S2489C14(); // tgen
};
//SIG(-1 S2489C14) C1{ VBC2{ BC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC5{ VBC3 v1 v2 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 FL FU6} v3 Fp FD FC3[7] FD FU4 Fs FL FL} VBC7{ VBC3 VBC5 vd v4 FL FL FL FL Fi FU6 Fc[10] Fi} Fi Fp Fi FU6}


S2489C14 ::~S2489C14(){ note_dtor("S2489C14", this);} // tgen
S2489C14 ::S2489C14(){ note_ctor("S2489C14", this);} // tgen

static void Test_S2489C14()
{
  extern Class_Descriptor cd_S2489C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(145,319)];
    init_test(&cd_S2489C14, buf);
    S2489C14 *dp, &lv = *(dp=new (buf) S2489C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2304,1272), "sizeof(S2489C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C14)");
    /*is_ambiguous_... S2489C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C5*), ABISELECT(480,248), "S2489C14");
    check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C5*), ABISELECT(1664,912), "S2489C14");
    check_base_class_offset(lv, (S2489C3*)(S2489C8*), ABISELECT(1664,912), "S2489C14");
    /*is_ambiguous_... S2489C14::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*), ABISELECT(1664,912), "S2489C14");
    check_base_class_offset(lv, (S2489C6*)(S2489C5*), ABISELECT(96,44), "S2489C14");
    check_base_class_offset(lv, (S2489C5*), ABISELECT(96,44), "S2489C14");
    check_base_class_offset(lv, (S2489C6*)(S2489C8*), ABISELECT(1920,1068), "S2489C14");
    check_base_class_offset(lv, (S2489C8*), ABISELECT(1792,984), "S2489C14");
    check_field_offset(lv, s2489c14f0, ABISELECT(8,4), "S2489C14.s2489c14f0");
    check_field_offset(lv, s2489c14f1, ABISELECT(16,8), "S2489C14.s2489c14f1");
    check_field_offset(lv, s2489c14f2, ABISELECT(24,12), "S2489C14.s2489c14f2");
    check_field_offset(lv, s2489c14f3, ABISELECT(32,16), "S2489C14.s2489c14f3");
    test_class_info(&lv, &cd_S2489C14);
    dp->~S2489C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2489C14(Test_S2489C14, "S2489C14", ABISELECT(2304,1272));

#else // __cplusplus

extern void _ZN8S2489C14C1Ev();
extern void _ZN8S2489C14D1Ev();
Name_Map name_map_S2489C14[] = {
  NSPAIR(_ZN8S2489C14C1Ev),
  NSPAIR(_ZN8S2489C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C5;
extern VTBL_ENTRY _ZTI7S2489C5[];
extern  VTBL_ENTRY _ZTV7S2489C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C5[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C8;
extern VTBL_ENTRY _ZTI7S2489C8[];
extern  VTBL_ENTRY _ZTV7S2489C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C8[];
static Base_Class bases_S2489C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(480,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(1664,912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2489C6,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2489C5,    ABISELECT(96,44), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C6,    ABISELECT(1920,1068), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2489C8,    ABISELECT(1792,984), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2489C14[];
extern void _ZN8S2489C14D1Ev();
extern void _ZN8S2489C14D0Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S2489C14D1Ev,_ZTv0_n20_N8S2489C14D1Ev)();
extern void ABISELECT(_ZThn1792_N8S2489C14D1Ev,_ZThn984_N8S2489C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C14D0Ev,_ZTv0_n20_N8S2489C14D0Ev)();
extern void ABISELECT(_ZThn1792_N8S2489C14D0Ev,_ZThn984_N8S2489C14D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY vtc_S2489C14[] = {
  ABISELECT(1920,1068),
  ABISELECT(1792,984),
  ABISELECT(1664,912),
  ABISELECT(96,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C14[0]),
  (VTBL_ENTRY)&_ZN8S2489C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C14D0Ev,
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2489C14[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
  0,
  ABISELECT(-1792,-984),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(-1792,-984),
  (VTBL_ENTRY)&(_ZTI8S2489C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C14D1Ev,_ZTv0_n20_N8S2489C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C14D0Ev,_ZTv0_n20_N8S2489C14D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-1920,-1068),
  (VTBL_ENTRY)&(_ZTI8S2489C14[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S2489C14[];
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C14[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C5[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C67S2489C5__8S2489C14[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C8D1Ev();
extern void _ZN7S2489C8D0Ev();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C14[] = {
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C8__8S2489C14[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A1__8S2489C14[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
static  VTT_ENTRY vtt_S2489C14[] = {
  {&(_ZTV8S2489C14[6]),  6,33},
  {&(_ZTV8S2489C14[14]),  14,33},
  {&(_ZTV8S2489C14[23]),  23,33},
  {&(_ZTV8S2489C14[31]),  31,33},
  {&(_tg__ZTV7S2489C5__8S2489C14[3]),  3,6},
  {&(_tg__ZTV7S2489C67S2489C5__8S2489C14[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C14[4]),  4,7},
  {&(_tg__ZTV7S2489C6__7S2489C8__8S2489C14[5]),  5,7},
  {&(_tg__ZTV7S2489C6__A1__8S2489C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2489C14[];
extern  VTBL_ENTRY _ZTV8S2489C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C14[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C14D0Ev,_ZTv0_n20_N8S2489C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1792_N8S2489C14D0Ev,_ZThn984_N8S2489C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C14D1Ev,_ZTv0_n20_N8S2489C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1792_N8S2489C14D1Ev,_ZThn984_N8S2489C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2489C14 = {  "S2489C14", // class name
  bases_S2489C14, 6,
  &(vtc_S2489C14[0]), // expected_vtbl_contents
  &(vtt_S2489C14[0]), // expected_vtt_contents
  ABISELECT(2304,1272), // object size
  NSPAIRA(_ZTI8S2489C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S2489C14),33, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2489C14),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2489C13  {
  long double s2489c13f0;
  ::S2489C14 s2489c13f1[6];
  char s2489c13f2;
  void *s2489c13f3;
  void *s2489c13f4;
  int s2489c13f5[6];
  int s2489c13f6;
  void *s2489c13f7;
  __tsi64 s2489c13f8;
  void *s2489c13f9;
  int s2489c13f10;
  void *s2489c13f11;
  void *s2489c13f12;
  virtual void  v11(); // _ZN8S2489C133v11Ev
  ~S2489C13(); // tgen
  S2489C13(); // tgen
};
//SIG(-1 S2489C13) C1{ v1 FD FC2{ VBC3{ BC4{ m Fc Fi FL FU5{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC6{ VBC4 v2 v3 Fp Fp Fi Fi FU7{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU7 Fp FL:3 FC4 FL FU7} v4 Fp FD FC4[7] FD FU5 Fs FL FL} VBC8{ VBC4 VBC6 vd v5 FL FL FL FL Fi FU7 Fc[10] Fi} Fi Fp Fi FU7}[6] Fc Fp Fp Fi[6] Fi Fp FL Fp Fi Fp Fp}


void  S2489C13 ::v11(){vfunc_called(this, "_ZN8S2489C133v11Ev");}
S2489C13 ::~S2489C13(){ note_dtor("S2489C13", this);} // tgen
S2489C13 ::S2489C13(){ note_ctor("S2489C13", this);} // tgen

static void Test_S2489C13()
{
  extern Class_Descriptor cd_S2489C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(874,1930)];
    init_test(&cd_S2489C13, buf);
    S2489C13 *dp, &lv = *(dp=new (buf) S2489C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13968,7716), "sizeof(S2489C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C13)");
    check_field_offset(lv, s2489c13f0, ABISELECT(16,4), "S2489C13.s2489c13f0");
    check_field_offset(lv, s2489c13f1, ABISELECT(32,16), "S2489C13.s2489c13f1");
    check_field_offset(lv, s2489c13f2, ABISELECT(13856,7648), "S2489C13.s2489c13f2");
    check_field_offset(lv, s2489c13f3, ABISELECT(13864,7652), "S2489C13.s2489c13f3");
    check_field_offset(lv, s2489c13f4, ABISELECT(13872,7656), "S2489C13.s2489c13f4");
    check_field_offset(lv, s2489c13f5, ABISELECT(13880,7660), "S2489C13.s2489c13f5");
    check_field_offset(lv, s2489c13f6, ABISELECT(13904,7684), "S2489C13.s2489c13f6");
    check_field_offset(lv, s2489c13f7, ABISELECT(13912,7688), "S2489C13.s2489c13f7");
    check_field_offset(lv, s2489c13f8, ABISELECT(13920,7692), "S2489C13.s2489c13f8");
    check_field_offset(lv, s2489c13f9, ABISELECT(13928,7700), "S2489C13.s2489c13f9");
    check_field_offset(lv, s2489c13f10, ABISELECT(13936,7704), "S2489C13.s2489c13f10");
    check_field_offset(lv, s2489c13f11, ABISELECT(13944,7708), "S2489C13.s2489c13f11");
    check_field_offset(lv, s2489c13f12, ABISELECT(13952,7712), "S2489C13.s2489c13f12");
    test_class_info(&lv, &cd_S2489C13);
    dp->~S2489C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2489C13(Test_S2489C13, "S2489C13", ABISELECT(13968,7716));

#else // __cplusplus

extern void _ZN8S2489C13C1Ev();
extern void _ZN8S2489C13D1Ev();
Name_Map name_map_S2489C13[] = {
  NSPAIR(_ZN8S2489C13C1Ev),
  NSPAIR(_ZN8S2489C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2489C13[];
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY vtc_S2489C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C13[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern VTBL_ENTRY _ZTI8S2489C13[];
extern  VTBL_ENTRY _ZTV8S2489C13[];
Class_Descriptor cd_S2489C13 = {  "S2489C13", // class name
  0,0,//no base classes
  &(vtc_S2489C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13968,7716), // object size
  NSPAIRA(_ZTI8S2489C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2489C13),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2489C18  {
  ::S2489C4 s2489c18f0;
  void  mf2489c18(); // _ZN8S2489C189mf2489c18Ev
  virtual  ~S2489C18(); // _ZN8S2489C18D1Ev
  S2489C18(); // tgen
};
//SIG(-1 S2489C18) C1{ vd m FU2{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi}}


void  S2489C18 ::mf2489c18(){}
 S2489C18 ::~S2489C18(){ note_dtor("S2489C18", this);}
S2489C18 ::S2489C18(){ note_ctor("S2489C18", this);} // tgen

static void Test_S2489C18()
{
  extern Class_Descriptor cd_S2489C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,12)];
    init_test(&cd_S2489C18, buf);
    S2489C18 *dp, &lv = *(dp=new (buf) S2489C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,44), "sizeof(S2489C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C18)");
    check_field_offset(lv, s2489c18f0, ABISELECT(16,4), "S2489C18.s2489c18f0");
    test_class_info(&lv, &cd_S2489C18);
    dp->~S2489C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2489C18(Test_S2489C18, "S2489C18", ABISELECT(96,44));

#else // __cplusplus

extern void _ZN8S2489C18C1Ev();
extern void _ZN8S2489C18D1Ev();
Name_Map name_map_S2489C18[] = {
  NSPAIR(_ZN8S2489C18C1Ev),
  NSPAIR(_ZN8S2489C18D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2489C18[];
extern void _ZN8S2489C18D1Ev();
extern void _ZN8S2489C18D0Ev();
static  VTBL_ENTRY vtc_S2489C18[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C18[0]),
  (VTBL_ENTRY)&_ZN8S2489C18D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C18D0Ev,
};
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
Class_Descriptor cd_S2489C18 = {  "S2489C18", // class name
  0,0,//no base classes
  &(vtc_S2489C18[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,44), // object size
  NSPAIRA(_ZTI8S2489C18),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2489C18),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2489C19  : virtual S2489C8 , S2489C10 , S2489C3 , S2489C6 {
  ::S2489C7 s2489c19f0;
  int s2489c19f1;
  long s2489c19f2;
  char s2489c19f3;
  void *s2489c19f4;
  ::S2489C5 s2489c19f5;
  short s2489c19f6;
  virtual  ~S2489C19(); // _ZN8S2489C19D2Ev
  virtual void  v8(); // _ZN8S2489C192v8Ev
  virtual void  v9(); // _ZN8S2489C192v9Ev
  virtual void  v10(); // _ZN8S2489C193v10Ev
  S2489C19(); // tgen
};
//SIG(-1 S2489C19) C1{ VBC2{ VBC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC5{ VBC3 v4 v5 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 FL FU6} vd v6 FL FL FL FL Fi FU6 Fc[10] Fi} BC7{ BC3 VBC5 VBC2 VBC8{ BC3 BC5 v7 Fp FD FC3[7] FD FU4 Fs FL FL} vd v8 Fc Fi[7] Fl[5] FL FL FL FU9{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} BC3 BC5 vd v1 v2 v3 FU6 Fi Fl Fc Fp FC8 Fs}


 S2489C19 ::~S2489C19(){ note_dtor("S2489C19", this);}
void  S2489C19 ::v8(){vfunc_called(this, "_ZN8S2489C192v8Ev");}
void  S2489C19 ::v9(){vfunc_called(this, "_ZN8S2489C192v9Ev");}
void  S2489C19 ::v10(){vfunc_called(this, "_ZN8S2489C193v10Ev");}
S2489C19 ::S2489C19(){ note_ctor("S2489C19", this);} // tgen

static void Test_S2489C19()
{
  extern Class_Descriptor cd_S2489C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(301,672)];
    init_test(&cd_S2489C19, buf);
    S2489C19 *dp, &lv = *(dp=new (buf) S2489C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4800,2684), "sizeof(S2489C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C19)");
    check_base_class_offset(lv, (S2489C3*)(S2489C8*), ABISELECT(2720,1540), "S2489C19");
    /*is_ambiguous_... S2489C19::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*), ABISELECT(2720,1540), "S2489C19");
    check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C5*), ABISELECT(2720,1540), "S2489C19");
    /*is_ambiguous_... S2489C19::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*), ABISELECT(2720,1540), "S2489C19");
    check_base_class_offset(lv, (S2489C6*)(S2489C8*), ABISELECT(2848,1612), "S2489C19");
    /*is_ambiguous_... S2489C10::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*), ABISELECT(2848,1612), "S2489C19");
    check_base_class_offset(lv, (S2489C8*), ABISELECT(2600,1456), "S2489C19");
    check_base_class_offset(lv, (S2489C8*)(S2489C10*), ABISELECT(2600,1456), "S2489C19");
    /*is_ambiguous_... S2489C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*), ABISELECT(16,4), "S2489C19");
    /*is_ambiguous_... S2489C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C5*), ABISELECT(3616,2020), "S2489C19");
    check_base_class_offset(lv, (S2489C6*)(S2489C5*), ABISELECT(3232,1816), "S2489C19");
    check_base_class_offset(lv, (S2489C5*)(S2489C10*), ABISELECT(3232,1816), "S2489C19");
    check_base_class_offset(lv, (S2489C10*), 0, "S2489C19");
    /*is_ambiguous_... S2489C19::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(288,192), "S2489C19");
    /*is_ambiguous_... S2489C19::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*), ABISELECT(416,264), "S2489C19");
    check_field_offset(lv, s2489c19f0, ABISELECT(800,468), "S2489C19.s2489c19f0");
    check_field_offset(lv, s2489c19f1, ABISELECT(856,496), "S2489C19.s2489c19f1");
    check_field_offset(lv, s2489c19f2, ABISELECT(864,500), "S2489C19.s2489c19f2");
    check_field_offset(lv, s2489c19f3, ABISELECT(872,504), "S2489C19.s2489c19f3");
    check_field_offset(lv, s2489c19f4, ABISELECT(880,508), "S2489C19.s2489c19f4");
    check_field_offset(lv, s2489c19f5, ABISELECT(896,512), "S2489C19.s2489c19f5");
    check_field_offset(lv, s2489c19f6, ABISELECT(2592,1452), "S2489C19.s2489c19f6");
    test_class_info(&lv, &cd_S2489C19);
    dp->~S2489C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2489C19(Test_S2489C19, "S2489C19", ABISELECT(4800,2684));

#else // __cplusplus

extern void _ZN8S2489C19C1Ev();
extern void _ZN8S2489C19D2Ev();
Name_Map name_map_S2489C19[] = {
  NSPAIR(_ZN8S2489C19C1Ev),
  NSPAIR(_ZN8S2489C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C8;
extern VTBL_ENTRY _ZTI7S2489C8[];
extern  VTBL_ENTRY _ZTV7S2489C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C5;
extern VTBL_ENTRY _ZTI7S2489C5[];
extern  VTBL_ENTRY _ZTV7S2489C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C5[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
static Base_Class bases_S2489C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(2720,1540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S2489C6,    ABISELECT(2848,1612), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2489C8,    ABISELECT(2600,1456), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(3616,2020), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(3232,1816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2489C5,    ABISELECT(3232,1816), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C6,    ABISELECT(416,264), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2489C19[];
extern void _ZN8S2489C19D1Ev();
extern void _ZN8S2489C19D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev)();
extern void ABISELECT(_ZThn2600_N8S2489C19D1Ev,_ZThn1456_N8S2489C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev)();
extern void ABISELECT(_ZThn2600_N8S2489C19D0Ev,_ZThn1456_N8S2489C19D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY vtc_S2489C19[] = {
  ABISELECT(3232,1816),
  ABISELECT(2600,1456),
  ABISELECT(2720,1540),
  ABISELECT(2848,1612),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN8S2489C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
  ABISELECT(2304,1276),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  0,
  ABISELECT(-2600,-1456),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-2600,-1456),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2848,-1612),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-3232,-1816),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern VTBL_ENTRY _ZTV8S2489C19[];
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C10__8S2489C19[] = {
  ABISELECT(3232,1816),
  ABISELECT(2600,1456),
  ABISELECT(2720,1540),
  ABISELECT(2848,1612),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C10__8S2489C19[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2848,-1612),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZThn2600_N8S2489C10D1Ev,_ZThn1456_N8S2489C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void ABISELECT(_ZThn2600_N8S2489C10D0Ev,_ZThn1456_N8S2489C10D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C10__8S2489C19[] = {
  0,
  ABISELECT(-2600,-1456),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-2600,-1456),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C10__8S2489C19[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-3232,-1816),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A__8S2489C19[] = {
  ABISELECT(2304,1276),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C8D1Ev();
extern void _ZN7S2489C8D0Ev();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C19[] = {
  ABISELECT(248,156),
  ABISELECT(120,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C8__8S2489C19[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-248,-156),
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C19[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C19[] = {
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C5[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C67S2489C5__A1__8S2489C19[] = {
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
static  VTT_ENTRY vtt_S2489C19[] = {
  {&(_ZTV8S2489C19[6]),  6,42},
  {&(_tg__ZTV8S2489C10__8S2489C19[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C10__8S2489C19[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C10__8S2489C19[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C10__8S2489C19[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A__8S2489C19[3]),  3,5},
  {&(_ZTV8S2489C19[23]),  23,42},
  {&(_ZTV8S2489C19[31]),  31,42},
  {&(_ZTV8S2489C19[39]),  39,42},
  {&(_ZTV8S2489C19[15]),  15,42},
  {&(_tg__ZTV7S2489C8__8S2489C19[4]),  4,7},
  {&(_tg__ZTV7S2489C6__7S2489C8__8S2489C19[5]),  5,7},
  {&(_tg__ZTV7S2489C6__8S2489C19[3]),  3,5},
  {&(_tg__ZTV7S2489C5__8S2489C19[3]),  3,6},
  {&(_tg__ZTV7S2489C67S2489C5__A1__8S2489C19[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2489C19[];
extern  VTBL_ENTRY _ZTV8S2489C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C19[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N8S2489C10D0Ev,_ZThn1456_N8S2489C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N8S2489C10D1Ev,_ZThn1456_N8S2489C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N8S2489C19D0Ev,_ZThn1456_N8S2489C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N8S2489C19D1Ev,_ZThn1456_N8S2489C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2489C19 = {  "S2489C19", // class name
  bases_S2489C19, 10,
  &(vtc_S2489C19[0]), // expected_vtbl_contents
  &(vtt_S2489C19[0]), // expected_vtt_contents
  ABISELECT(4800,2684), // object size
  NSPAIRA(_ZTI8S2489C19),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S2489C19),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2489C19),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2489C21  : S2489C3 , virtual S2489C6 , virtual S2489C8 , virtual S2489C5 , virtual S2489C19 {
  __tsi64 s2489c21f0;
  int s2489c21f1;
  void *s2489c21f2;
  void *s2489c21f3;
  __tsi64 s2489c21f4;
  virtual  ~S2489C21(); // _ZN8S2489C21D2Ev
  S2489C21(); // tgen
};
//SIG(-1 S2489C21) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ VBC2 v1 v2 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 FL FU5} VBC6{ VBC2 VBC4 vd v3 FL FL FL FL Fi FU5 Fc[10] Fi} VBC7{ BC2 BC4 v4 Fp FD FC2[7] FD FU3 Fs FL FL} VBC8{ VBC6 BC9{ BC2 VBC4 VBC6 VBC7 vd v5 Fc Fi[7] Fl[5] FL FL FL FU10{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} BC2 BC4 vd v6 v7 v8 FU5 Fi Fl Fc Fp FC7 Fs} vd FL Fi Fp Fp FL}


 S2489C21 ::~S2489C21(){ note_dtor("S2489C21", this);}
S2489C21 ::S2489C21(){ note_ctor("S2489C21", this);} // tgen

static void Test_S2489C21()
{
  extern Class_Descriptor cd_S2489C21;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(314,698)];
    init_test(&cd_S2489C21, buf);
    S2489C21 *dp, &lv = *(dp=new (buf) S2489C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5008,2788), "sizeof(S2489C21)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C21)");
    /*is_ambiguous_... S2489C21::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(16,4), "S2489C21");
    /*is_ambiguous_... S2489C21::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*), ABISELECT(576,308), "S2489C21");
    check_base_class_offset(lv, (S2489C3*)(S2489C8*), ABISELECT(576,308), "S2489C21");
    check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C5*), ABISELECT(576,308), "S2489C21");
    /*is_ambiguous_... S2489C19::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C19*), ABISELECT(576,308), "S2489C21");
    /*is_ambiguous_... S2489C21::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*), ABISELECT(192,104), "S2489C21");
    check_base_class_offset(lv, (S2489C6*)(S2489C8*), ABISELECT(192,104), "S2489C21");
    /*is_ambiguous_... S2489C10::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C19*), ABISELECT(192,104), "S2489C21");
    check_base_class_offset(lv, (S2489C8*), ABISELECT(704,380), "S2489C21");
    check_base_class_offset(lv, (S2489C8*)(S2489C19*), ABISELECT(704,380), "S2489C21");
    check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C19*), ABISELECT(704,380), "S2489C21");
    /*is_ambiguous_... S2489C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C5*), ABISELECT(1216,668), "S2489C21");
    check_base_class_offset(lv, (S2489C6*)(S2489C5*), ABISELECT(832,464), "S2489C21");
    check_base_class_offset(lv, (S2489C5*), ABISELECT(832,464), "S2489C21");
    check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C19*), ABISELECT(832,464), "S2489C21");
    /*is_ambiguous_... S2489C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C19*), ABISELECT(2416,1336), "S2489C21");
    check_base_class_offset(lv, (S2489C10*)(S2489C19*), ABISELECT(2400,1332), "S2489C21");
    /*is_ambiguous_... S2489C19::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C19*), ABISELECT(2688,1524), "S2489C21");
    /*is_ambiguous_... S2489C19::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C19*), ABISELECT(2816,1596), "S2489C21");
    check_base_class_offset(lv, (S2489C19*), ABISELECT(2400,1332), "S2489C21");
    check_field_offset(lv, s2489c21f0, ABISELECT(144,76), "S2489C21.s2489c21f0");
    check_field_offset(lv, s2489c21f1, ABISELECT(152,84), "S2489C21.s2489c21f1");
    check_field_offset(lv, s2489c21f2, ABISELECT(160,88), "S2489C21.s2489c21f2");
    check_field_offset(lv, s2489c21f3, ABISELECT(168,92), "S2489C21.s2489c21f3");
    check_field_offset(lv, s2489c21f4, ABISELECT(176,96), "S2489C21.s2489c21f4");
    test_class_info(&lv, &cd_S2489C21);
    dp->~S2489C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2489C21(Test_S2489C21, "S2489C21", ABISELECT(5008,2788));

#else // __cplusplus

extern void _ZN8S2489C21C1Ev();
extern void _ZN8S2489C21D2Ev();
Name_Map name_map_S2489C21[] = {
  NSPAIR(_ZN8S2489C21C1Ev),
  NSPAIR(_ZN8S2489C21D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C8;
extern VTBL_ENTRY _ZTI7S2489C8[];
extern  VTBL_ENTRY _ZTV7S2489C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C5;
extern VTBL_ENTRY _ZTI7S2489C5[];
extern  VTBL_ENTRY _ZTV7S2489C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C5[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C19;
extern VTBL_ENTRY _ZTI8S2489C19[];
extern  VTBL_ENTRY _ZTV8S2489C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C19[];
static Base_Class bases_S2489C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(576,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2489C6,    ABISELECT(192,104), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C8,    ABISELECT(704,380), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(1216,668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(832,464), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2489C5,    ABISELECT(832,464), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(2416,1336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(2400,1332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(2688,1524), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(2816,1596), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2489C19,    ABISELECT(2400,1332), //bcp->offset
    34, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2489C21[];
extern void _ZN8S2489C21D1Ev();
extern void _ZN8S2489C21D0Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev)();
extern void ABISELECT(_ZThn704_N8S2489C21D1Ev,_ZThn380_N8S2489C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev)();
extern void ABISELECT(_ZThn704_N8S2489C21D0Ev,_ZThn380_N8S2489C21D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
extern void ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev)();
extern void ABISELECT(_ZThn2400_N8S2489C21D1Ev,_ZThn1332_N8S2489C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev)();
extern void ABISELECT(_ZThn2400_N8S2489C21D0Ev,_ZThn1332_N8S2489C21D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY vtc_S2489C21[] = {
  ABISELECT(2400,1332),
  ABISELECT(832,464),
  ABISELECT(704,380),
  ABISELECT(576,308),
  ABISELECT(192,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN8S2489C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C21D0Ev,
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  0,
  ABISELECT(-704,-380),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-704,-380),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-832,-464),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-2400,-1332),
  ABISELECT(-1568,-868),
  ABISELECT(-1696,-952),
  ABISELECT(-1824,-1024),
  ABISELECT(-2208,-1228),
  ABISELECT(-2400,-1332),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
  ABISELECT(-2240,-1288),
  ABISELECT(-2816,-1596),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S2489C21[];
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C21[] = {
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C8D1Ev();
extern void _ZN7S2489C8D0Ev();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C21[] = {
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C8__8S2489C21[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(512,276),
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C21[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C5[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C67S2489C5__A1__8S2489C21[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C19D1Ev();
extern void _ZN8S2489C19D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__8S2489C21[] = {
  ABISELECT(-1568,-868),
  ABISELECT(-1696,-952),
  ABISELECT(-1824,-1024),
  ABISELECT(-2208,-1228),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN8S2489C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C108S2489C19__8S2489C21[] = {
  ABISELECT(-1568,-868),
  ABISELECT(-1696,-952),
  ABISELECT(-1824,-1024),
  ABISELECT(-2208,-1228),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C108S2489C19__8S2489C21[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(2208,1228),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C108S2489C19__8S2489C21[] = {
  0,
  ABISELECT(1696,952),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(1696,952),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C108S2489C19__8S2489C21[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(1568,868),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A2__8S2489C21[] = {
  ABISELECT(-2240,-1288),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C19__8S2489C21[] = {
  0,
  ABISELECT(1696,952),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(1696,952),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C19__8S2489C21[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(2208,1228),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C19__8S2489C21[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(1568,868),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A__8S2489C19__8S2489C21[] = {
  ABISELECT(-2240,-1288),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
static  VTT_ENTRY vtt_S2489C21[] = {
  {&(_ZTV8S2489C21[7]),  7,58},
  {&(_ZTV8S2489C21[14]),  14,58},
  {&(_ZTV8S2489C21[22]),  22,58},
  {&(_ZTV8S2489C21[31]),  31,58},
  {&(_ZTV8S2489C21[47]),  47,58},
  {&(_ZTV8S2489C21[56]),  56,58},
  {&(_tg__ZTV7S2489C6__8S2489C21[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C21[4]),  4,7},
  {&(_tg__ZTV7S2489C6__7S2489C8__8S2489C21[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C21[3]),  3,6},
  {&(_tg__ZTV7S2489C67S2489C5__A1__8S2489C21[3]),  3,5},
  {&(_tg__ZTV8S2489C19__8S2489C21[6]),  6,12},
  {&(_tg__ZTV8S2489C108S2489C19__8S2489C21[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C108S2489C19__8S2489C21[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C108S2489C19__8S2489C21[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C108S2489C19__8S2489C21[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C19__A2__8S2489C21[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C19__8S2489C21[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C19__8S2489C21[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C19__8S2489C21[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A__8S2489C19__8S2489C21[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2489C21[];
extern  VTBL_ENTRY _ZTV8S2489C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C21[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2400_N8S2489C21D0Ev,_ZThn1332_N8S2489C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2400_N8S2489C21D1Ev,_ZThn1332_N8S2489C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S2489C21D0Ev,_ZThn380_N8S2489C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S2489C21D1Ev,_ZThn380_N8S2489C21D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2489C21 = {  "S2489C21", // class name
  bases_S2489C21, 12,
  &(vtc_S2489C21[0]), // expected_vtbl_contents
  &(vtt_S2489C21[0]), // expected_vtt_contents
  ABISELECT(5008,2788), // object size
  NSPAIRA(_ZTI8S2489C21),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S2489C21),58, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2489C21),21, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2489C20  : virtual S2489C5 , virtual S2489C6 , virtual S2489C8 , S2489C9 , virtual S2489C13 {
  char s2489c20f0;
  short s2489c20f1[3];
  ::S2489C21 s2489c20f2[10];
  ::S2489C5 s2489c20f3;
  __tsi64 s2489c20f4;
  __tsi64 s2489c20f5:5;
  int s2489c20f6;
  void *s2489c20f7[6];
  __tsi64 s2489c20f8[2];
  __tsi64 s2489c20f9;
  int s2489c20f10;
  virtual  ~S2489C20(); // _ZN8S2489C20D2Ev
  S2489C20(); // tgen
};
//SIG(-1 S2489C20) C1{ VBC2{ BC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC5{ VBC3 v1 v2 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 FL FU6} v3 Fp FD FC3[7] FD FU4 Fs FL FL} VBC5 VBC7{ VBC3 VBC5 vd v4 FL FL FL FL Fi FU6 Fc[10] Fi} BC8{ BC9{ BC3 VBC5 VBC7 VBC2 vd v5 Fc Fi[7] Fl[5] FL FL FL FU10{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} vd v6 v7 Fp Fp Fp Fi FC11{} FL FL} VBC12{ v8 FD FC13{ VBC2 VBC7 Fi Fp Fi FU6}[6] Fc Fp Fp Fi[6] Fi Fp FL Fp Fi Fp Fp} vd Fc Fs[3] FC14{ BC3 VBC5 VBC7 VBC2 VBC15{ VBC7 BC9 BC3 BC5 vd v9 v10 v11 FU6 Fi Fl Fc Fp FC2 Fs} vd FL Fi Fp Fp FL}[10] FC2 FL FL:5 Fi Fp[6] FL[2] FL Fi}


 S2489C20 ::~S2489C20(){ note_dtor("S2489C20", this);}
S2489C20 ::S2489C20(){ note_ctor("S2489C20", this);} // tgen

static void Test_S2489C20()
{
  extern Class_Descriptor cd_S2489C20;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4275,9518)];
    init_test(&cd_S2489C20, buf);
    S2489C20 *dp, &lv = *(dp=new (buf) S2489C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(68384,38068), "sizeof(S2489C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C20)");
    /*is_ambiguous_... S2489C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C5*), ABISELECT(52592,29328), "S2489C20");
    check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C5*), ABISELECT(53776,29992), "S2489C20");
    /*is_ambiguous_... S2489C20::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*), ABISELECT(53776,29992), "S2489C20");
    check_base_class_offset(lv, (S2489C3*)(S2489C8*), ABISELECT(53776,29992), "S2489C20");
    check_base_class_offset(lv, (S2489C6*)(S2489C5*), ABISELECT(52208,29124), "S2489C20");
    check_base_class_offset(lv, (S2489C5*), ABISELECT(52208,29124), "S2489C20");
    check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C9*), ABISELECT(52208,29124), "S2489C20");
    /*is_ambiguous_... S2489C20::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*), ABISELECT(53904,30064), "S2489C20");
    check_base_class_offset(lv, (S2489C6*)(S2489C8*), ABISELECT(53904,30064), "S2489C20");
    /*is_ambiguous_... S2489C10::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C9*), ABISELECT(53904,30064), "S2489C20");
    check_base_class_offset(lv, (S2489C8*), ABISELECT(54288,30268), "S2489C20");
    check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C9*), ABISELECT(54288,30268), "S2489C20");
    /*is_ambiguous_... S2489C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C9*), ABISELECT(16,4), "S2489C20");
    check_base_class_offset(lv, (S2489C10*)(S2489C9*), 0, "S2489C20");
    check_base_class_offset(lv, (S2489C9*), 0, "S2489C20");
    check_base_class_offset(lv, (S2489C13*), ABISELECT(54416,30352), "S2489C20");
    check_field_offset(lv, s2489c20f0, ABISELECT(328,228), "S2489C20.s2489c20f0");
    check_field_offset(lv, s2489c20f1, ABISELECT(330,230), "S2489C20.s2489c20f1");
    check_field_offset(lv, s2489c20f2, ABISELECT(336,236), "S2489C20.s2489c20f2");
    check_field_offset(lv, s2489c20f3, ABISELECT(50416,28116), "S2489C20.s2489c20f3");
    check_field_offset(lv, s2489c20f4, ABISELECT(52112,29056), "S2489C20.s2489c20f4");
    set_bf_and_test(lv, s2489c20f5, ABISELECT(52120,29064), 0, 5, 1, "S2489C20");
    set_bf_and_test(lv, s2489c20f5, ABISELECT(52120,29064), 0, 5, hide_sll(1LL<<4), "S2489C20");
    check_field_offset(lv, s2489c20f6, ABISELECT(52124,29068), "S2489C20.s2489c20f6");
    check_field_offset(lv, s2489c20f7, ABISELECT(52128,29072), "S2489C20.s2489c20f7");
    check_field_offset(lv, s2489c20f8, ABISELECT(52176,29096), "S2489C20.s2489c20f8");
    check_field_offset(lv, s2489c20f9, ABISELECT(52192,29112), "S2489C20.s2489c20f9");
    check_field_offset(lv, s2489c20f10, ABISELECT(52200,29120), "S2489C20.s2489c20f10");
    test_class_info(&lv, &cd_S2489C20);
    dp->~S2489C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2489C20(Test_S2489C20, "S2489C20", ABISELECT(68384,38068));

#else // __cplusplus

extern void _ZN8S2489C20C1Ev();
extern void _ZN8S2489C20D2Ev();
Name_Map name_map_S2489C20[] = {
  NSPAIR(_ZN8S2489C20C1Ev),
  NSPAIR(_ZN8S2489C20D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C5;
extern VTBL_ENTRY _ZTI7S2489C5[];
extern  VTBL_ENTRY _ZTV7S2489C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C5[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C8;
extern VTBL_ENTRY _ZTI7S2489C8[];
extern  VTBL_ENTRY _ZTV7S2489C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C9;
extern VTBL_ENTRY _ZTI7S2489C9[];
extern  VTBL_ENTRY _ZTV7S2489C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C9[];
extern Class_Descriptor cd_S2489C13;
extern VTBL_ENTRY _ZTI8S2489C13[];
extern  VTBL_ENTRY _ZTV8S2489C13[];
static Base_Class bases_S2489C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(52592,29328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(53776,29992), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2489C6,    ABISELECT(52208,29124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2489C5,    ABISELECT(52208,29124), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C6,    ABISELECT(53904,30064), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C8,    ABISELECT(54288,30268), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2489C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C13,    ABISELECT(54416,30352), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2489C20[];
extern void _ZN8S2489C20D1Ev();
extern void _ZN8S2489C20D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S2489C20D1Ev,_ZTv0_n20_N8S2489C20D1Ev)();
extern void ABISELECT(_ZThn54288_N8S2489C20D1Ev,_ZThn30268_N8S2489C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C20D0Ev,_ZTv0_n20_N8S2489C20D0Ev)();
extern void ABISELECT(_ZThn54288_N8S2489C20D0Ev,_ZThn30268_N8S2489C20D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY vtc_S2489C20[] = {
  ABISELECT(54416,30352),
  ABISELECT(52208,29124),
  ABISELECT(54288,30268),
  ABISELECT(53776,29992),
  ABISELECT(53904,30064),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN8S2489C20D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C20D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-52208,-29124),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-53904,-30064),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  0,
  ABISELECT(-54288,-30268),
  ABISELECT(-384,-204),
  ABISELECT(-512,-276),
  ABISELECT(-54288,-30268),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C20D1Ev,_ZTv0_n20_N8S2489C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C20D0Ev,_ZTv0_n20_N8S2489C20D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
  0,
  ABISELECT(-54416,-30352),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern VTBL_ENTRY _ZTV8S2489C20[];
extern void _ZN7S2489C9D1Ev();
extern void _ZN7S2489C9D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C9__8S2489C20[] = {
  ABISELECT(52208,29124),
  ABISELECT(54288,30268),
  ABISELECT(53776,29992),
  ABISELECT(53904,30064),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C107S2489C9__8S2489C20[] = {
  ABISELECT(52208,29124),
  ABISELECT(54288,30268),
  ABISELECT(53776,29992),
  ABISELECT(53904,30064),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C107S2489C9__8S2489C20[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-53904,-30064),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZThn54288_N8S2489C10D1Ev,_ZThn30268_N8S2489C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void ABISELECT(_ZThn54288_N8S2489C10D0Ev,_ZThn30268_N8S2489C10D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C107S2489C9__8S2489C20[] = {
  0,
  ABISELECT(-54288,-30268),
  ABISELECT(-384,-204),
  ABISELECT(-512,-276),
  ABISELECT(-54288,-30268),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C107S2489C9__8S2489C20[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-52208,-29124),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C9__8S2489C20[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-53904,-30064),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev)();
extern void ABISELECT(_ZThn54288_N7S2489C9D1Ev,_ZThn30268_N7S2489C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev)();
extern void ABISELECT(_ZThn54288_N7S2489C9D0Ev,_ZThn30268_N7S2489C9D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__7S2489C9__8S2489C20[] = {
  0,
  ABISELECT(-54288,-30268),
  ABISELECT(-384,-204),
  ABISELECT(-512,-276),
  ABISELECT(-54288,-30268),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__7S2489C9__8S2489C20[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-52208,-29124),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C20[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C5[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C67S2489C5__8S2489C20[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A1__8S2489C20[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C8D1Ev();
extern void _ZN7S2489C8D0Ev();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C20[] = {
  ABISELECT(-384,-204),
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C8__8S2489C20[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
static  VTT_ENTRY vtt_S2489C20[] = {
  {&(_ZTV8S2489C20[7]),  7,41},
  {&(_tg__ZTV7S2489C9__8S2489C20[6]),  6,11},
  {&(_tg__ZTV8S2489C107S2489C9__8S2489C20[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C107S2489C9__8S2489C20[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C107S2489C9__8S2489C20[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C107S2489C9__8S2489C20[6]),  6,9},
  {&(_tg__ZTV7S2489C6__7S2489C9__8S2489C20[5]),  5,7},
  {&(_tg__ZTV7S2489C8__7S2489C9__8S2489C20[6]),  6,9},
  {&(_tg__ZTV7S2489C5__7S2489C9__8S2489C20[6]),  6,9},
  {&(_ZTV8S2489C20[18]),  18,41},
  {&(_ZTV8S2489C20[26]),  26,41},
  {&(_ZTV8S2489C20[34]),  34,41},
  {&(_ZTV8S2489C20[40]),  40,41},
  {&(_tg__ZTV7S2489C5__8S2489C20[3]),  3,6},
  {&(_tg__ZTV7S2489C67S2489C5__8S2489C20[3]),  3,5},
  {&(_tg__ZTV7S2489C6__A1__8S2489C20[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C20[4]),  4,7},
  {&(_tg__ZTV7S2489C6__7S2489C8__8S2489C20[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S2489C20[];
extern  VTBL_ENTRY _ZTV8S2489C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C20[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N7S2489C9D0Ev,_ZThn30268_N7S2489C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N7S2489C9D1Ev,_ZThn30268_N7S2489C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N8S2489C10D0Ev,_ZThn30268_N8S2489C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N8S2489C10D1Ev,_ZThn30268_N8S2489C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C20D0Ev,_ZTv0_n20_N8S2489C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N8S2489C20D0Ev,_ZThn30268_N8S2489C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C20D1Ev,_ZTv0_n20_N8S2489C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N8S2489C20D1Ev,_ZThn30268_N8S2489C20D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2489C20 = {  "S2489C20", // class name
  bases_S2489C20, 10,
  &(vtc_S2489C20[0]), // expected_vtbl_contents
  &(vtt_S2489C20[0]), // expected_vtt_contents
  ABISELECT(68384,38068), // object size
  NSPAIRA(_ZTI8S2489C20),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S2489C20),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2489C20),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2489C17  : S2489C18 , S2489C19 , virtual S2489C20 , S2489C21 {
  int s2489c17f0;
  long double s2489c17f1;
  long s2489c17f2;
  char s2489c17f3:3;
  void *s2489c17f4;
  ::S2489C6 s2489c17f5;
  virtual  ~S2489C17(); // _ZN8S2489C17D2Ev
  virtual void  v12(); // _ZN8S2489C173v12Ev
  virtual void  v13(); // _ZN8S2489C173v13Ev
  S2489C17(); // tgen
};
//SIG(-1 S2489C17) C1{ BC2{ vd m FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi}} BC4{ VBC5{ VBC6{ m Fc Fi FL FU3 Fs FL:12 FL Fi} VBC7{ VBC6 v3 v4 Fp Fp Fi Fi FU8{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU8 Fp FL:3 FC6 FL FU8} vd v5 FL FL FL FL Fi FU8 Fc[10] Fi} BC9{ BC6 VBC7 VBC5 VBC10{ BC6 BC7 v6 Fp FD FC6[7] FD FU3 Fs FL FL} vd v7 Fc Fi[7] Fl[5] FL FL FL FU11{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} BC6 BC7 vd v8 v9 v10 FU8 Fi Fl Fc Fp FC10 Fs} VBC12{ VBC10 VBC7 VBC5 BC13{ BC9 vd v11 v12 Fp Fp Fp Fi FC14{} FL FL} VBC15{ v13 FD FC16{ VBC10 VBC5 Fi Fp Fi FU8}[6] Fc Fp Fp Fi[6] Fi Fp FL Fp Fi Fp Fp} vd Fc Fs[3] FC17{ BC6 VBC7 VBC5 VBC10 VBC4 vd FL Fi Fp Fp FL}[10] FC10 FL FL:5 Fi Fp[6] FL[2] FL Fi} BC17 vd v1 v2 Fi FD Fl Fc:3 Fp FC7}


 S2489C17 ::~S2489C17(){ note_dtor("S2489C17", this);}
void  S2489C17 ::v12(){vfunc_called(this, "_ZN8S2489C173v12Ev");}
void  S2489C17 ::v13(){vfunc_called(this, "_ZN8S2489C173v13Ev");}
S2489C17 ::S2489C17(){ note_ctor("S2489C17", this);} // tgen

static void Test_S2489C17()
{
  extern Class_Descriptor cd_S2489C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4654,10359)];
    init_test(&cd_S2489C17, buf);
    S2489C17 *dp, &lv = *(dp=new (buf) S2489C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(74448,41432), "sizeof(S2489C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C17)");
    check_base_class_offset(lv, (S2489C18*), 0, "S2489C17");
    check_base_class_offset(lv, (S2489C3*)(S2489C8*), ABISELECT(3584,1992), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*), ABISELECT(3584,1992), "S2489C17");
    check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C5*), ABISELECT(3584,1992), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C19*), ABISELECT(3584,1992), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C19*), ABISELECT(3584,1992), "S2489C17");
    check_base_class_offset(lv, (S2489C6*)(S2489C8*), ABISELECT(3712,2064), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C19*), ABISELECT(3712,2064), "S2489C17");
    /*is_ambiguous_... S2489C20::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C20*), ABISELECT(3712,2064), "S2489C17");
    /*is_ambiguous_... S2489C10::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(3712,2064), "S2489C17");
    /*is_ambiguous_... S2489C21::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C21*), ABISELECT(3712,2064), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C19*), ABISELECT(3712,2064), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C19*), ABISELECT(3456,1908), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C19*), ABISELECT(3456,1908), "S2489C17");
    check_base_class_offset(lv, (S2489C8*)(S2489C20*), ABISELECT(3456,1908), "S2489C17");
    check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(3456,1908), "S2489C17");
    check_base_class_offset(lv, (S2489C8*)(S2489C21*), ABISELECT(3456,1908), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C19*), ABISELECT(3456,1908), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C19*), ABISELECT(3456,1908), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C19*), ABISELECT(112,48), "S2489C17");
    /*is_ambiguous_... S2489C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C5*), ABISELECT(4480,2472), "S2489C17");
    check_base_class_offset(lv, (S2489C6*)(S2489C5*), ABISELECT(4096,2268), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C19*), ABISELECT(4096,2268), "S2489C17");
    check_base_class_offset(lv, (S2489C5*)(S2489C20*), ABISELECT(4096,2268), "S2489C17");
    check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(4096,2268), "S2489C17");
    check_base_class_offset(lv, (S2489C5*)(S2489C21*), ABISELECT(4096,2268), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C19*), ABISELECT(4096,2268), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C10*)(S2489C19*), ABISELECT(96,44), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C19*), ABISELECT(384,236), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C19*), ABISELECT(512,308), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C19*), ABISELECT(96,44), "S2489C17");
    /*is_ambiguous_... S2489C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(5680,3140), "S2489C17");
    check_base_class_offset(lv, (S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(5664,3136), "S2489C17");
    check_base_class_offset(lv, (S2489C9*)(S2489C20*), ABISELECT(5664,3136), "S2489C17");
    check_base_class_offset(lv, (S2489C13*)(S2489C20*), ABISELECT(57872,32260), "S2489C17");
    check_base_class_offset(lv, (S2489C20*), ABISELECT(5664,3136), "S2489C17");
    /*is_ambiguous_... S2489C21::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C21*), ABISELECT(2720,1504), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C19*), ABISELECT(71856,39980), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C10*)(S2489C19*), ABISELECT(71840,39976), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C19*), ABISELECT(72128,40168), "S2489C17");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C19*), ABISELECT(72256,40240), "S2489C17");
    check_base_class_offset(lv, (S2489C19*)(S2489C21*), ABISELECT(71840,39976), "S2489C17");
    check_base_class_offset(lv, (S2489C21*), ABISELECT(2704,1500), "S2489C17");
    check_field_offset(lv, s2489c17f0, ABISELECT(2888,1604), "S2489C17.s2489c17f0");
    check_field_offset(lv, s2489c17f1, ABISELECT(2896,1608), "S2489C17.s2489c17f1");
    check_field_offset(lv, s2489c17f2, ABISELECT(2912,1620), "S2489C17.s2489c17f2");
    set_bf_and_test(lv, s2489c17f3, ABISELECT(2920,1624), 0, 3, 1, "S2489C17");
    set_bf_and_test(lv, s2489c17f3, ABISELECT(2920,1624), 0, 3, hide_sll(1LL<<2), "S2489C17");
    check_field_offset(lv, s2489c17f4, ABISELECT(2928,1628), "S2489C17.s2489c17f4");
    check_field_offset(lv, s2489c17f5, ABISELECT(2944,1632), "S2489C17.s2489c17f5");
    test_class_info(&lv, &cd_S2489C17);
    dp->~S2489C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2489C17(Test_S2489C17, "S2489C17", ABISELECT(74448,41432));

#else // __cplusplus

extern void _ZN8S2489C17C1Ev();
extern void _ZN8S2489C17D2Ev();
Name_Map name_map_S2489C17[] = {
  NSPAIR(_ZN8S2489C17C1Ev),
  NSPAIR(_ZN8S2489C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C8;
extern VTBL_ENTRY _ZTI7S2489C8[];
extern  VTBL_ENTRY _ZTV7S2489C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C5;
extern VTBL_ENTRY _ZTI7S2489C5[];
extern  VTBL_ENTRY _ZTV7S2489C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C5[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C19;
extern VTBL_ENTRY _ZTI8S2489C19[];
extern  VTBL_ENTRY _ZTV8S2489C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C19[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C9;
extern VTBL_ENTRY _ZTI7S2489C9[];
extern  VTBL_ENTRY _ZTV7S2489C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C9[];
extern Class_Descriptor cd_S2489C13;
extern VTBL_ENTRY _ZTI8S2489C13[];
extern  VTBL_ENTRY _ZTV8S2489C13[];
extern Class_Descriptor cd_S2489C20;
extern VTBL_ENTRY _ZTI8S2489C20[];
extern  VTBL_ENTRY _ZTV8S2489C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C20[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C19;
extern VTBL_ENTRY _ZTI8S2489C19[];
extern  VTBL_ENTRY _ZTV8S2489C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C19[];
extern Class_Descriptor cd_S2489C21;
extern VTBL_ENTRY _ZTI8S2489C21[];
extern  VTBL_ENTRY _ZTV8S2489C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C21[];
static Base_Class bases_S2489C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(3584,1992), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2489C6,    ABISELECT(3712,2064), //bcp->offset
    48, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2489C8,    ABISELECT(3456,1908), //bcp->offset
    39, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(112,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(4480,2472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(4096,2268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C5,    ABISELECT(4096,2268), //bcp->offset
    55, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2489C10,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(384,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(512,308), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2489C19,    ABISELECT(96,44), //bcp->offset
    13, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(5680,3140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(5664,3136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2489C9,    ABISELECT(5664,3136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2489C13,    ABISELECT(57872,32260), //bcp->offset
    80, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2489C20,    ABISELECT(5664,3136), //bcp->offset
    64, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(2720,1504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(71856,39980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(71840,39976), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(72128,40168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(72256,40240), //bcp->offset
    103, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2489C19,    ABISELECT(71840,39976), //bcp->offset
    84, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S2489C21,    ABISELECT(2704,1500), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2489C17[];
extern void _ZN8S2489C17D1Ev();
extern void _ZN8S2489C17D0Ev();
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
extern void ABISELECT(_ZThn96_N8S2489C17D1Ev,_ZThn44_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S2489C17D0Ev,_ZThn44_N8S2489C17D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void ABISELECT(_ZThn2704_N8S2489C17D1Ev,_ZThn1500_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2489C17D0Ev,_ZThn1500_N8S2489C17D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn3456_N8S2489C17D1Ev,_ZThn1908_N8S2489C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev)();
extern void ABISELECT(_ZThn3456_N8S2489C17D0Ev,_ZThn1908_N8S2489C17D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn5664_N8S2489C17D1Ev,_ZThn3136_N8S2489C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev)();
extern void ABISELECT(_ZThn5664_N8S2489C17D0Ev,_ZThn3136_N8S2489C17D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
extern void _ZN8S2489C133v11Ev();
extern void ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn71840_N8S2489C17D1Ev,_ZThn39976_N8S2489C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev)();
extern void ABISELECT(_ZThn71840_N8S2489C17D0Ev,_ZThn39976_N8S2489C17D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY vtc_S2489C17[] = {
  ABISELECT(71840,39976),
  ABISELECT(57872,32260),
  ABISELECT(5664,3136),
  ABISELECT(4096,2268),
  ABISELECT(3712,2064),
  ABISELECT(3584,1992),
  ABISELECT(3456,1908),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN8S2489C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C17D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
  ABISELECT(4000,2224),
  ABISELECT(3360,1864),
  ABISELECT(3488,1948),
  ABISELECT(3616,2020),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C17D1Ev,_ZThn44_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C17D0Ev,_ZThn44_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
  ABISELECT(3072,1684),
  ABISELECT(-512,-308),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  ABISELECT(69136,38476),
  ABISELECT(1392,768),
  ABISELECT(752,408),
  ABISELECT(880,492),
  ABISELECT(1008,564),
  ABISELECT(-2704,-1500),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C17D1Ev,_ZThn1500_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C17D0Ev,_ZThn1500_N8S2489C17D0Ev),
  0,
  ABISELECT(-3456,-1908),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(-3456,-1908),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-3712,-2064),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-4096,-2268),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
  0,
  0,
  0,
  ABISELECT(-5664,-3136),
  ABISELECT(52208,29124),
  ABISELECT(-1568,-868),
  ABISELECT(-2208,-1228),
  ABISELECT(-2080,-1144),
  ABISELECT(-1952,-1072),
  ABISELECT(-5664,-3136),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
  0,
  ABISELECT(-57872,-32260),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-71840,-39976),
  ABISELECT(-67744,-37708),
  ABISELECT(-68384,-38068),
  ABISELECT(-68256,-37984),
  ABISELECT(-68128,-37912),
  ABISELECT(-71840,-39976),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
  ABISELECT(-68672,-38248),
  ABISELECT(-72256,-40240),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S2489C17[];
extern void _ZN8S2489C19D1Ev();
extern void _ZN8S2489C19D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A__8S2489C17[] = {
  ABISELECT(4000,2224),
  ABISELECT(3360,1864),
  ABISELECT(3488,1948),
  ABISELECT(3616,2020),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN8S2489C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C108S2489C19__8S2489C17[] = {
  ABISELECT(4000,2224),
  ABISELECT(3360,1864),
  ABISELECT(3488,1948),
  ABISELECT(3616,2020),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C108S2489C19__8S2489C17[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-3616,-2020),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZThn3360_N8S2489C10D1Ev,_ZThn1864_N8S2489C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void ABISELECT(_ZThn3360_N8S2489C10D0Ev,_ZThn1864_N8S2489C10D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C108S2489C19__8S2489C17[] = {
  0,
  ABISELECT(-3360,-1864),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(-3360,-1864),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C108S2489C19__8S2489C17[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-4000,-2224),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A2__8S2489C17[] = {
  ABISELECT(3072,1684),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev)();
extern void ABISELECT(_ZThn3360_N8S2489C19D1Ev,_ZThn1864_N8S2489C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev)();
extern void ABISELECT(_ZThn3360_N8S2489C19D0Ev,_ZThn1864_N8S2489C19D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C19__A__8S2489C17[] = {
  0,
  ABISELECT(-3360,-1864),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(-3360,-1864),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C19__A__8S2489C17[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-3616,-2020),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C19__A__8S2489C17[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-4000,-2224),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A__8S2489C19__A__8S2489C17[] = {
  ABISELECT(3072,1684),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C21D1Ev();
extern void _ZN8S2489C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C21__8S2489C17[] = {
  ABISELECT(69136,38476),
  ABISELECT(1392,768),
  ABISELECT(752,408),
  ABISELECT(880,492),
  ABISELECT(1008,564),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN8S2489C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C21D0Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C21__8S2489C17[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-1008,-564),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev)();
extern void ABISELECT(_ZThn752_N8S2489C21D1Ev,_ZThn408_N8S2489C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev)();
extern void ABISELECT(_ZThn752_N8S2489C21D0Ev,_ZThn408_N8S2489C21D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C21__8S2489C17[] = {
  0,
  ABISELECT(-752,-408),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(-752,-408),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C21__8S2489C17[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-1392,-768),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev)();
extern void ABISELECT(_ZThn69136_N8S2489C21D1Ev,_ZThn38476_N8S2489C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev)();
extern void ABISELECT(_ZThn69136_N8S2489C21D0Ev,_ZThn38476_N8S2489C21D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__8S2489C21__8S2489C17[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-69136,-38476),
  ABISELECT(-67744,-37708),
  ABISELECT(-68384,-38068),
  ABISELECT(-68256,-37984),
  ABISELECT(-68128,-37912),
  ABISELECT(-69136,-38476),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A2__8S2489C21__8S2489C17[] = {
  ABISELECT(-68672,-38248),
  ABISELECT(-69552,-38740),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C8D1Ev();
extern void _ZN7S2489C8D0Ev();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C17[] = {
  ABISELECT(256,156),
  ABISELECT(128,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C8__8S2489C17[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-256,-156),
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C17[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C17[] = {
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C5[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C67S2489C5__A1__8S2489C17[] = {
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C20D1Ev();
extern void _ZN8S2489C20D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C17[] = {
  ABISELECT(52208,29124),
  ABISELECT(-1568,-868),
  ABISELECT(-2208,-1228),
  ABISELECT(-2080,-1144),
  ABISELECT(-1952,-1072),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN8S2489C20D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C20D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN7S2489C9D1Ev();
extern void _ZN7S2489C9D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C98S2489C20__8S2489C17[] = {
  ABISELECT(-1568,-868),
  ABISELECT(-2208,-1228),
  ABISELECT(-2080,-1144),
  ABISELECT(-1952,-1072),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C107S2489C98S2489C20__A1__8S2489C17[] = {
  ABISELECT(-1568,-868),
  ABISELECT(-2208,-1228),
  ABISELECT(-2080,-1144),
  ABISELECT(-1952,-1072),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C107S2489C98S2489C20__A1__8S2489C17[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(1952,1072),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C107S2489C98S2489C20__A1__8S2489C17[] = {
  0,
  ABISELECT(2208,1228),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(2208,1228),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C107S2489C98S2489C20__A1__8S2489C17[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(1568,868),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C98S2489C20__8S2489C17[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(1952,1072),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__7S2489C98S2489C20__8S2489C17[] = {
  0,
  ABISELECT(2208,1228),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(2208,1228),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__7S2489C98S2489C20__8S2489C17[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(1568,868),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C20__8S2489C17[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(1568,868),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A1__8S2489C20__8S2489C17[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(1952,1072),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C20D1Ev,_ZTv0_n20_N8S2489C20D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C20D0Ev,_ZTv0_n20_N8S2489C20D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C20__8S2489C17[] = {
  0,
  ABISELECT(2208,1228),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(2208,1228),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C20D1Ev,_ZTv0_n20_N8S2489C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C20D0Ev,_ZTv0_n20_N8S2489C20D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C20__8S2489C17[] = {
  0,
  ABISELECT(-52208,-29124),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void _ZN8S2489C19D1Ev();
extern void _ZN8S2489C19D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C17[] = {
  ABISELECT(-67744,-37708),
  ABISELECT(-68384,-38068),
  ABISELECT(-68256,-37984),
  ABISELECT(-68128,-37912),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN8S2489C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C108S2489C19__A2__8S2489C17[] = {
  ABISELECT(-67744,-37708),
  ABISELECT(-68384,-38068),
  ABISELECT(-68256,-37984),
  ABISELECT(-68128,-37912),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C108S2489C19__A2__8S2489C17[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(68128,37912),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C108S2489C19__A2__8S2489C17[] = {
  0,
  ABISELECT(68384,38068),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(68384,38068),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C108S2489C19__A2__8S2489C17[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(67744,37708),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C17[] = {
  ABISELECT(-68672,-38248),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C19__A1__8S2489C17[] = {
  0,
  ABISELECT(68384,38068),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(68384,38068),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C19__A1__8S2489C17[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(68128,37912),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C19__A1__8S2489C17[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(67744,37708),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A__8S2489C19__A1__8S2489C17[] = {
  ABISELECT(-68672,-38248),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
static  VTT_ENTRY vtt_S2489C17[] = {
  {&(_ZTV8S2489C17[9]),  9,108},
  {&(_tg__ZTV8S2489C19__A__8S2489C17[6]),  6,12},
  {&(_tg__ZTV8S2489C108S2489C19__8S2489C17[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C108S2489C19__8S2489C17[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C108S2489C19__8S2489C17[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C108S2489C19__8S2489C17[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C19__A2__8S2489C17[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C19__A__8S2489C17[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C19__A__8S2489C17[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C19__A__8S2489C17[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A__8S2489C19__A__8S2489C17[3]),  3,5},
  {&(_tg__ZTV8S2489C21__8S2489C17[7]),  7,9},
  {&(_tg__ZTV7S2489C6__8S2489C21__8S2489C17[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C21__8S2489C17[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C21__8S2489C17[6]),  6,9},
  {&(_tg__ZTV8S2489C19__8S2489C21__8S2489C17[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A2__8S2489C21__8S2489C17[3]),  3,5},
  {&(_ZTV8S2489C17[19]),  19,108},
  {&(_ZTV8S2489C17[45]),  45,108},
  {&(_ZTV8S2489C17[53]),  53,108},
  {&(_ZTV8S2489C17[61]),  61,108},
  {&(_ZTV8S2489C17[28]),  28,108},
  {&(_ZTV8S2489C17[75]),  75,108},
  {&(_ZTV8S2489C17[83]),  83,108},
  {&(_ZTV8S2489C17[37]),  37,108},
  {&(_ZTV8S2489C17[97]),  97,108},
  {&(_ZTV8S2489C17[106]),  106,108},
  {&(_tg__ZTV7S2489C8__8S2489C17[4]),  4,7},
  {&(_tg__ZTV7S2489C6__7S2489C8__8S2489C17[5]),  5,7},
  {&(_tg__ZTV7S2489C6__8S2489C17[3]),  3,5},
  {&(_tg__ZTV7S2489C5__8S2489C17[3]),  3,6},
  {&(_tg__ZTV7S2489C67S2489C5__A1__8S2489C17[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C17[7]),  7,12},
  {&(_tg__ZTV7S2489C98S2489C20__8S2489C17[6]),  6,11},
  {&(_tg__ZTV8S2489C107S2489C98S2489C20__A1__8S2489C17[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C107S2489C98S2489C20__A1__8S2489C17[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C107S2489C98S2489C20__A1__8S2489C17[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C107S2489C98S2489C20__A1__8S2489C17[6]),  6,9},
  {&(_tg__ZTV7S2489C6__7S2489C98S2489C20__8S2489C17[5]),  5,7},
  {&(_tg__ZTV7S2489C8__7S2489C98S2489C20__8S2489C17[6]),  6,9},
  {&(_tg__ZTV7S2489C5__7S2489C98S2489C20__8S2489C17[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C20__8S2489C17[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A1__8S2489C20__8S2489C17[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C20__8S2489C17[6]),  6,9},
  {&(_tg__ZTV8S2489C13__8S2489C20__8S2489C17[3]),  3,4},
  {&(_tg__ZTV8S2489C19__A1__8S2489C17[6]),  6,12},
  {&(_tg__ZTV8S2489C108S2489C19__A2__8S2489C17[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C108S2489C19__A2__8S2489C17[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C108S2489C19__A2__8S2489C17[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C108S2489C19__A2__8S2489C17[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C17[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C19__A1__8S2489C17[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C19__A1__8S2489C17[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C19__A1__8S2489C17[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A__8S2489C19__A1__8S2489C17[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2489C17[];
extern  VTBL_ENTRY _ZTV8S2489C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C17[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn69136_N8S2489C21D0Ev,_ZThn38476_N8S2489C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn69136_N8S2489C21D1Ev,_ZThn38476_N8S2489C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S2489C21D0Ev,_ZThn408_N8S2489C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S2489C21D1Ev,_ZThn408_N8S2489C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N8S2489C19D0Ev,_ZThn1864_N8S2489C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N8S2489C19D1Ev,_ZThn1864_N8S2489C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N8S2489C10D0Ev,_ZThn1864_N8S2489C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N8S2489C10D1Ev,_ZThn1864_N8S2489C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn71840_N8S2489C17D0Ev,_ZThn39976_N8S2489C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn71840_N8S2489C17D1Ev,_ZThn39976_N8S2489C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5664_N8S2489C17D0Ev,_ZThn3136_N8S2489C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5664_N8S2489C17D1Ev,_ZThn3136_N8S2489C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N8S2489C17D0Ev,_ZThn1908_N8S2489C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N8S2489C17D1Ev,_ZThn1908_N8S2489C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2489C17 = {  "S2489C17", // class name
  bases_S2489C17, 24,
  &(vtc_S2489C17[0]), // expected_vtbl_contents
  &(vtt_S2489C17[0]), // expected_vtt_contents
  ABISELECT(74448,41432), // object size
  NSPAIRA(_ZTI8S2489C17),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S2489C17),108, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2489C17),55, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2489C16  : virtual S2489C17 {
  char s2489c16f0;
  void *s2489c16f1;
  __tsi64 s2489c16f2;
  int s2489c16f3;
  int s2489c16f4;
  int s2489c16f5;
  void *s2489c16f6;
  __tsi64 s2489c16f7;
  ::S2489C2 s2489c16f8;
  long double s2489c16f9;
  __tsi64 s2489c16f10;
  int s2489c16f11;
  ~S2489C16(); // tgen
  S2489C16(); // tgen
};
//SIG(-1 S2489C16) C1{ VBC2{ BC3{ vd m FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi}} BC5{ VBC6{ VBC7{ m Fc Fi FL FU4 Fs FL:12 FL Fi} VBC8{ VBC7 v1 v2 Fp Fp Fi Fi FU9{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU9 Fp FL:3 FC7 FL FU9} vd v3 FL FL FL FL Fi FU9 Fc[10] Fi} BC10{ BC7 VBC8 VBC6 VBC11{ BC7 BC8 v4 Fp FD FC7[7] FD FU4 Fs FL FL} vd v5 Fc Fi[7] Fl[5] FL FL FL FU12{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} BC7 BC8 vd v6 v7 v8 FU9 Fi Fl Fc Fp FC11 Fs} VBC13{ VBC11 VBC8 VBC6 BC14{ BC10 vd v9 v10 Fp Fp Fp Fi FC15{} FL FL} VBC16{ v11 FD FC17{ VBC11 VBC6 Fi Fp Fi FU9}[6] Fc Fp Fp Fi[6] Fi Fp FL Fp Fi Fp Fp} vd Fc Fs[3] FC18{ BC7 VBC8 VBC6 VBC11 VBC5 vd FL Fi Fp Fp FL}[10] FC11 FL FL:5 Fi Fp[6] FL[2] FL Fi} BC18 vd v12 v13 Fi FD Fl Fc:3 Fp FC8} Fc Fp FL Fi Fi Fi Fp FL FC19{ BC7 VBC11 VBC6 BC14 vd FD} FD FL Fi}


S2489C16 ::~S2489C16(){ note_dtor("S2489C16", this);} // tgen
S2489C16 ::S2489C16(){ note_ctor("S2489C16", this);} // tgen

static void Test_S2489C16()
{
  extern Class_Descriptor cd_S2489C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4828,10761)];
    init_test(&cd_S2489C16, buf);
    S2489C16 *dp, &lv = *(dp=new (buf) S2489C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(77232,43040), "sizeof(S2489C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C16)");
    check_base_class_offset(lv, (S2489C18*)(S2489C17*), ABISELECT(2784,1608), "S2489C16");
    check_base_class_offset(lv, (S2489C3*)(S2489C8*), ABISELECT(6368,3600), "S2489C16");
    /*is_ambiguous_... S2489C16::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*), ABISELECT(6368,3600), "S2489C16");
    check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C5*), ABISELECT(6368,3600), "S2489C16");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C19*)(S2489C17*), ABISELECT(6368,3600), "S2489C16");
    /*is_ambiguous_... S2489C16::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C19*), ABISELECT(6368,3600), "S2489C16");
    check_base_class_offset(lv, (S2489C6*)(S2489C8*), ABISELECT(6496,3672), "S2489C16");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(6496,3672), "S2489C16");
    /*is_ambiguous_... S2489C20::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C20*), ABISELECT(6496,3672), "S2489C16");
    /*is_ambiguous_... S2489C10::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(6496,3672), "S2489C16");
    /*is_ambiguous_... S2489C21::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C21*)(S2489C17*), ABISELECT(6496,3672), "S2489C16");
    /*is_ambiguous_... S2489C16::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C19*), ABISELECT(6496,3672), "S2489C16");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C19*)(S2489C17*), ABISELECT(6240,3516), "S2489C16");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(6240,3516), "S2489C16");
    check_base_class_offset(lv, (S2489C8*)(S2489C20*), ABISELECT(6240,3516), "S2489C16");
    check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(6240,3516), "S2489C16");
    check_base_class_offset(lv, (S2489C8*)(S2489C21*)(S2489C17*), ABISELECT(6240,3516), "S2489C16");
    /*is_ambiguous_... S2489C16::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C19*), ABISELECT(6240,3516), "S2489C16");
    /*is_ambiguous_... S2489C16::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C19*), ABISELECT(6240,3516), "S2489C16");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(2896,1656), "S2489C16");
    /*is_ambiguous_... S2489C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C5*), ABISELECT(7264,4080), "S2489C16");
    check_base_class_offset(lv, (S2489C6*)(S2489C5*), ABISELECT(6880,3876), "S2489C16");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(6880,3876), "S2489C16");
    check_base_class_offset(lv, (S2489C5*)(S2489C20*), ABISELECT(6880,3876), "S2489C16");
    check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(6880,3876), "S2489C16");
    check_base_class_offset(lv, (S2489C5*)(S2489C21*)(S2489C17*), ABISELECT(6880,3876), "S2489C16");
    /*is_ambiguous_... S2489C16::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C19*), ABISELECT(6880,3876), "S2489C16");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(2880,1652), "S2489C16");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C19*)(S2489C17*), ABISELECT(3168,1844), "S2489C16");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C19*)(S2489C17*), ABISELECT(3296,1916), "S2489C16");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C19*)(S2489C17*), ABISELECT(2880,1652), "S2489C16");
    /*is_ambiguous_... S2489C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(8464,4748), "S2489C16");
    check_base_class_offset(lv, (S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(8448,4744), "S2489C16");
    check_base_class_offset(lv, (S2489C9*)(S2489C20*), ABISELECT(8448,4744), "S2489C16");
    check_base_class_offset(lv, (S2489C13*)(S2489C20*), ABISELECT(60656,33868), "S2489C16");
    check_base_class_offset(lv, (S2489C20*)(S2489C17*), ABISELECT(8448,4744), "S2489C16");
    /*is_ambiguous_... S2489C21::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C21*)(S2489C17*), ABISELECT(5504,3112), "S2489C16");
    /*is_ambiguous_... S2489C16::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C19*), ABISELECT(74640,41588), "S2489C16");
    /*is_ambiguous_... S2489C16::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C10*)(S2489C19*), ABISELECT(74624,41584), "S2489C16");
    /*is_ambiguous_... S2489C16::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C19*), ABISELECT(74912,41776), "S2489C16");
    /*is_ambiguous_... S2489C16::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C19*), ABISELECT(75040,41848), "S2489C16");
    check_base_class_offset(lv, (S2489C19*)(S2489C21*)(S2489C17*), ABISELECT(74624,41584), "S2489C16");
    check_base_class_offset(lv, (S2489C21*)(S2489C17*), ABISELECT(5488,3108), "S2489C16");
    check_base_class_offset(lv, (S2489C17*), ABISELECT(2784,1608), "S2489C16");
    check_field_offset(lv, s2489c16f0, ABISELECT(8,4), "S2489C16.s2489c16f0");
    check_field_offset(lv, s2489c16f1, ABISELECT(16,8), "S2489C16.s2489c16f1");
    check_field_offset(lv, s2489c16f2, ABISELECT(24,12), "S2489C16.s2489c16f2");
    check_field_offset(lv, s2489c16f3, ABISELECT(32,20), "S2489C16.s2489c16f3");
    check_field_offset(lv, s2489c16f4, ABISELECT(36,24), "S2489C16.s2489c16f4");
    check_field_offset(lv, s2489c16f5, ABISELECT(40,28), "S2489C16.s2489c16f5");
    check_field_offset(lv, s2489c16f6, ABISELECT(48,32), "S2489C16.s2489c16f6");
    check_field_offset(lv, s2489c16f7, ABISELECT(56,36), "S2489C16.s2489c16f7");
    check_field_offset(lv, s2489c16f8, ABISELECT(64,44), "S2489C16.s2489c16f8");
    check_field_offset(lv, s2489c16f9, ABISELECT(2752,1584), "S2489C16.s2489c16f9");
    check_field_offset(lv, s2489c16f10, ABISELECT(2768,1596), "S2489C16.s2489c16f10");
    check_field_offset(lv, s2489c16f11, ABISELECT(2776,1604), "S2489C16.s2489c16f11");
    test_class_info(&lv, &cd_S2489C16);
    dp->~S2489C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2489C16(Test_S2489C16, "S2489C16", ABISELECT(77232,43040));

#else // __cplusplus

extern void _ZN8S2489C16C1Ev();
extern void _ZN8S2489C16D1Ev();
Name_Map name_map_S2489C16[] = {
  NSPAIR(_ZN8S2489C16C1Ev),
  NSPAIR(_ZN8S2489C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C8;
extern VTBL_ENTRY _ZTI7S2489C8[];
extern  VTBL_ENTRY _ZTV7S2489C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C5;
extern VTBL_ENTRY _ZTI7S2489C5[];
extern  VTBL_ENTRY _ZTV7S2489C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C5[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C19;
extern VTBL_ENTRY _ZTI8S2489C19[];
extern  VTBL_ENTRY _ZTV8S2489C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C19[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C9;
extern VTBL_ENTRY _ZTI7S2489C9[];
extern  VTBL_ENTRY _ZTV7S2489C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C9[];
extern Class_Descriptor cd_S2489C13;
extern VTBL_ENTRY _ZTI8S2489C13[];
extern  VTBL_ENTRY _ZTV8S2489C13[];
extern Class_Descriptor cd_S2489C20;
extern VTBL_ENTRY _ZTI8S2489C20[];
extern  VTBL_ENTRY _ZTV8S2489C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C20[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C19;
extern VTBL_ENTRY _ZTI8S2489C19[];
extern  VTBL_ENTRY _ZTV8S2489C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C19[];
extern Class_Descriptor cd_S2489C21;
extern VTBL_ENTRY _ZTI8S2489C21[];
extern  VTBL_ENTRY _ZTV8S2489C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C21[];
extern Class_Descriptor cd_S2489C17;
extern VTBL_ENTRY _ZTI8S2489C17[];
extern  VTBL_ENTRY _ZTV8S2489C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C17[];
static Base_Class bases_S2489C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C18,    ABISELECT(2784,1608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(6368,3600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2489C6,    ABISELECT(6496,3672), //bcp->offset
    69, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2489C8,    ABISELECT(6240,3516), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(2896,1656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(7264,4080), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(6880,3876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C5,    ABISELECT(6880,3876), //bcp->offset
    76, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2489C10,    ABISELECT(2880,1652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(3168,1844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(3296,1916), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2489C19,    ABISELECT(2880,1652), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(8464,4748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(8448,4744), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2489C9,    ABISELECT(8448,4744), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2489C13,    ABISELECT(60656,33868), //bcp->offset
    101, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2489C20,    ABISELECT(8448,4744), //bcp->offset
    85, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(5504,3112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(74640,41588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(74624,41584), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(74912,41776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(75040,41848), //bcp->offset
    124, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2489C19,    ABISELECT(74624,41584), //bcp->offset
    105, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S2489C21,    ABISELECT(5488,3108), //bcp->offset
    51, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2489C17,    ABISELECT(2784,1608), //bcp->offset
    12, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2489C16[];
extern void _ZN8S2489C16D1Ev();
extern void _ZN8S2489C16D0Ev();
extern void ABISELECT(_ZTv0_n80_N8S2489C16D1Ev,_ZTv0_n40_N8S2489C16D1Ev)();
extern void ABISELECT(_ZThn2784_N8S2489C16D1Ev,_ZThn1608_N8S2489C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S2489C16D0Ev,_ZTv0_n40_N8S2489C16D0Ev)();
extern void ABISELECT(_ZThn2784_N8S2489C16D0Ev,_ZThn1608_N8S2489C16D0Ev)() __attribute__((weak));
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
extern void ABISELECT(_ZTvn96_n80_N8S2489C16D1Ev,_ZTvn44_n40_N8S2489C16D1Ev)();
extern void ABISELECT(_ZTvn96_n80_N8S2489C16D0Ev,_ZTvn44_n40_N8S2489C16D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void ABISELECT(_ZTvn2704_n80_N8S2489C16D1Ev,_ZTvn1500_n40_N8S2489C16D1Ev)();
extern void ABISELECT(_ZTvn2704_n80_N8S2489C16D0Ev,_ZTvn1500_n40_N8S2489C16D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C16D1Ev,_ZTv0_n20_N8S2489C16D1Ev)();
extern void ABISELECT(_ZThn6240_N8S2489C16D1Ev,_ZThn3516_N8S2489C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C16D0Ev,_ZTv0_n20_N8S2489C16D0Ev)();
extern void ABISELECT(_ZThn6240_N8S2489C16D0Ev,_ZThn3516_N8S2489C16D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S2489C16D1Ev,_ZTv0_n32_N8S2489C16D1Ev)();
extern void ABISELECT(_ZThn8448_N8S2489C16D1Ev,_ZThn4744_N8S2489C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2489C16D0Ev,_ZTv0_n32_N8S2489C16D0Ev)();
extern void ABISELECT(_ZThn8448_N8S2489C16D0Ev,_ZThn4744_N8S2489C16D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
extern void _ZN8S2489C133v11Ev();
extern void ABISELECT(_ZTv0_n56_N8S2489C16D1Ev,_ZTv0_n28_N8S2489C16D1Ev)();
extern void ABISELECT(_ZThn74624_N8S2489C16D1Ev,_ZThn41584_N8S2489C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C16D0Ev,_ZTv0_n28_N8S2489C16D0Ev)();
extern void ABISELECT(_ZThn74624_N8S2489C16D0Ev,_ZThn41584_N8S2489C16D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY vtc_S2489C16[] = {
  ABISELECT(74624,41584),
  ABISELECT(60656,33868),
  ABISELECT(8448,4744),
  ABISELECT(6880,3876),
  ABISELECT(6496,3672),
  ABISELECT(6368,3600),
  ABISELECT(6240,3516),
  ABISELECT(2784,1608),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&_ZN8S2489C16D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C16D0Ev,
  ABISELECT(512,308),
  ABISELECT(512,308),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-2784,-1608),
  ABISELECT(71840,39976),
  ABISELECT(57872,32260),
  ABISELECT(5664,3136),
  ABISELECT(4096,2268),
  ABISELECT(3712,2064),
  ABISELECT(3584,1992),
  ABISELECT(3456,1908),
  ABISELECT(-2784,-1608),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2489C16D1Ev,_ZTv0_n40_N8S2489C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2489C16D0Ev,_ZTv0_n40_N8S2489C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
  ABISELECT(4000,2224),
  ABISELECT(3360,1864),
  ABISELECT(3488,1948),
  ABISELECT(3616,2020),
  ABISELECT(-2880,-1652),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2489C16D1Ev,_ZTvn44_n40_N8S2489C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2489C16D0Ev,_ZTvn44_n40_N8S2489C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
  ABISELECT(3072,1684),
  ABISELECT(-3296,-1916),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  ABISELECT(69136,38476),
  ABISELECT(1392,768),
  ABISELECT(752,408),
  ABISELECT(880,492),
  ABISELECT(1008,564),
  ABISELECT(-5488,-3108),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2489C16D1Ev,_ZTvn1500_n40_N8S2489C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2489C16D0Ev,_ZTvn1500_n40_N8S2489C16D0Ev),
  0,
  ABISELECT(-6240,-3516),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(-6240,-3516),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C16D1Ev,_ZTv0_n20_N8S2489C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C16D0Ev,_ZTv0_n20_N8S2489C16D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-6496,-3672),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-6880,-3876),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
  0,
  0,
  0,
  ABISELECT(-8448,-4744),
  ABISELECT(52208,29124),
  ABISELECT(-1568,-868),
  ABISELECT(-2208,-1228),
  ABISELECT(-2080,-1144),
  ABISELECT(-1952,-1072),
  ABISELECT(-8448,-4744),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C16D1Ev,_ZTv0_n32_N8S2489C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C16D0Ev,_ZTv0_n32_N8S2489C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
  0,
  ABISELECT(-60656,-33868),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-74624,-41584),
  ABISELECT(-67744,-37708),
  ABISELECT(-68384,-38068),
  ABISELECT(-68256,-37984),
  ABISELECT(-68128,-37912),
  ABISELECT(-74624,-41584),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C16D1Ev,_ZTv0_n28_N8S2489C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C16D0Ev,_ZTv0_n28_N8S2489C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
  ABISELECT(-68672,-38248),
  ABISELECT(-75040,-41848),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S2489C16[];
extern void _ZN8S2489C17D1Ev();
extern void _ZN8S2489C17D0Ev();
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C17__8S2489C16[] = {
  ABISELECT(71840,39976),
  ABISELECT(57872,32260),
  ABISELECT(5664,3136),
  ABISELECT(4096,2268),
  ABISELECT(3712,2064),
  ABISELECT(3584,1992),
  ABISELECT(3456,1908),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN8S2489C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C17D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
};
extern void _ZN8S2489C19D1Ev();
extern void _ZN8S2489C19D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C198S2489C17__8S2489C16[] = {
  ABISELECT(4000,2224),
  ABISELECT(3360,1864),
  ABISELECT(3488,1948),
  ABISELECT(3616,2020),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN8S2489C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C108S2489C198S2489C17__8S2489C16[] = {
  ABISELECT(4000,2224),
  ABISELECT(3360,1864),
  ABISELECT(3488,1948),
  ABISELECT(3616,2020),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C108S2489C198S2489C17__8S2489C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-3616,-2020),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZThn3360_N8S2489C10D1Ev,_ZThn1864_N8S2489C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void ABISELECT(_ZThn3360_N8S2489C10D0Ev,_ZThn1864_N8S2489C10D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C108S2489C198S2489C17__8S2489C16[] = {
  0,
  ABISELECT(-3360,-1864),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(-3360,-1864),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C108S2489C198S2489C17__8S2489C16[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-4000,-2224),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C198S2489C17__A2__8S2489C16[] = {
  ABISELECT(3072,1684),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev)();
extern void ABISELECT(_ZThn3360_N8S2489C19D1Ev,_ZThn1864_N8S2489C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev)();
extern void ABISELECT(_ZThn3360_N8S2489C19D0Ev,_ZThn1864_N8S2489C19D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C198S2489C17__8S2489C16[] = {
  0,
  ABISELECT(-3360,-1864),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(-3360,-1864),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C198S2489C17__8S2489C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-3616,-2020),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C198S2489C17__8S2489C16[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-4000,-2224),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A__8S2489C198S2489C17__8S2489C16[] = {
  ABISELECT(3072,1684),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C21D1Ev();
extern void _ZN8S2489C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C218S2489C17__8S2489C16[] = {
  ABISELECT(69136,38476),
  ABISELECT(1392,768),
  ABISELECT(752,408),
  ABISELECT(880,492),
  ABISELECT(1008,564),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN8S2489C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C21D0Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C218S2489C17__8S2489C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-1008,-564),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev)();
extern void ABISELECT(_ZThn752_N8S2489C21D1Ev,_ZThn408_N8S2489C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev)();
extern void ABISELECT(_ZThn752_N8S2489C21D0Ev,_ZThn408_N8S2489C21D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C218S2489C17__8S2489C16[] = {
  0,
  ABISELECT(-752,-408),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(-752,-408),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C218S2489C17__8S2489C16[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-1392,-768),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev)();
extern void ABISELECT(_ZThn69136_N8S2489C21D1Ev,_ZThn38476_N8S2489C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev)();
extern void ABISELECT(_ZThn69136_N8S2489C21D0Ev,_ZThn38476_N8S2489C21D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__8S2489C218S2489C17__8S2489C16[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-69136,-38476),
  ABISELECT(-67744,-37708),
  ABISELECT(-68384,-38068),
  ABISELECT(-68256,-37984),
  ABISELECT(-68128,-37912),
  ABISELECT(-69136,-38476),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A2__8S2489C218S2489C17__8S2489C16[] = {
  ABISELECT(-68672,-38248),
  ABISELECT(-69552,-38740),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZThn96_N8S2489C17D1Ev,_ZThn44_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S2489C17D0Ev,_ZThn44_N8S2489C17D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A__8S2489C17__8S2489C16[] = {
  ABISELECT(4000,2224),
  ABISELECT(3360,1864),
  ABISELECT(3488,1948),
  ABISELECT(3616,2020),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C17D1Ev,_ZThn44_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C17D0Ev,_ZThn44_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn3456_N8S2489C17D1Ev,_ZThn1908_N8S2489C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev)();
extern void ABISELECT(_ZThn3456_N8S2489C17D0Ev,_ZThn1908_N8S2489C17D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C17__8S2489C16[] = {
  0,
  ABISELECT(-3456,-1908),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(-3456,-1908),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C17__8S2489C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-3712,-2064),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C17__8S2489C16[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-4096,-2268),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A2__8S2489C17__8S2489C16[] = {
  ABISELECT(3072,1684),
  ABISELECT(-512,-308),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn5664_N8S2489C17D1Ev,_ZThn3136_N8S2489C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev)();
extern void ABISELECT(_ZThn5664_N8S2489C17D0Ev,_ZThn3136_N8S2489C17D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C17__8S2489C16[] = {
  0,
  0,
  0,
  ABISELECT(-5664,-3136),
  ABISELECT(52208,29124),
  ABISELECT(-1568,-868),
  ABISELECT(-2208,-1228),
  ABISELECT(-2080,-1144),
  ABISELECT(-1952,-1072),
  ABISELECT(-5664,-3136),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C17__8S2489C16[] = {
  0,
  ABISELECT(-57872,-32260),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void ABISELECT(_ZThn2704_N8S2489C17D1Ev,_ZThn1500_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2489C17D0Ev,_ZThn1500_N8S2489C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2489C21__8S2489C17__8S2489C16[] = {
  ABISELECT(69136,38476),
  ABISELECT(1392,768),
  ABISELECT(752,408),
  ABISELECT(880,492),
  ABISELECT(1008,564),
  ABISELECT(-2704,-1500),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C17D1Ev,_ZThn1500_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C17D0Ev,_ZThn1500_N8S2489C17D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn71840_N8S2489C17D1Ev,_ZThn39976_N8S2489C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev)();
extern void ABISELECT(_ZThn71840_N8S2489C17D0Ev,_ZThn39976_N8S2489C17D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C17__8S2489C16[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-71840,-39976),
  ABISELECT(-67744,-37708),
  ABISELECT(-68384,-38068),
  ABISELECT(-68256,-37984),
  ABISELECT(-68128,-37912),
  ABISELECT(-71840,-39976),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C17__8S2489C16[] = {
  ABISELECT(-68672,-38248),
  ABISELECT(-72256,-40240),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C8D1Ev();
extern void _ZN7S2489C8D0Ev();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C16[] = {
  ABISELECT(256,156),
  ABISELECT(128,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C8__8S2489C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-256,-156),
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C16[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C16[] = {
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C5[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C67S2489C5__A1__8S2489C16[] = {
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C20D1Ev();
extern void _ZN8S2489C20D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C16[] = {
  ABISELECT(52208,29124),
  ABISELECT(-1568,-868),
  ABISELECT(-2208,-1228),
  ABISELECT(-2080,-1144),
  ABISELECT(-1952,-1072),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN8S2489C20D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C20D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN7S2489C9D1Ev();
extern void _ZN7S2489C9D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C98S2489C20__8S2489C16[] = {
  ABISELECT(-1568,-868),
  ABISELECT(-2208,-1228),
  ABISELECT(-2080,-1144),
  ABISELECT(-1952,-1072),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C107S2489C98S2489C20__A1__8S2489C16[] = {
  ABISELECT(-1568,-868),
  ABISELECT(-2208,-1228),
  ABISELECT(-2080,-1144),
  ABISELECT(-1952,-1072),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C107S2489C98S2489C20__A1__8S2489C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(1952,1072),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C107S2489C98S2489C20__A1__8S2489C16[] = {
  0,
  ABISELECT(2208,1228),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(2208,1228),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C107S2489C98S2489C20__A1__8S2489C16[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(1568,868),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C98S2489C20__8S2489C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(1952,1072),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__7S2489C98S2489C20__8S2489C16[] = {
  0,
  ABISELECT(2208,1228),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(2208,1228),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__7S2489C98S2489C20__8S2489C16[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(1568,868),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C20__8S2489C16[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(1568,868),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A1__8S2489C20__8S2489C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(1952,1072),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C20D1Ev,_ZTv0_n20_N8S2489C20D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C20D0Ev,_ZTv0_n20_N8S2489C20D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C20__8S2489C16[] = {
  0,
  ABISELECT(2208,1228),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(2208,1228),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C20D1Ev,_ZTv0_n20_N8S2489C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C20D0Ev,_ZTv0_n20_N8S2489C20D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C20__8S2489C16[] = {
  0,
  ABISELECT(-52208,-29124),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void _ZN8S2489C19D1Ev();
extern void _ZN8S2489C19D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C16[] = {
  ABISELECT(-67744,-37708),
  ABISELECT(-68384,-38068),
  ABISELECT(-68256,-37984),
  ABISELECT(-68128,-37912),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN8S2489C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C108S2489C19__A2__8S2489C16[] = {
  ABISELECT(-67744,-37708),
  ABISELECT(-68384,-38068),
  ABISELECT(-68256,-37984),
  ABISELECT(-68128,-37912),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C108S2489C19__A2__8S2489C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(68128,37912),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C108S2489C19__A2__8S2489C16[] = {
  0,
  ABISELECT(68384,38068),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(68384,38068),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C108S2489C19__A2__8S2489C16[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(67744,37708),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C16[] = {
  ABISELECT(-68672,-38248),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C19__A1__8S2489C16[] = {
  0,
  ABISELECT(68384,38068),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(68384,38068),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C19__A1__8S2489C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(68128,37912),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C19__A1__8S2489C16[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(67744,37708),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A__8S2489C19__A1__8S2489C16[] = {
  ABISELECT(-68672,-38248),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
static  VTT_ENTRY vtt_S2489C16[] = {
  {&(_ZTV8S2489C16[10]),  10,129},
  {&(_ZTV8S2489C16[30]),  30,129},
  {&(_ZTV8S2489C16[40]),  40,129},
  {&(_ZTV8S2489C16[66]),  66,129},
  {&(_ZTV8S2489C16[74]),  74,129},
  {&(_ZTV8S2489C16[82]),  82,129},
  {&(_ZTV8S2489C16[49]),  49,129},
  {&(_ZTV8S2489C16[96]),  96,129},
  {&(_ZTV8S2489C16[104]),  104,129},
  {&(_ZTV8S2489C16[58]),  58,129},
  {&(_ZTV8S2489C16[118]),  118,129},
  {&(_ZTV8S2489C16[127]),  127,129},
  {&(_tg__ZTV8S2489C17__8S2489C16[9]),  9,13},
  {&(_tg__ZTV8S2489C198S2489C17__8S2489C16[6]),  6,12},
  {&(_tg__ZTV8S2489C108S2489C198S2489C17__8S2489C16[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C108S2489C198S2489C17__8S2489C16[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C108S2489C198S2489C17__8S2489C16[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C108S2489C198S2489C17__8S2489C16[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C198S2489C17__A2__8S2489C16[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C198S2489C17__8S2489C16[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C198S2489C17__8S2489C16[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C198S2489C17__8S2489C16[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A__8S2489C198S2489C17__8S2489C16[3]),  3,5},
  {&(_tg__ZTV8S2489C218S2489C17__8S2489C16[7]),  7,9},
  {&(_tg__ZTV7S2489C6__8S2489C218S2489C17__8S2489C16[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C218S2489C17__8S2489C16[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C218S2489C17__8S2489C16[6]),  6,9},
  {&(_tg__ZTV8S2489C19__8S2489C218S2489C17__8S2489C16[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A2__8S2489C218S2489C17__8S2489C16[3]),  3,5},
  {&(_tg__ZTV8S2489C19__A__8S2489C17__8S2489C16[6]),  6,12},
  {&(_tg__ZTV7S2489C8__8S2489C17__8S2489C16[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C17__8S2489C16[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C17__8S2489C16[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C19__A2__8S2489C17__8S2489C16[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C17__8S2489C16[11]),  11,16},
  {&(_tg__ZTV8S2489C13__8S2489C17__8S2489C16[3]),  3,4},
  {&(_tg__ZTV8S2489C21__8S2489C17__8S2489C16[7]),  7,9},
  {&(_tg__ZTV8S2489C19__A1__8S2489C17__8S2489C16[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C17__8S2489C16[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C16[4]),  4,7},
  {&(_tg__ZTV7S2489C6__7S2489C8__8S2489C16[5]),  5,7},
  {&(_tg__ZTV7S2489C6__8S2489C16[3]),  3,5},
  {&(_tg__ZTV7S2489C5__8S2489C16[3]),  3,6},
  {&(_tg__ZTV7S2489C67S2489C5__A1__8S2489C16[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C16[7]),  7,12},
  {&(_tg__ZTV7S2489C98S2489C20__8S2489C16[6]),  6,11},
  {&(_tg__ZTV8S2489C107S2489C98S2489C20__A1__8S2489C16[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C107S2489C98S2489C20__A1__8S2489C16[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C107S2489C98S2489C20__A1__8S2489C16[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C107S2489C98S2489C20__A1__8S2489C16[6]),  6,9},
  {&(_tg__ZTV7S2489C6__7S2489C98S2489C20__8S2489C16[5]),  5,7},
  {&(_tg__ZTV7S2489C8__7S2489C98S2489C20__8S2489C16[6]),  6,9},
  {&(_tg__ZTV7S2489C5__7S2489C98S2489C20__8S2489C16[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C20__8S2489C16[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A1__8S2489C20__8S2489C16[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C20__8S2489C16[6]),  6,9},
  {&(_tg__ZTV8S2489C13__8S2489C20__8S2489C16[3]),  3,4},
  {&(_tg__ZTV8S2489C19__A1__8S2489C16[6]),  6,12},
  {&(_tg__ZTV8S2489C108S2489C19__A2__8S2489C16[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C108S2489C19__A2__8S2489C16[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C108S2489C19__A2__8S2489C16[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C108S2489C19__A2__8S2489C16[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C16[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C19__A1__8S2489C16[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C19__A1__8S2489C16[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C19__A1__8S2489C16[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A__8S2489C19__A1__8S2489C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2489C16[];
extern  VTBL_ENTRY _ZTV8S2489C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C16[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn71840_N8S2489C17D0Ev,_ZThn39976_N8S2489C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn71840_N8S2489C17D1Ev,_ZThn39976_N8S2489C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5664_N8S2489C17D0Ev,_ZThn3136_N8S2489C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5664_N8S2489C17D1Ev,_ZThn3136_N8S2489C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N8S2489C17D0Ev,_ZThn1908_N8S2489C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N8S2489C17D1Ev,_ZThn1908_N8S2489C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn69136_N8S2489C21D0Ev,_ZThn38476_N8S2489C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn69136_N8S2489C21D1Ev,_ZThn38476_N8S2489C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S2489C21D0Ev,_ZThn408_N8S2489C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S2489C21D1Ev,_ZThn408_N8S2489C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N8S2489C19D0Ev,_ZThn1864_N8S2489C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N8S2489C19D1Ev,_ZThn1864_N8S2489C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N8S2489C10D0Ev,_ZThn1864_N8S2489C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N8S2489C10D1Ev,_ZThn1864_N8S2489C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C16D0Ev,_ZTv0_n28_N8S2489C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74624_N8S2489C16D0Ev,_ZThn41584_N8S2489C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C16D1Ev,_ZTv0_n28_N8S2489C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74624_N8S2489C16D1Ev,_ZThn41584_N8S2489C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C16D0Ev,_ZTv0_n32_N8S2489C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8448_N8S2489C16D0Ev,_ZThn4744_N8S2489C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C16D1Ev,_ZTv0_n32_N8S2489C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8448_N8S2489C16D1Ev,_ZThn4744_N8S2489C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C16D0Ev,_ZTv0_n20_N8S2489C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6240_N8S2489C16D0Ev,_ZThn3516_N8S2489C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C16D1Ev,_ZTv0_n20_N8S2489C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6240_N8S2489C16D1Ev,_ZThn3516_N8S2489C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2489C16D0Ev,_ZTv0_n40_N8S2489C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2784_N8S2489C16D0Ev,_ZThn1608_N8S2489C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2489C16D1Ev,_ZTv0_n40_N8S2489C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2784_N8S2489C16D1Ev,_ZThn1608_N8S2489C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2489C16 = {  "S2489C16", // class name
  bases_S2489C16, 25,
  &(vtc_S2489C16[0]), // expected_vtbl_contents
  &(vtt_S2489C16[0]), // expected_vtt_contents
  ABISELECT(77232,43040), // object size
  NSPAIRA(_ZTI8S2489C16),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S2489C16),129, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2489C16),67, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2489C23  : virtual S2489C10 , virtual S2489C13 , S2489C17 {
  void *s2489c23f0[6];
  int s2489c23f1;
  short s2489c23f2;
  ::S2489C12_nt s2489c23f3;
  ::S2489C2 s2489c23f4;
  void *s2489c23f5;
  int s2489c23f6;
  int s2489c23f7;
  char s2489c23f8;
  char s2489c23f9;
  ::S2489C4 s2489c23f10;
  virtual  ~S2489C23(); // _ZN8S2489C23D2Ev
  S2489C23(); // tgen
};
//SIG(-1 S2489C23) C1{ VBC2{ BC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC5{ VBC3 v1 v2 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 FL FU6} VBC7{ VBC3 VBC5 vd v3 FL FL FL FL Fi FU6 Fc[10] Fi} VBC8{ BC3 BC5 v4 Fp FD FC3[7] FD FU4 Fs FL FL} vd v5 Fc Fi[7] Fl[5] FL FL FL FU9{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} VBC10{ v6 FD FC11{ VBC8 VBC7 Fi Fp Fi FU6}[6] Fc Fp Fp Fi[6] Fi Fp FL Fp Fi Fp Fp} BC12{ BC13{ vd m FU4} BC14{ VBC7 BC2 BC3 BC5 vd v7 v8 v9 FU6 Fi Fl Fc Fp FC8 Fs} VBC15{ VBC8 VBC5 VBC7 BC16{ BC2 vd v10 v11 Fp Fp Fp Fi FC17{} FL FL} VBC10 vd Fc Fs[3] FC18{ BC3 VBC5 VBC7 VBC8 VBC14 vd FL Fi Fp Fp FL}[10] FC8 FL FL:5 Fi Fp[6] FL[2] FL Fi} BC18 vd v12 v13 Fi FD Fl Fc:3 Fp FC5} vd Fp[6] Fi Fs FC17 FC19{ BC3 VBC8 VBC7 BC16 vd FD} Fp Fi Fi Fc Fc FU4}


 S2489C23 ::~S2489C23(){ note_dtor("S2489C23", this);}
S2489C23 ::S2489C23(){ note_ctor("S2489C23", this);} // tgen

static void Test_S2489C23()
{
  extern Class_Descriptor cd_S2489C23;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4851,10814)];
    init_test(&cd_S2489C23, buf);
    S2489C23 *dp, &lv = *(dp=new (buf) S2489C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(77600,43252), "sizeof(S2489C23)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C23)");
    /*is_ambiguous_... S2489C23::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*), ABISELECT(6336,3540), "S2489C23");
    /*is_ambiguous_... S2489C23::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*), ABISELECT(6992,3932), "S2489C23");
    check_base_class_offset(lv, (S2489C3*)(S2489C8*), ABISELECT(6992,3932), "S2489C23");
    check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C5*), ABISELECT(6992,3932), "S2489C23");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C19*)(S2489C17*), ABISELECT(6992,3932), "S2489C23");
    /*is_ambiguous_... S2489C23::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C19*), ABISELECT(6992,3932), "S2489C23");
    /*is_ambiguous_... S2489C23::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*), ABISELECT(6608,3728), "S2489C23");
    check_base_class_offset(lv, (S2489C6*)(S2489C8*), ABISELECT(6608,3728), "S2489C23");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(6608,3728), "S2489C23");
    /*is_ambiguous_... S2489C20::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C20*), ABISELECT(6608,3728), "S2489C23");
    /*is_ambiguous_... S2489C10::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(6608,3728), "S2489C23");
    /*is_ambiguous_... S2489C21::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C21*)(S2489C17*), ABISELECT(6608,3728), "S2489C23");
    /*is_ambiguous_... S2489C23::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C19*), ABISELECT(6608,3728), "S2489C23");
    /*is_ambiguous_... S2489C23::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C10*), ABISELECT(7120,4004), "S2489C23");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C19*)(S2489C17*), ABISELECT(7120,4004), "S2489C23");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(7120,4004), "S2489C23");
    check_base_class_offset(lv, (S2489C8*)(S2489C20*), ABISELECT(7120,4004), "S2489C23");
    check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(7120,4004), "S2489C23");
    check_base_class_offset(lv, (S2489C8*)(S2489C21*)(S2489C17*), ABISELECT(7120,4004), "S2489C23");
    /*is_ambiguous_... S2489C23::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C19*), ABISELECT(7120,4004), "S2489C23");
    /*is_ambiguous_... S2489C23::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C19*), ABISELECT(7120,4004), "S2489C23");
    /*is_ambiguous_... S2489C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C5*), ABISELECT(7632,4292), "S2489C23");
    check_base_class_offset(lv, (S2489C6*)(S2489C5*), ABISELECT(7248,4088), "S2489C23");
    /*is_ambiguous_... S2489C23::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C10*), ABISELECT(7248,4088), "S2489C23");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(7248,4088), "S2489C23");
    check_base_class_offset(lv, (S2489C5*)(S2489C20*), ABISELECT(7248,4088), "S2489C23");
    check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(7248,4088), "S2489C23");
    check_base_class_offset(lv, (S2489C5*)(S2489C21*)(S2489C17*), ABISELECT(7248,4088), "S2489C23");
    /*is_ambiguous_... S2489C23::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C19*), ABISELECT(7248,4088), "S2489C23");
    /*is_ambiguous_... S2489C23::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C10*), ABISELECT(6320,3536), "S2489C23");
    check_base_class_offset(lv, (S2489C13*), ABISELECT(8816,4956), "S2489C23");
    check_base_class_offset(lv, (S2489C13*)(S2489C20*), ABISELECT(8816,4956), "S2489C23");
    check_base_class_offset(lv, (S2489C18*)(S2489C17*), 0, "S2489C23");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(112,48), "S2489C23");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(96,44), "S2489C23");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C19*)(S2489C17*), ABISELECT(384,236), "S2489C23");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C19*)(S2489C17*), ABISELECT(512,308), "S2489C23");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C19*)(S2489C17*), ABISELECT(96,44), "S2489C23");
    /*is_ambiguous_... S2489C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(22800,12676), "S2489C23");
    check_base_class_offset(lv, (S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(22784,12672), "S2489C23");
    check_base_class_offset(lv, (S2489C9*)(S2489C20*), ABISELECT(22784,12672), "S2489C23");
    check_base_class_offset(lv, (S2489C20*)(S2489C17*), ABISELECT(22784,12672), "S2489C23");
    /*is_ambiguous_... S2489C21::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C21*)(S2489C17*), ABISELECT(2720,1504), "S2489C23");
    /*is_ambiguous_... S2489C23::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C19*), ABISELECT(75008,41800), "S2489C23");
    /*is_ambiguous_... S2489C23::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C10*)(S2489C19*), ABISELECT(74992,41796), "S2489C23");
    /*is_ambiguous_... S2489C23::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C19*), ABISELECT(75280,41988), "S2489C23");
    /*is_ambiguous_... S2489C23::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C19*), ABISELECT(75408,42060), "S2489C23");
    check_base_class_offset(lv, (S2489C19*)(S2489C21*)(S2489C17*), ABISELECT(74992,41796), "S2489C23");
    check_base_class_offset(lv, (S2489C21*)(S2489C17*), ABISELECT(2704,1500), "S2489C23");
    check_base_class_offset(lv, (S2489C17*), 0, "S2489C23");
    check_field_offset(lv, s2489c23f0, ABISELECT(3456,1908), "S2489C23.s2489c23f0");
    check_field_offset(lv, s2489c23f1, ABISELECT(3504,1932), "S2489C23.s2489c23f1");
    check_field_offset(lv, s2489c23f2, ABISELECT(3508,1936), "S2489C23.s2489c23f2");
    check_field_offset(lv, s2489c23f3, ABISELECT(3510,1938), "S2489C23.s2489c23f3");
    check_field_offset(lv, s2489c23f4, ABISELECT(3520,1940), "S2489C23.s2489c23f4");
    check_field_offset(lv, s2489c23f5, ABISELECT(6208,3480), "S2489C23.s2489c23f5");
    check_field_offset(lv, s2489c23f6, ABISELECT(6216,3484), "S2489C23.s2489c23f6");
    check_field_offset(lv, s2489c23f7, ABISELECT(6220,3488), "S2489C23.s2489c23f7");
    check_field_offset(lv, s2489c23f8, ABISELECT(6224,3492), "S2489C23.s2489c23f8");
    check_field_offset(lv, s2489c23f9, ABISELECT(6225,3493), "S2489C23.s2489c23f9");
    check_field_offset(lv, s2489c23f10, ABISELECT(6240,3496), "S2489C23.s2489c23f10");
    test_class_info(&lv, &cd_S2489C23);
    dp->~S2489C23();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2489C23(Test_S2489C23, "S2489C23", ABISELECT(77600,43252));

#else // __cplusplus

extern void _ZN8S2489C23C1Ev();
extern void _ZN8S2489C23D2Ev();
Name_Map name_map_S2489C23[] = {
  NSPAIR(_ZN8S2489C23C1Ev),
  NSPAIR(_ZN8S2489C23D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C8;
extern VTBL_ENTRY _ZTI7S2489C8[];
extern  VTBL_ENTRY _ZTV7S2489C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C5;
extern VTBL_ENTRY _ZTI7S2489C5[];
extern  VTBL_ENTRY _ZTV7S2489C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C5[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C13;
extern VTBL_ENTRY _ZTI8S2489C13[];
extern  VTBL_ENTRY _ZTV8S2489C13[];
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C19;
extern VTBL_ENTRY _ZTI8S2489C19[];
extern  VTBL_ENTRY _ZTV8S2489C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C19[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C9;
extern VTBL_ENTRY _ZTI7S2489C9[];
extern  VTBL_ENTRY _ZTV7S2489C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C9[];
extern Class_Descriptor cd_S2489C20;
extern VTBL_ENTRY _ZTI8S2489C20[];
extern  VTBL_ENTRY _ZTV8S2489C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C20[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C19;
extern VTBL_ENTRY _ZTI8S2489C19[];
extern  VTBL_ENTRY _ZTV8S2489C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C19[];
extern Class_Descriptor cd_S2489C21;
extern VTBL_ENTRY _ZTI8S2489C21[];
extern  VTBL_ENTRY _ZTV8S2489C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C21[];
extern Class_Descriptor cd_S2489C17;
extern VTBL_ENTRY _ZTI8S2489C17[];
extern  VTBL_ENTRY _ZTV8S2489C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C17[];
static Base_Class bases_S2489C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(6336,3540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(6992,3932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2489C6,    ABISELECT(6608,3728), //bcp->offset
    51, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2489C8,    ABISELECT(7120,4004), //bcp->offset
    58, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(7632,4292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(7248,4088), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2489C5,    ABISELECT(7248,4088), //bcp->offset
    67, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C10,    ABISELECT(6320,3536), //bcp->offset
    40, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C13,    ABISELECT(8816,4956), //bcp->offset
    76, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(112,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(384,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(512,308), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2489C19,    ABISELECT(96,44), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(22800,12676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(22784,12672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2489C9,    ABISELECT(22784,12672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2489C20,    ABISELECT(22784,12672), //bcp->offset
    80, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(2720,1504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(75008,41800), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(74992,41796), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(75280,41988), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(75408,42060), //bcp->offset
    115, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2489C19,    ABISELECT(74992,41796), //bcp->offset
    96, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S2489C21,    ABISELECT(2704,1500), //bcp->offset
    31, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S2489C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2489C23[];
extern void _ZN8S2489C23D1Ev();
extern void _ZN8S2489C23D0Ev();
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
extern void ABISELECT(_ZThn96_N8S2489C23D1Ev,_ZThn44_N8S2489C23D1Ev)();
extern void ABISELECT(_ZThn96_N8S2489C23D0Ev,_ZThn44_N8S2489C23D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void ABISELECT(_ZThn2704_N8S2489C23D1Ev,_ZThn1500_N8S2489C23D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2489C23D0Ev,_ZThn1500_N8S2489C23D0Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev)();
extern void ABISELECT(_ZThn6320_N8S2489C23D1Ev,_ZThn3536_N8S2489C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev)();
extern void ABISELECT(_ZThn6320_N8S2489C23D0Ev,_ZThn3536_N8S2489C23D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S2489C23D1Ev,_ZTv0_n20_N8S2489C23D1Ev)();
extern void ABISELECT(_ZThn7120_N8S2489C23D1Ev,_ZThn4004_N8S2489C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C23D0Ev,_ZTv0_n20_N8S2489C23D0Ev)();
extern void ABISELECT(_ZThn7120_N8S2489C23D0Ev,_ZThn4004_N8S2489C23D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
extern void _ZN8S2489C133v11Ev();
extern void ABISELECT(_ZTv0_n64_N8S2489C23D1Ev,_ZTv0_n32_N8S2489C23D1Ev)();
extern void ABISELECT(_ZThn22784_N8S2489C23D1Ev,_ZThn12672_N8S2489C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2489C23D0Ev,_ZTv0_n32_N8S2489C23D0Ev)();
extern void ABISELECT(_ZThn22784_N8S2489C23D0Ev,_ZThn12672_N8S2489C23D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
extern void ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev)();
extern void ABISELECT(_ZThn74992_N8S2489C23D1Ev,_ZThn41796_N8S2489C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev)();
extern void ABISELECT(_ZThn74992_N8S2489C23D0Ev,_ZThn41796_N8S2489C23D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY vtc_S2489C23[] = {
  ABISELECT(6320,3536),
  ABISELECT(74992,41796),
  ABISELECT(8816,4956),
  ABISELECT(22784,12672),
  ABISELECT(7248,4088),
  ABISELECT(6608,3728),
  ABISELECT(6992,3932),
  ABISELECT(7120,4004),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN8S2489C23D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C23D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
  ABISELECT(7152,4044),
  ABISELECT(7024,3960),
  ABISELECT(6896,3888),
  ABISELECT(6512,3684),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C23D1Ev,_ZThn44_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C23D0Ev,_ZThn44_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
  ABISELECT(6480,3624),
  ABISELECT(-512,-308),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  ABISELECT(72288,40296),
  ABISELECT(4544,2588),
  ABISELECT(4416,2504),
  ABISELECT(4288,2432),
  ABISELECT(3904,2228),
  ABISELECT(-2704,-1500),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C23D1Ev,_ZThn1500_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C23D0Ev,_ZThn1500_N8S2489C23D0Ev),
  0,
  ABISELECT(-6320,-3536),
  ABISELECT(928,552),
  ABISELECT(800,468),
  ABISELECT(672,396),
  ABISELECT(288,192),
  ABISELECT(-6320,-3536),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-6608,-3728),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  0,
  ABISELECT(-7120,-4004),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-7120,-4004),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C23D1Ev,_ZTv0_n20_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C23D0Ev,_ZTv0_n20_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-7248,-4088),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
  0,
  ABISELECT(-8816,-4956),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
  0,
  0,
  0,
  ABISELECT(-22784,-12672),
  ABISELECT(-13968,-7716),
  ABISELECT(-15536,-8584),
  ABISELECT(-15664,-8668),
  ABISELECT(-15792,-8740),
  ABISELECT(-16176,-8944),
  ABISELECT(-22784,-12672),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C23D1Ev,_ZTv0_n32_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C23D0Ev,_ZTv0_n32_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-74992,-41796),
  ABISELECT(-67744,-37708),
  ABISELECT(-67872,-37792),
  ABISELECT(-68000,-37864),
  ABISELECT(-68384,-38068),
  ABISELECT(-74992,-41796),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
  ABISELECT(-68416,-38128),
  ABISELECT(-75408,-42060),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S2489C23[];
extern void _ZN8S2489C17D1Ev();
extern void _ZN8S2489C17D0Ev();
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C17__8S2489C23[] = {
  ABISELECT(74992,41796),
  ABISELECT(8816,4956),
  ABISELECT(22784,12672),
  ABISELECT(7248,4088),
  ABISELECT(6608,3728),
  ABISELECT(6992,3932),
  ABISELECT(7120,4004),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN8S2489C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C17D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
};
extern void _ZN8S2489C19D1Ev();
extern void _ZN8S2489C19D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C198S2489C17__8S2489C23[] = {
  ABISELECT(7152,4044),
  ABISELECT(7024,3960),
  ABISELECT(6896,3888),
  ABISELECT(6512,3684),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN8S2489C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C108S2489C198S2489C17__A1__8S2489C23[] = {
  ABISELECT(7152,4044),
  ABISELECT(7024,3960),
  ABISELECT(6896,3888),
  ABISELECT(6512,3684),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C108S2489C198S2489C17__A1__8S2489C23[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-6512,-3684),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZThn7024_N8S2489C10D1Ev,_ZThn3960_N8S2489C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void ABISELECT(_ZThn7024_N8S2489C10D0Ev,_ZThn3960_N8S2489C10D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C108S2489C198S2489C17__A1__8S2489C23[] = {
  0,
  ABISELECT(-7024,-3960),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-7024,-3960),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C108S2489C198S2489C17__A1__8S2489C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-7152,-4044),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C198S2489C17__A2__8S2489C23[] = {
  ABISELECT(6480,3624),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev)();
extern void ABISELECT(_ZThn7024_N8S2489C19D1Ev,_ZThn3960_N8S2489C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev)();
extern void ABISELECT(_ZThn7024_N8S2489C19D0Ev,_ZThn3960_N8S2489C19D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C198S2489C17__8S2489C23[] = {
  0,
  ABISELECT(-7024,-3960),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-7024,-3960),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C198S2489C17__8S2489C23[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-6512,-3684),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C198S2489C17__8S2489C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-7152,-4044),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A__8S2489C198S2489C17__8S2489C23[] = {
  ABISELECT(6480,3624),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C21D1Ev();
extern void _ZN8S2489C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C218S2489C17__8S2489C23[] = {
  ABISELECT(72288,40296),
  ABISELECT(4544,2588),
  ABISELECT(4416,2504),
  ABISELECT(4288,2432),
  ABISELECT(3904,2228),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN8S2489C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C21D0Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C218S2489C17__8S2489C23[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-3904,-2228),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev)();
extern void ABISELECT(_ZThn4416_N8S2489C21D1Ev,_ZThn2504_N8S2489C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev)();
extern void ABISELECT(_ZThn4416_N8S2489C21D0Ev,_ZThn2504_N8S2489C21D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C218S2489C17__8S2489C23[] = {
  0,
  ABISELECT(-4416,-2504),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-4416,-2504),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C218S2489C17__8S2489C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-4544,-2588),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev)();
extern void ABISELECT(_ZThn72288_N8S2489C21D1Ev,_ZThn40296_N8S2489C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev)();
extern void ABISELECT(_ZThn72288_N8S2489C21D0Ev,_ZThn40296_N8S2489C21D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__8S2489C218S2489C17__8S2489C23[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-72288,-40296),
  ABISELECT(-67744,-37708),
  ABISELECT(-67872,-37792),
  ABISELECT(-68000,-37864),
  ABISELECT(-68384,-38068),
  ABISELECT(-72288,-40296),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A2__8S2489C218S2489C17__8S2489C23[] = {
  ABISELECT(-68416,-38128),
  ABISELECT(-72704,-40560),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZThn96_N8S2489C17D1Ev,_ZThn44_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S2489C17D0Ev,_ZThn44_N8S2489C17D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A__8S2489C17__8S2489C23[] = {
  ABISELECT(7152,4044),
  ABISELECT(7024,3960),
  ABISELECT(6896,3888),
  ABISELECT(6512,3684),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C17D1Ev,_ZThn44_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C17D0Ev,_ZThn44_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn7120_N8S2489C17D1Ev,_ZThn4004_N8S2489C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev)();
extern void ABISELECT(_ZThn7120_N8S2489C17D0Ev,_ZThn4004_N8S2489C17D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C17__8S2489C23[] = {
  0,
  ABISELECT(-7120,-4004),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-7120,-4004),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C17__8S2489C23[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-6608,-3728),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C17__8S2489C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-7248,-4088),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A2__8S2489C17__8S2489C23[] = {
  ABISELECT(6480,3624),
  ABISELECT(-512,-308),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn22784_N8S2489C17D1Ev,_ZThn12672_N8S2489C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev)();
extern void ABISELECT(_ZThn22784_N8S2489C17D0Ev,_ZThn12672_N8S2489C17D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C17__8S2489C23[] = {
  0,
  0,
  0,
  ABISELECT(-22784,-12672),
  ABISELECT(-13968,-7716),
  ABISELECT(-15536,-8584),
  ABISELECT(-15664,-8668),
  ABISELECT(-15792,-8740),
  ABISELECT(-16176,-8944),
  ABISELECT(-22784,-12672),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C17__8S2489C23[] = {
  0,
  ABISELECT(-8816,-4956),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void ABISELECT(_ZThn2704_N8S2489C17D1Ev,_ZThn1500_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2489C17D0Ev,_ZThn1500_N8S2489C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2489C21__8S2489C17__8S2489C23[] = {
  ABISELECT(72288,40296),
  ABISELECT(4544,2588),
  ABISELECT(4416,2504),
  ABISELECT(4288,2432),
  ABISELECT(3904,2228),
  ABISELECT(-2704,-1500),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C17D1Ev,_ZThn1500_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C17D0Ev,_ZThn1500_N8S2489C17D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn74992_N8S2489C17D1Ev,_ZThn41796_N8S2489C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev)();
extern void ABISELECT(_ZThn74992_N8S2489C17D0Ev,_ZThn41796_N8S2489C17D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C17__8S2489C23[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-74992,-41796),
  ABISELECT(-67744,-37708),
  ABISELECT(-67872,-37792),
  ABISELECT(-68000,-37864),
  ABISELECT(-68384,-38068),
  ABISELECT(-74992,-41796),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C17__8S2489C23[] = {
  ABISELECT(-68416,-38128),
  ABISELECT(-75408,-42060),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C10__8S2489C23[] = {
  ABISELECT(928,552),
  ABISELECT(800,468),
  ABISELECT(672,396),
  ABISELECT(288,192),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C10__8S2489C23[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZThn800_N8S2489C10D1Ev,_ZThn468_N8S2489C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void ABISELECT(_ZThn800_N8S2489C10D0Ev,_ZThn468_N8S2489C10D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C10__8S2489C23[] = {
  0,
  ABISELECT(-800,-468),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-800,-468),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C10__8S2489C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-928,-552),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C23[] = {
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C8D1Ev();
extern void _ZN7S2489C8D0Ev();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C23[] = {
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C8__8S2489C23[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(512,276),
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C23[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C5[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C67S2489C5__A1__8S2489C23[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C20D1Ev();
extern void _ZN8S2489C20D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C23[] = {
  ABISELECT(-13968,-7716),
  ABISELECT(-15536,-8584),
  ABISELECT(-15664,-8668),
  ABISELECT(-15792,-8740),
  ABISELECT(-16176,-8944),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN8S2489C20D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C20D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN7S2489C9D1Ev();
extern void _ZN7S2489C9D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C98S2489C20__8S2489C23[] = {
  ABISELECT(-15536,-8584),
  ABISELECT(-15664,-8668),
  ABISELECT(-15792,-8740),
  ABISELECT(-16176,-8944),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C107S2489C98S2489C20__A2__8S2489C23[] = {
  ABISELECT(-15536,-8584),
  ABISELECT(-15664,-8668),
  ABISELECT(-15792,-8740),
  ABISELECT(-16176,-8944),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C107S2489C98S2489C20__A2__8S2489C23[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(16176,8944),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C107S2489C98S2489C20__A2__8S2489C23[] = {
  0,
  ABISELECT(15664,8668),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(15664,8668),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C107S2489C98S2489C20__A2__8S2489C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(15536,8584),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C98S2489C20__8S2489C23[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(16176,8944),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__7S2489C98S2489C20__8S2489C23[] = {
  0,
  ABISELECT(15664,8668),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(15664,8668),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__7S2489C98S2489C20__8S2489C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(15536,8584),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C20__8S2489C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(15536,8584),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A1__8S2489C20__8S2489C23[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(16176,8944),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C20D1Ev,_ZTv0_n20_N8S2489C20D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C20D0Ev,_ZTv0_n20_N8S2489C20D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C20__8S2489C23[] = {
  0,
  ABISELECT(15664,8668),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(15664,8668),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C20D1Ev,_ZTv0_n20_N8S2489C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C20D0Ev,_ZTv0_n20_N8S2489C20D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C20__8S2489C23[] = {
  0,
  ABISELECT(13968,7716),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void _ZN8S2489C19D1Ev();
extern void _ZN8S2489C19D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C23[] = {
  ABISELECT(-67744,-37708),
  ABISELECT(-67872,-37792),
  ABISELECT(-68000,-37864),
  ABISELECT(-68384,-38068),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN8S2489C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C108S2489C19__A3__8S2489C23[] = {
  ABISELECT(-67744,-37708),
  ABISELECT(-67872,-37792),
  ABISELECT(-68000,-37864),
  ABISELECT(-68384,-38068),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C108S2489C19__A3__8S2489C23[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(68384,38068),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C108S2489C19__A3__8S2489C23[] = {
  0,
  ABISELECT(67872,37792),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(67872,37792),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C108S2489C19__A3__8S2489C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(67744,37708),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C23[] = {
  ABISELECT(-68416,-38128),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C19__A1__8S2489C23[] = {
  0,
  ABISELECT(67872,37792),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(67872,37792),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C19__A1__8S2489C23[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(68384,38068),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C19__A1__8S2489C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(67744,37708),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A__8S2489C19__A1__8S2489C23[] = {
  ABISELECT(-68416,-38128),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
static  VTT_ENTRY vtt_S2489C23[] = {
  {&(_ZTV8S2489C23[10]),  10,120},
  {&(_tg__ZTV8S2489C17__8S2489C23[9]),  9,13},
  {&(_tg__ZTV8S2489C198S2489C17__8S2489C23[6]),  6,12},
  {&(_tg__ZTV8S2489C108S2489C198S2489C17__A1__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C108S2489C198S2489C17__A1__8S2489C23[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C108S2489C198S2489C17__A1__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C108S2489C198S2489C17__A1__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C198S2489C17__A2__8S2489C23[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C198S2489C17__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C198S2489C17__8S2489C23[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C198S2489C17__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A__8S2489C198S2489C17__8S2489C23[3]),  3,5},
  {&(_tg__ZTV8S2489C218S2489C17__8S2489C23[7]),  7,9},
  {&(_tg__ZTV7S2489C6__8S2489C218S2489C17__8S2489C23[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C218S2489C17__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C218S2489C17__8S2489C23[6]),  6,9},
  {&(_tg__ZTV8S2489C19__8S2489C218S2489C17__8S2489C23[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A2__8S2489C218S2489C17__8S2489C23[3]),  3,5},
  {&(_tg__ZTV8S2489C19__A__8S2489C17__8S2489C23[6]),  6,12},
  {&(_tg__ZTV7S2489C8__8S2489C17__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C17__8S2489C23[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C17__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C19__A2__8S2489C17__8S2489C23[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C17__8S2489C23[11]),  11,16},
  {&(_tg__ZTV8S2489C13__8S2489C17__8S2489C23[3]),  3,4},
  {&(_tg__ZTV8S2489C21__8S2489C17__8S2489C23[7]),  7,9},
  {&(_tg__ZTV8S2489C19__A1__8S2489C17__8S2489C23[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C17__8S2489C23[3]),  3,5},
  {&(_ZTV8S2489C23[48]),  48,120},
  {&(_ZTV8S2489C23[56]),  56,120},
  {&(_ZTV8S2489C23[64]),  64,120},
  {&(_ZTV8S2489C23[73]),  73,120},
  {&(_ZTV8S2489C23[79]),  79,120},
  {&(_ZTV8S2489C23[20]),  20,120},
  {&(_ZTV8S2489C23[29]),  29,120},
  {&(_ZTV8S2489C23[91]),  91,120},
  {&(_ZTV8S2489C23[38]),  38,120},
  {&(_ZTV8S2489C23[109]),  109,120},
  {&(_ZTV8S2489C23[118]),  118,120},
  {&(_tg__ZTV8S2489C10__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C10__8S2489C23[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C10__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C10__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C23[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C23[4]),  4,7},
  {&(_tg__ZTV7S2489C6__7S2489C8__8S2489C23[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C23[3]),  3,6},
  {&(_tg__ZTV7S2489C67S2489C5__A1__8S2489C23[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C23[7]),  7,12},
  {&(_tg__ZTV7S2489C98S2489C20__8S2489C23[6]),  6,11},
  {&(_tg__ZTV8S2489C107S2489C98S2489C20__A2__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C107S2489C98S2489C20__A2__8S2489C23[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C107S2489C98S2489C20__A2__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C107S2489C98S2489C20__A2__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C6__7S2489C98S2489C20__8S2489C23[5]),  5,7},
  {&(_tg__ZTV7S2489C8__7S2489C98S2489C20__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C5__7S2489C98S2489C20__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C20__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A1__8S2489C20__8S2489C23[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C20__8S2489C23[6]),  6,9},
  {&(_tg__ZTV8S2489C13__8S2489C20__8S2489C23[3]),  3,4},
  {&(_tg__ZTV8S2489C19__A1__8S2489C23[6]),  6,12},
  {&(_tg__ZTV8S2489C108S2489C19__A3__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C108S2489C19__A3__8S2489C23[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C108S2489C19__A3__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C108S2489C19__A3__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C23[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C19__A1__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C19__A1__8S2489C23[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C19__A1__8S2489C23[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A__8S2489C19__A1__8S2489C23[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2489C23[];
extern  VTBL_ENTRY _ZTV8S2489C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C23[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74992_N8S2489C17D0Ev,_ZThn41796_N8S2489C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74992_N8S2489C17D1Ev,_ZThn41796_N8S2489C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22784_N8S2489C17D0Ev,_ZThn12672_N8S2489C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22784_N8S2489C17D1Ev,_ZThn12672_N8S2489C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2489C17D0Ev,_ZThn4004_N8S2489C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2489C17D1Ev,_ZThn4004_N8S2489C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72288_N8S2489C21D0Ev,_ZThn40296_N8S2489C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72288_N8S2489C21D1Ev,_ZThn40296_N8S2489C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4416_N8S2489C21D0Ev,_ZThn2504_N8S2489C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4416_N8S2489C21D1Ev,_ZThn2504_N8S2489C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7024_N8S2489C19D0Ev,_ZThn3960_N8S2489C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7024_N8S2489C19D1Ev,_ZThn3960_N8S2489C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S2489C10D0Ev,_ZThn468_N8S2489C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7024_N8S2489C10D0Ev,_ZThn3960_N8S2489C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S2489C10D1Ev,_ZThn468_N8S2489C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7024_N8S2489C10D1Ev,_ZThn3960_N8S2489C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C23D0Ev,_ZTv0_n32_N8S2489C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22784_N8S2489C23D0Ev,_ZThn12672_N8S2489C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C23D1Ev,_ZTv0_n32_N8S2489C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22784_N8S2489C23D1Ev,_ZThn12672_N8S2489C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C23D0Ev,_ZTv0_n20_N8S2489C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2489C23D0Ev,_ZThn4004_N8S2489C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C23D1Ev,_ZTv0_n20_N8S2489C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2489C23D1Ev,_ZThn4004_N8S2489C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74992_N8S2489C23D0Ev,_ZThn41796_N8S2489C23D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N8S2489C23D0Ev,_ZThn3536_N8S2489C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74992_N8S2489C23D1Ev,_ZThn41796_N8S2489C23D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N8S2489C23D1Ev,_ZThn3536_N8S2489C23D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2489C23 = {  "S2489C23", // class name
  bases_S2489C23, 27,
  &(vtc_S2489C23[0]), // expected_vtbl_contents
  &(vtt_S2489C23[0]), // expected_vtt_contents
  ABISELECT(77600,43252), // object size
  NSPAIRA(_ZTI8S2489C23),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2489C23),120, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2489C23),71, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2489C22  : virtual S2489C23 , S2489C5 {
  __tsi64 s2489c22f0;
  short s2489c22f1;
  __tsi64  :0;
  void *s2489c22f3;
  void *s2489c22f4;
  long double s2489c22f5[10];
  int s2489c22f6;
  void *s2489c22f7;
  void *s2489c22f8;
  int s2489c22f9;
  long s2489c22f10;
  void *s2489c22f11;
  virtual void  v14(); // _ZN8S2489C223v14Ev
  virtual void  v15(); // _ZN8S2489C223v15Ev
  ~S2489C22(); // tgen
  S2489C22(); // tgen
};
//SIG(-1 S2489C22) C1{ VBC2{ VBC3{ BC4{ m Fc Fi FL FU5{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC6{ VBC4 v3 v4 Fp Fp Fi Fi FU7{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU7 Fp FL:3 FC4 FL FU7} VBC8{ VBC4 VBC6 vd v5 FL FL FL FL Fi FU7 Fc[10] Fi} VBC9{ BC4 BC6 v6 Fp FD FC4[7] FD FU5 Fs FL FL} vd v7 Fc Fi[7] Fl[5] FL FL FL FU10{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} VBC11{ v8 FD FC12{ VBC9 VBC8 Fi Fp Fi FU7}[6] Fc Fp Fp Fi[6] Fi Fp FL Fp Fi Fp Fp} BC13{ BC14{ vd m FU5} BC15{ VBC8 BC3 BC4 BC6 vd v9 v10 v11 FU7 Fi Fl Fc Fp FC9 Fs} VBC16{ VBC9 VBC6 VBC8 BC17{ BC3 vd v12 v13 Fp Fp Fp Fi FC18{} FL FL} VBC11 vd Fc Fs[3] FC19{ BC4 VBC6 VBC8 VBC9 VBC15 vd FL Fi Fp Fp FL}[10] FC9 FL FL:5 Fi Fp[6] FL[2] FL Fi} BC19 vd v14 v15 Fi FD Fl Fc:3 Fp FC6} vd Fp[6] Fi Fs FC18 FC20{ BC4 VBC9 VBC8 BC17 vd FD} Fp Fi Fi Fc Fc FU5} BC9 v1 v2 FL Fs FL:0 Fp Fp FD[10] Fi Fp Fp Fi Fl Fp}


void  S2489C22 ::v14(){vfunc_called(this, "_ZN8S2489C223v14Ev");}
void  S2489C22 ::v15(){vfunc_called(this, "_ZN8S2489C223v15Ev");}
S2489C22 ::~S2489C22(){ note_dtor("S2489C22", this);} // tgen
S2489C22 ::S2489C22(){ note_ctor("S2489C22", this);} // tgen

static void Test_S2489C22()
{
  extern Class_Descriptor cd_S2489C22;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4964,11072)];
    init_test(&cd_S2489C22, buf);
    S2489C22 *dp, &lv = *(dp=new (buf) S2489C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(79408,44284), "sizeof(S2489C22)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C22)");
    /*is_ambiguous_... S2489C22::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*), ABISELECT(8144,4572), "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*), ABISELECT(8800,4964), "S2489C22");
    check_base_class_offset(lv, (S2489C3*)(S2489C8*), ABISELECT(8800,4964), "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C5*), ABISELECT(8800,4964), "S2489C22");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(8800,4964), "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C19*), ABISELECT(8800,4964), "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C5*), ABISELECT(8800,4964), "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*), ABISELECT(8416,4760), "S2489C22");
    check_base_class_offset(lv, (S2489C6*)(S2489C8*), ABISELECT(8416,4760), "S2489C22");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(8416,4760), "S2489C22");
    /*is_ambiguous_... S2489C20::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C20*), ABISELECT(8416,4760), "S2489C22");
    /*is_ambiguous_... S2489C10::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(8416,4760), "S2489C22");
    /*is_ambiguous_... S2489C21::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C21*)(S2489C17*)(S2489C23*), ABISELECT(8416,4760), "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C19*), ABISELECT(8416,4760), "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C10*), ABISELECT(8928,5036), "S2489C22");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(8928,5036), "S2489C22");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(8928,5036), "S2489C22");
    check_base_class_offset(lv, (S2489C8*)(S2489C20*), ABISELECT(8928,5036), "S2489C22");
    check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(8928,5036), "S2489C22");
    check_base_class_offset(lv, (S2489C8*)(S2489C21*)(S2489C17*)(S2489C23*), ABISELECT(8928,5036), "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C19*), ABISELECT(8928,5036), "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C19*), ABISELECT(8928,5036), "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C5*), ABISELECT(9440,5324), "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C5*), ABISELECT(9056,5120), "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C10*), ABISELECT(9056,5120), "S2489C22");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(9056,5120), "S2489C22");
    check_base_class_offset(lv, (S2489C5*)(S2489C20*), ABISELECT(9056,5120), "S2489C22");
    check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(9056,5120), "S2489C22");
    check_base_class_offset(lv, (S2489C5*)(S2489C21*)(S2489C17*)(S2489C23*), ABISELECT(9056,5120), "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C19*), ABISELECT(9056,5120), "S2489C22");
    /*is_ambiguous_... S2489C23::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C10*)(S2489C23*), ABISELECT(8128,4568), "S2489C22");
    check_base_class_offset(lv, (S2489C13*)(S2489C23*), ABISELECT(10624,5988), "S2489C22");
    check_base_class_offset(lv, (S2489C13*)(S2489C20*), ABISELECT(10624,5988), "S2489C22");
    check_base_class_offset(lv, (S2489C18*)(S2489C17*)(S2489C23*), ABISELECT(1808,1032), "S2489C22");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(1920,1080), "S2489C22");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C10*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(1904,1076), "S2489C22");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(2192,1268), "S2489C22");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(2320,1340), "S2489C22");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(1904,1076), "S2489C22");
    /*is_ambiguous_... S2489C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(24608,13708), "S2489C22");
    check_base_class_offset(lv, (S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(24592,13704), "S2489C22");
    check_base_class_offset(lv, (S2489C9*)(S2489C20*), ABISELECT(24592,13704), "S2489C22");
    check_base_class_offset(lv, (S2489C20*)(S2489C17*)(S2489C23*), ABISELECT(24592,13704), "S2489C22");
    /*is_ambiguous_... S2489C21::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C21*)(S2489C17*)(S2489C23*), ABISELECT(4528,2536), "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C19*), ABISELECT(76816,42832), "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C10*)(S2489C19*), ABISELECT(76800,42828), "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C19*), ABISELECT(77088,43020), "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C19*), ABISELECT(77216,43092), "S2489C22");
    check_base_class_offset(lv, (S2489C19*)(S2489C21*)(S2489C17*)(S2489C23*), ABISELECT(76800,42828), "S2489C22");
    check_base_class_offset(lv, (S2489C21*)(S2489C17*)(S2489C23*), ABISELECT(4512,2532), "S2489C22");
    check_base_class_offset(lv, (S2489C17*)(S2489C23*), ABISELECT(1808,1032), "S2489C22");
    check_base_class_offset(lv, (S2489C23*), ABISELECT(1808,1032), "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C5*), ABISELECT(384,204), "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C5*), 0, "S2489C22");
    /*is_ambiguous_... S2489C22::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C5*), 0, "S2489C22");
    check_field_offset(lv, s2489c22f0, ABISELECT(1560,868), "S2489C22.s2489c22f0");
    check_field_offset(lv, s2489c22f1, ABISELECT(1568,876), "S2489C22.s2489c22f1");
    check_field_offset(lv, s2489c22f3, ABISELECT(1576,880), "S2489C22.s2489c22f3");
    check_field_offset(lv, s2489c22f4, ABISELECT(1584,884), "S2489C22.s2489c22f4");
    check_field_offset(lv, s2489c22f5, ABISELECT(1600,888), "S2489C22.s2489c22f5");
    check_field_offset(lv, s2489c22f6, ABISELECT(1760,1008), "S2489C22.s2489c22f6");
    check_field_offset(lv, s2489c22f7, ABISELECT(1768,1012), "S2489C22.s2489c22f7");
    check_field_offset(lv, s2489c22f8, ABISELECT(1776,1016), "S2489C22.s2489c22f8");
    check_field_offset(lv, s2489c22f9, ABISELECT(1784,1020), "S2489C22.s2489c22f9");
    check_field_offset(lv, s2489c22f10, ABISELECT(1792,1024), "S2489C22.s2489c22f10");
    check_field_offset(lv, s2489c22f11, ABISELECT(1800,1028), "S2489C22.s2489c22f11");
    test_class_info(&lv, &cd_S2489C22);
    dp->~S2489C22();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2489C22(Test_S2489C22, "S2489C22", ABISELECT(79408,44284));

#else // __cplusplus

extern void _ZN8S2489C22C1Ev();
extern void _ZN8S2489C22D1Ev();
Name_Map name_map_S2489C22[] = {
  NSPAIR(_ZN8S2489C22C1Ev),
  NSPAIR(_ZN8S2489C22D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C8;
extern VTBL_ENTRY _ZTI7S2489C8[];
extern  VTBL_ENTRY _ZTV7S2489C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C5;
extern VTBL_ENTRY _ZTI7S2489C5[];
extern  VTBL_ENTRY _ZTV7S2489C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C5[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C13;
extern VTBL_ENTRY _ZTI8S2489C13[];
extern  VTBL_ENTRY _ZTV8S2489C13[];
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C19;
extern VTBL_ENTRY _ZTI8S2489C19[];
extern  VTBL_ENTRY _ZTV8S2489C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C19[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C9;
extern VTBL_ENTRY _ZTI7S2489C9[];
extern  VTBL_ENTRY _ZTV7S2489C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C9[];
extern Class_Descriptor cd_S2489C20;
extern VTBL_ENTRY _ZTI8S2489C20[];
extern  VTBL_ENTRY _ZTV8S2489C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C20[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C19;
extern VTBL_ENTRY _ZTI8S2489C19[];
extern  VTBL_ENTRY _ZTV8S2489C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C19[];
extern Class_Descriptor cd_S2489C21;
extern VTBL_ENTRY _ZTI8S2489C21[];
extern  VTBL_ENTRY _ZTV8S2489C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C21[];
extern Class_Descriptor cd_S2489C17;
extern VTBL_ENTRY _ZTI8S2489C17[];
extern  VTBL_ENTRY _ZTV8S2489C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C17[];
extern Class_Descriptor cd_S2489C23;
extern VTBL_ENTRY _ZTI8S2489C23[];
extern  VTBL_ENTRY _ZTV8S2489C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C23[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C5;
extern VTBL_ENTRY _ZTI7S2489C5[];
extern  VTBL_ENTRY _ZTV7S2489C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C5[];
static Base_Class bases_S2489C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(8144,4572), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(8800,4964), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2489C6,    ABISELECT(8416,4760), //bcp->offset
    78, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2489C8,    ABISELECT(8928,5036), //bcp->offset
    85, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(9440,5324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(9056,5120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2489C5,    ABISELECT(9056,5120), //bcp->offset
    94, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C10,    ABISELECT(8128,4568), //bcp->offset
    67, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2489C13,    ABISELECT(10624,5988), //bcp->offset
    103, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S2489C18,    ABISELECT(1808,1032), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(1920,1080), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(1904,1076), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(2192,1268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(2320,1340), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2489C19,    ABISELECT(1904,1076), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(24608,13708), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(24592,13704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2489C9,    ABISELECT(24592,13704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2489C20,    ABISELECT(24592,13704), //bcp->offset
    107, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(4528,2536), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(76816,42832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(76800,42828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(77088,43020), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(77216,43092), //bcp->offset
    142, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2489C19,    ABISELECT(76800,42828), //bcp->offset
    123, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S2489C21,    ABISELECT(4512,2532), //bcp->offset
    58, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S2489C17,    ABISELECT(1808,1032), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S2489C23,    ABISELECT(1808,1032), //bcp->offset
    18, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(384,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S2489C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S2489C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2489C22[];
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
extern void _ZN8S2489C223v14Ev();
extern void _ZN8S2489C223v15Ev();
extern void _ZN8S2489C22D1Ev();
extern void _ZN8S2489C22D0Ev();
extern void ABISELECT(_ZTv0_n88_N8S2489C22D1Ev,_ZTv0_n44_N8S2489C22D1Ev)();
extern void ABISELECT(_ZThn1808_N8S2489C22D1Ev,_ZThn1032_N8S2489C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S2489C22D0Ev,_ZTv0_n44_N8S2489C22D0Ev)();
extern void ABISELECT(_ZThn1808_N8S2489C22D0Ev,_ZThn1032_N8S2489C22D0Ev)() __attribute__((weak));
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
extern void ABISELECT(_ZTvn96_n88_N8S2489C22D1Ev,_ZTvn44_n44_N8S2489C22D1Ev)();
extern void ABISELECT(_ZTvn96_n88_N8S2489C22D0Ev,_ZTvn44_n44_N8S2489C22D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void ABISELECT(_ZTvn2704_n88_N8S2489C22D1Ev,_ZTvn1500_n44_N8S2489C22D1Ev)();
extern void ABISELECT(_ZTvn2704_n88_N8S2489C22D0Ev,_ZTvn1500_n44_N8S2489C22D0Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2489C22D1Ev,_ZTv0_n28_N8S2489C22D1Ev)();
extern void ABISELECT(_ZThn8128_N8S2489C22D1Ev,_ZThn4568_N8S2489C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C22D0Ev,_ZTv0_n28_N8S2489C22D0Ev)();
extern void ABISELECT(_ZThn8128_N8S2489C22D0Ev,_ZThn4568_N8S2489C22D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S2489C22D1Ev,_ZTv0_n20_N8S2489C22D1Ev)();
extern void ABISELECT(_ZThn8928_N8S2489C22D1Ev,_ZThn5036_N8S2489C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C22D0Ev,_ZTv0_n20_N8S2489C22D0Ev)();
extern void ABISELECT(_ZThn8928_N8S2489C22D0Ev,_ZThn5036_N8S2489C22D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
extern void _ZN8S2489C133v11Ev();
extern void ABISELECT(_ZTv0_n64_N8S2489C22D1Ev,_ZTv0_n32_N8S2489C22D1Ev)();
extern void ABISELECT(_ZThn24592_N8S2489C22D1Ev,_ZThn13704_N8S2489C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2489C22D0Ev,_ZTv0_n32_N8S2489C22D0Ev)();
extern void ABISELECT(_ZThn24592_N8S2489C22D0Ev,_ZThn13704_N8S2489C22D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
extern void ABISELECT(_ZTv0_n56_N8S2489C22D1Ev,_ZTv0_n28_N8S2489C22D1Ev)();
extern void ABISELECT(_ZThn76800_N8S2489C22D1Ev,_ZThn42828_N8S2489C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C22D0Ev,_ZTv0_n28_N8S2489C22D0Ev)();
extern void ABISELECT(_ZThn76800_N8S2489C22D0Ev,_ZThn42828_N8S2489C22D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY vtc_S2489C22[] = {
  ABISELECT(76800,42828),
  ABISELECT(24592,13704),
  ABISELECT(10624,5988),
  ABISELECT(9056,5120),
  ABISELECT(8928,5036),
  ABISELECT(8416,4760),
  ABISELECT(8128,4568),
  ABISELECT(1808,1032),
  ABISELECT(8800,4964),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
  (VTBL_ENTRY)&_ZN8S2489C223v14Ev,
  (VTBL_ENTRY)&_ZN8S2489C223v15Ev,
  (VTBL_ENTRY)&_ZN8S2489C22D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C22D0Ev,
  ABISELECT(512,308),
  ABISELECT(512,308),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-1808,-1032),
  ABISELECT(6320,3536),
  ABISELECT(74992,41796),
  ABISELECT(8816,4956),
  ABISELECT(22784,12672),
  ABISELECT(7248,4088),
  ABISELECT(6608,3728),
  ABISELECT(6992,3932),
  ABISELECT(7120,4004),
  ABISELECT(-1808,-1032),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2489C22D1Ev,_ZTv0_n44_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2489C22D0Ev,_ZTv0_n44_N8S2489C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
  ABISELECT(7152,4044),
  ABISELECT(7024,3960),
  ABISELECT(6896,3888),
  ABISELECT(6512,3684),
  ABISELECT(-1904,-1076),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2489C22D1Ev,_ZTvn44_n44_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2489C22D0Ev,_ZTvn44_n44_N8S2489C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
  ABISELECT(6480,3624),
  ABISELECT(-2320,-1340),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  ABISELECT(72288,40296),
  ABISELECT(4544,2588),
  ABISELECT(4416,2504),
  ABISELECT(4288,2432),
  ABISELECT(3904,2228),
  ABISELECT(-4512,-2532),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2489C22D1Ev,_ZTvn1500_n44_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2489C22D0Ev,_ZTvn1500_n44_N8S2489C22D0Ev),
  0,
  ABISELECT(-8128,-4568),
  ABISELECT(928,552),
  ABISELECT(800,468),
  ABISELECT(672,396),
  ABISELECT(288,192),
  ABISELECT(-8128,-4568),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C22D1Ev,_ZTv0_n28_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C22D0Ev,_ZTv0_n28_N8S2489C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-8416,-4760),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  0,
  ABISELECT(-8928,-5036),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-8928,-5036),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C22D1Ev,_ZTv0_n20_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C22D0Ev,_ZTv0_n20_N8S2489C22D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-9056,-5120),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
  0,
  ABISELECT(-10624,-5988),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
  0,
  0,
  0,
  ABISELECT(-24592,-13704),
  ABISELECT(-13968,-7716),
  ABISELECT(-15536,-8584),
  ABISELECT(-15664,-8668),
  ABISELECT(-15792,-8740),
  ABISELECT(-16176,-8944),
  ABISELECT(-24592,-13704),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C22D1Ev,_ZTv0_n32_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C22D0Ev,_ZTv0_n32_N8S2489C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-76800,-42828),
  ABISELECT(-67744,-37708),
  ABISELECT(-67872,-37792),
  ABISELECT(-68000,-37864),
  ABISELECT(-68384,-38068),
  ABISELECT(-76800,-42828),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C22D1Ev,_ZTv0_n28_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C22D0Ev,_ZTv0_n28_N8S2489C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
  ABISELECT(-68416,-38128),
  ABISELECT(-77216,-43092),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S2489C22[];
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__A__8S2489C22[] = {
  ABISELECT(8800,4964),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C5[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C67S2489C5__A4__8S2489C22[] = {
  ABISELECT(8800,4964),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C23D1Ev();
extern void _ZN8S2489C23D0Ev();
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C23__8S2489C22[] = {
  ABISELECT(6320,3536),
  ABISELECT(74992,41796),
  ABISELECT(8816,4956),
  ABISELECT(22784,12672),
  ABISELECT(7248,4088),
  ABISELECT(6608,3728),
  ABISELECT(6992,3932),
  ABISELECT(7120,4004),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN8S2489C23D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C23D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
};
extern void _ZN8S2489C17D1Ev();
extern void _ZN8S2489C17D0Ev();
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C178S2489C23__8S2489C22[] = {
  ABISELECT(74992,41796),
  ABISELECT(8816,4956),
  ABISELECT(22784,12672),
  ABISELECT(7248,4088),
  ABISELECT(6608,3728),
  ABISELECT(6992,3932),
  ABISELECT(7120,4004),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN8S2489C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C17D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
};
extern void _ZN8S2489C19D1Ev();
extern void _ZN8S2489C19D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C198S2489C178S2489C23__8S2489C22[] = {
  ABISELECT(7152,4044),
  ABISELECT(7024,3960),
  ABISELECT(6896,3888),
  ABISELECT(6512,3684),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN8S2489C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C108S2489C198S2489C178S2489C23__A1__8S2489C22[] = {
  ABISELECT(7152,4044),
  ABISELECT(7024,3960),
  ABISELECT(6896,3888),
  ABISELECT(6512,3684),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C108S2489C198S2489C178S2489C23__A1__8S2489C22[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-6512,-3684),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZThn7024_N8S2489C10D1Ev,_ZThn3960_N8S2489C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void ABISELECT(_ZThn7024_N8S2489C10D0Ev,_ZThn3960_N8S2489C10D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C108S2489C198S2489C178S2489C23__A1__8S2489C22[] = {
  0,
  ABISELECT(-7024,-3960),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-7024,-3960),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C108S2489C198S2489C178S2489C23__A1__8S2489C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-7152,-4044),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C198S2489C178S2489C23__A2__8S2489C22[] = {
  ABISELECT(6480,3624),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev)();
extern void ABISELECT(_ZThn7024_N8S2489C19D1Ev,_ZThn3960_N8S2489C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev)();
extern void ABISELECT(_ZThn7024_N8S2489C19D0Ev,_ZThn3960_N8S2489C19D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C198S2489C178S2489C23__8S2489C22[] = {
  0,
  ABISELECT(-7024,-3960),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-7024,-3960),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C198S2489C178S2489C23__8S2489C22[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-6512,-3684),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C198S2489C178S2489C23__8S2489C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-7152,-4044),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A__8S2489C198S2489C178S2489C23__8S2489C22[] = {
  ABISELECT(6480,3624),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C21D1Ev();
extern void _ZN8S2489C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C218S2489C178S2489C23__8S2489C22[] = {
  ABISELECT(72288,40296),
  ABISELECT(4544,2588),
  ABISELECT(4416,2504),
  ABISELECT(4288,2432),
  ABISELECT(3904,2228),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN8S2489C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C21D0Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C218S2489C178S2489C23__8S2489C22[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-3904,-2228),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev)();
extern void ABISELECT(_ZThn4416_N8S2489C21D1Ev,_ZThn2504_N8S2489C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev)();
extern void ABISELECT(_ZThn4416_N8S2489C21D0Ev,_ZThn2504_N8S2489C21D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C218S2489C178S2489C23__8S2489C22[] = {
  0,
  ABISELECT(-4416,-2504),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-4416,-2504),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C218S2489C178S2489C23__8S2489C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-4544,-2588),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev)();
extern void ABISELECT(_ZThn72288_N8S2489C21D1Ev,_ZThn40296_N8S2489C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev)();
extern void ABISELECT(_ZThn72288_N8S2489C21D0Ev,_ZThn40296_N8S2489C21D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__8S2489C218S2489C178S2489C23__8S2489C22[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-72288,-40296),
  ABISELECT(-67744,-37708),
  ABISELECT(-67872,-37792),
  ABISELECT(-68000,-37864),
  ABISELECT(-68384,-38068),
  ABISELECT(-72288,-40296),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A2__8S2489C218S2489C178S2489C23__8S2489C22[] = {
  ABISELECT(-68416,-38128),
  ABISELECT(-72704,-40560),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZThn96_N8S2489C17D1Ev,_ZThn44_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S2489C17D0Ev,_ZThn44_N8S2489C17D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A__8S2489C178S2489C23__8S2489C22[] = {
  ABISELECT(7152,4044),
  ABISELECT(7024,3960),
  ABISELECT(6896,3888),
  ABISELECT(6512,3684),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C17D1Ev,_ZThn44_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C17D0Ev,_ZThn44_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn7120_N8S2489C17D1Ev,_ZThn4004_N8S2489C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev)();
extern void ABISELECT(_ZThn7120_N8S2489C17D0Ev,_ZThn4004_N8S2489C17D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C178S2489C23__8S2489C22[] = {
  0,
  ABISELECT(-7120,-4004),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-7120,-4004),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C178S2489C23__8S2489C22[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-6608,-3728),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C178S2489C23__8S2489C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-7248,-4088),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A2__8S2489C178S2489C23__8S2489C22[] = {
  ABISELECT(6480,3624),
  ABISELECT(-512,-308),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn22784_N8S2489C17D1Ev,_ZThn12672_N8S2489C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev)();
extern void ABISELECT(_ZThn22784_N8S2489C17D0Ev,_ZThn12672_N8S2489C17D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C178S2489C23__8S2489C22[] = {
  0,
  0,
  0,
  ABISELECT(-22784,-12672),
  ABISELECT(-13968,-7716),
  ABISELECT(-15536,-8584),
  ABISELECT(-15664,-8668),
  ABISELECT(-15792,-8740),
  ABISELECT(-16176,-8944),
  ABISELECT(-22784,-12672),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C178S2489C23__8S2489C22[] = {
  0,
  ABISELECT(-8816,-4956),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void ABISELECT(_ZThn2704_N8S2489C17D1Ev,_ZThn1500_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2489C17D0Ev,_ZThn1500_N8S2489C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2489C21__8S2489C178S2489C23__8S2489C22[] = {
  ABISELECT(72288,40296),
  ABISELECT(4544,2588),
  ABISELECT(4416,2504),
  ABISELECT(4288,2432),
  ABISELECT(3904,2228),
  ABISELECT(-2704,-1500),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C17D1Ev,_ZThn1500_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C17D0Ev,_ZThn1500_N8S2489C17D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn74992_N8S2489C17D1Ev,_ZThn41796_N8S2489C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev)();
extern void ABISELECT(_ZThn74992_N8S2489C17D0Ev,_ZThn41796_N8S2489C17D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C178S2489C23__8S2489C22[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-74992,-41796),
  ABISELECT(-67744,-37708),
  ABISELECT(-67872,-37792),
  ABISELECT(-68000,-37864),
  ABISELECT(-68384,-38068),
  ABISELECT(-74992,-41796),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C178S2489C23__8S2489C22[] = {
  ABISELECT(-68416,-38128),
  ABISELECT(-75408,-42060),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev)();
extern void ABISELECT(_ZThn6320_N8S2489C23D1Ev,_ZThn3536_N8S2489C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev)();
extern void ABISELECT(_ZThn6320_N8S2489C23D0Ev,_ZThn3536_N8S2489C23D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C10__8S2489C23__8S2489C22[] = {
  0,
  ABISELECT(-6320,-3536),
  ABISELECT(928,552),
  ABISELECT(800,468),
  ABISELECT(672,396),
  ABISELECT(288,192),
  ABISELECT(-6320,-3536),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C23__8S2489C22[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-6608,-3728),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C23D1Ev,_ZTv0_n20_N8S2489C23D1Ev)();
extern void ABISELECT(_ZThn7120_N8S2489C23D1Ev,_ZThn4004_N8S2489C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C23D0Ev,_ZTv0_n20_N8S2489C23D0Ev)();
extern void ABISELECT(_ZThn7120_N8S2489C23D0Ev,_ZThn4004_N8S2489C23D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C23__8S2489C22[] = {
  0,
  ABISELECT(-7120,-4004),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-7120,-4004),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C23D1Ev,_ZTv0_n20_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C23D0Ev,_ZTv0_n20_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C23__8S2489C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-7248,-4088),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C23__8S2489C22[] = {
  0,
  ABISELECT(-8816,-4956),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void ABISELECT(_ZThn96_N8S2489C23D1Ev,_ZThn44_N8S2489C23D1Ev)();
extern void ABISELECT(_ZThn96_N8S2489C23D0Ev,_ZThn44_N8S2489C23D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C198S2489C17__8S2489C23__8S2489C22[] = {
  ABISELECT(7152,4044),
  ABISELECT(7024,3960),
  ABISELECT(6896,3888),
  ABISELECT(6512,3684),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C23D1Ev,_ZThn44_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C23D0Ev,_ZThn44_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C198S2489C17__A2__8S2489C23__8S2489C22[] = {
  ABISELECT(6480,3624),
  ABISELECT(-512,-308),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2489C23D1Ev,_ZTv0_n32_N8S2489C23D1Ev)();
extern void ABISELECT(_ZThn22784_N8S2489C23D1Ev,_ZThn12672_N8S2489C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2489C23D0Ev,_ZTv0_n32_N8S2489C23D0Ev)();
extern void ABISELECT(_ZThn22784_N8S2489C23D0Ev,_ZThn12672_N8S2489C23D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C23__8S2489C22[] = {
  0,
  0,
  0,
  ABISELECT(-22784,-12672),
  ABISELECT(-13968,-7716),
  ABISELECT(-15536,-8584),
  ABISELECT(-15664,-8668),
  ABISELECT(-15792,-8740),
  ABISELECT(-16176,-8944),
  ABISELECT(-22784,-12672),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C23D1Ev,_ZTv0_n32_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C23D0Ev,_ZTv0_n32_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void ABISELECT(_ZThn2704_N8S2489C23D1Ev,_ZThn1500_N8S2489C23D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2489C23D0Ev,_ZThn1500_N8S2489C23D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2489C218S2489C17__8S2489C23__8S2489C22[] = {
  ABISELECT(72288,40296),
  ABISELECT(4544,2588),
  ABISELECT(4416,2504),
  ABISELECT(4288,2432),
  ABISELECT(3904,2228),
  ABISELECT(-2704,-1500),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C23D1Ev,_ZThn1500_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C23D0Ev,_ZThn1500_N8S2489C23D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev)();
extern void ABISELECT(_ZThn74992_N8S2489C23D1Ev,_ZThn41796_N8S2489C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev)();
extern void ABISELECT(_ZThn74992_N8S2489C23D0Ev,_ZThn41796_N8S2489C23D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C23__8S2489C22[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-74992,-41796),
  ABISELECT(-67744,-37708),
  ABISELECT(-67872,-37792),
  ABISELECT(-68000,-37864),
  ABISELECT(-68384,-38068),
  ABISELECT(-74992,-41796),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C23__8S2489C22[] = {
  ABISELECT(-68416,-38128),
  ABISELECT(-75408,-42060),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C10__8S2489C22[] = {
  ABISELECT(928,552),
  ABISELECT(800,468),
  ABISELECT(672,396),
  ABISELECT(288,192),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C10__8S2489C22[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZThn800_N8S2489C10D1Ev,_ZThn468_N8S2489C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void ABISELECT(_ZThn800_N8S2489C10D0Ev,_ZThn468_N8S2489C10D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C10__8S2489C22[] = {
  0,
  ABISELECT(-800,-468),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-800,-468),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C10__8S2489C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-928,-552),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C22[] = {
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C8D1Ev();
extern void _ZN7S2489C8D0Ev();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C22[] = {
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C8__8S2489C22[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(512,276),
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C22[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C5[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C67S2489C5__A1__8S2489C22[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C20D1Ev();
extern void _ZN8S2489C20D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C22[] = {
  ABISELECT(-13968,-7716),
  ABISELECT(-15536,-8584),
  ABISELECT(-15664,-8668),
  ABISELECT(-15792,-8740),
  ABISELECT(-16176,-8944),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN8S2489C20D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C20D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN7S2489C9D1Ev();
extern void _ZN7S2489C9D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C98S2489C20__8S2489C22[] = {
  ABISELECT(-15536,-8584),
  ABISELECT(-15664,-8668),
  ABISELECT(-15792,-8740),
  ABISELECT(-16176,-8944),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C107S2489C98S2489C20__A2__8S2489C22[] = {
  ABISELECT(-15536,-8584),
  ABISELECT(-15664,-8668),
  ABISELECT(-15792,-8740),
  ABISELECT(-16176,-8944),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C107S2489C98S2489C20__A2__8S2489C22[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(16176,8944),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C107S2489C98S2489C20__A2__8S2489C22[] = {
  0,
  ABISELECT(15664,8668),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(15664,8668),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C107S2489C98S2489C20__A2__8S2489C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(15536,8584),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C98S2489C20__8S2489C22[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(16176,8944),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__7S2489C98S2489C20__8S2489C22[] = {
  0,
  ABISELECT(15664,8668),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(15664,8668),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__7S2489C98S2489C20__8S2489C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(15536,8584),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C20__8S2489C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(15536,8584),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A1__8S2489C20__8S2489C22[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(16176,8944),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C20D1Ev,_ZTv0_n20_N8S2489C20D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C20D0Ev,_ZTv0_n20_N8S2489C20D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C20__8S2489C22[] = {
  0,
  ABISELECT(15664,8668),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(15664,8668),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C20D1Ev,_ZTv0_n20_N8S2489C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C20D0Ev,_ZTv0_n20_N8S2489C20D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C20__8S2489C22[] = {
  0,
  ABISELECT(13968,7716),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void _ZN8S2489C19D1Ev();
extern void _ZN8S2489C19D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C22[] = {
  ABISELECT(-67744,-37708),
  ABISELECT(-67872,-37792),
  ABISELECT(-68000,-37864),
  ABISELECT(-68384,-38068),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN8S2489C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C108S2489C19__A3__8S2489C22[] = {
  ABISELECT(-67744,-37708),
  ABISELECT(-67872,-37792),
  ABISELECT(-68000,-37864),
  ABISELECT(-68384,-38068),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C108S2489C19__A3__8S2489C22[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(68384,38068),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C108S2489C19__A3__8S2489C22[] = {
  0,
  ABISELECT(67872,37792),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(67872,37792),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C108S2489C19__A3__8S2489C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(67744,37708),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C22[] = {
  ABISELECT(-68416,-38128),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C19__A1__8S2489C22[] = {
  0,
  ABISELECT(67872,37792),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(67872,37792),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C19__A1__8S2489C22[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(68384,38068),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C19__A1__8S2489C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(67744,37708),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A__8S2489C19__A1__8S2489C22[] = {
  ABISELECT(-68416,-38128),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
static  VTT_ENTRY vtt_S2489C22[] = {
  {&(_ZTV8S2489C22[11]),  11,147},
  {&(_tg__ZTV7S2489C5__A__8S2489C22[3]),  3,6},
  {&(_tg__ZTV7S2489C67S2489C5__A4__8S2489C22[3]),  3,5},
  {&(_ZTV8S2489C22[37]),  37,147},
  {&(_ZTV8S2489C22[75]),  75,147},
  {&(_ZTV8S2489C22[83]),  83,147},
  {&(_ZTV8S2489C22[91]),  91,147},
  {&(_ZTV8S2489C22[100]),  100,147},
  {&(_ZTV8S2489C22[106]),  106,147},
  {&(_ZTV8S2489C22[47]),  47,147},
  {&(_ZTV8S2489C22[56]),  56,147},
  {&(_ZTV8S2489C22[118]),  118,147},
  {&(_ZTV8S2489C22[65]),  65,147},
  {&(_ZTV8S2489C22[136]),  136,147},
  {&(_ZTV8S2489C22[145]),  145,147},
  {&(_tg__ZTV8S2489C23__8S2489C22[10]),  10,14},
  {&(_tg__ZTV8S2489C178S2489C23__8S2489C22[9]),  9,13},
  {&(_tg__ZTV8S2489C198S2489C178S2489C23__8S2489C22[6]),  6,12},
  {&(_tg__ZTV8S2489C108S2489C198S2489C178S2489C23__A1__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C108S2489C198S2489C178S2489C23__A1__8S2489C22[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C108S2489C198S2489C178S2489C23__A1__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C108S2489C198S2489C178S2489C23__A1__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C198S2489C178S2489C23__A2__8S2489C22[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C198S2489C178S2489C23__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C198S2489C178S2489C23__8S2489C22[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C198S2489C178S2489C23__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A__8S2489C198S2489C178S2489C23__8S2489C22[3]),  3,5},
  {&(_tg__ZTV8S2489C218S2489C178S2489C23__8S2489C22[7]),  7,9},
  {&(_tg__ZTV7S2489C6__8S2489C218S2489C178S2489C23__8S2489C22[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C218S2489C178S2489C23__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C218S2489C178S2489C23__8S2489C22[6]),  6,9},
  {&(_tg__ZTV8S2489C19__8S2489C218S2489C178S2489C23__8S2489C22[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A2__8S2489C218S2489C178S2489C23__8S2489C22[3]),  3,5},
  {&(_tg__ZTV8S2489C19__A__8S2489C178S2489C23__8S2489C22[6]),  6,12},
  {&(_tg__ZTV7S2489C8__8S2489C178S2489C23__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C178S2489C23__8S2489C22[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C178S2489C23__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C19__A2__8S2489C178S2489C23__8S2489C22[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C178S2489C23__8S2489C22[11]),  11,16},
  {&(_tg__ZTV8S2489C13__8S2489C178S2489C23__8S2489C22[3]),  3,4},
  {&(_tg__ZTV8S2489C21__8S2489C178S2489C23__8S2489C22[7]),  7,9},
  {&(_tg__ZTV8S2489C19__A1__8S2489C178S2489C23__8S2489C22[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C178S2489C23__8S2489C22[3]),  3,5},
  {&(_tg__ZTV8S2489C10__8S2489C23__8S2489C22[8]),  8,11},
  {&(_tg__ZTV7S2489C6__8S2489C23__8S2489C22[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C23__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C23__8S2489C22[6]),  6,9},
  {&(_tg__ZTV8S2489C13__8S2489C23__8S2489C22[3]),  3,4},
  {&(_tg__ZTV8S2489C198S2489C17__8S2489C23__8S2489C22[6]),  6,12},
  {&(_tg__ZTV7S2489C68S2489C198S2489C17__A2__8S2489C23__8S2489C22[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C23__8S2489C22[11]),  11,16},
  {&(_tg__ZTV8S2489C218S2489C17__8S2489C23__8S2489C22[7]),  7,9},
  {&(_tg__ZTV8S2489C19__A1__8S2489C23__8S2489C22[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C23__8S2489C22[3]),  3,5},
  {&(_tg__ZTV8S2489C10__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C10__8S2489C22[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C10__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C10__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C22[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C22[4]),  4,7},
  {&(_tg__ZTV7S2489C6__7S2489C8__8S2489C22[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C22[3]),  3,6},
  {&(_tg__ZTV7S2489C67S2489C5__A1__8S2489C22[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C22[7]),  7,12},
  {&(_tg__ZTV7S2489C98S2489C20__8S2489C22[6]),  6,11},
  {&(_tg__ZTV8S2489C107S2489C98S2489C20__A2__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C107S2489C98S2489C20__A2__8S2489C22[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C107S2489C98S2489C20__A2__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C107S2489C98S2489C20__A2__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C6__7S2489C98S2489C20__8S2489C22[5]),  5,7},
  {&(_tg__ZTV7S2489C8__7S2489C98S2489C20__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C5__7S2489C98S2489C20__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C20__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A1__8S2489C20__8S2489C22[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C20__8S2489C22[6]),  6,9},
  {&(_tg__ZTV8S2489C13__8S2489C20__8S2489C22[3]),  3,4},
  {&(_tg__ZTV8S2489C19__A1__8S2489C22[6]),  6,12},
  {&(_tg__ZTV8S2489C108S2489C19__A3__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C108S2489C19__A3__8S2489C22[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C108S2489C19__A3__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C108S2489C19__A3__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C22[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C19__A1__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C19__A1__8S2489C22[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C19__A1__8S2489C22[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A__8S2489C19__A1__8S2489C22[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2489C22[];
extern  VTBL_ENTRY _ZTV8S2489C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C22[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C23D0Ev,_ZTv0_n32_N8S2489C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22784_N8S2489C23D0Ev,_ZThn12672_N8S2489C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C23D1Ev,_ZTv0_n32_N8S2489C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22784_N8S2489C23D1Ev,_ZThn12672_N8S2489C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C23D0Ev,_ZTv0_n20_N8S2489C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2489C23D0Ev,_ZThn4004_N8S2489C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C23D1Ev,_ZTv0_n20_N8S2489C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2489C23D1Ev,_ZThn4004_N8S2489C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74992_N8S2489C23D0Ev,_ZThn41796_N8S2489C23D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N8S2489C23D0Ev,_ZThn3536_N8S2489C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74992_N8S2489C23D1Ev,_ZThn41796_N8S2489C23D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N8S2489C23D1Ev,_ZThn3536_N8S2489C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74992_N8S2489C17D0Ev,_ZThn41796_N8S2489C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74992_N8S2489C17D1Ev,_ZThn41796_N8S2489C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22784_N8S2489C17D0Ev,_ZThn12672_N8S2489C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22784_N8S2489C17D1Ev,_ZThn12672_N8S2489C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2489C17D0Ev,_ZThn4004_N8S2489C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2489C17D1Ev,_ZThn4004_N8S2489C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72288_N8S2489C21D0Ev,_ZThn40296_N8S2489C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72288_N8S2489C21D1Ev,_ZThn40296_N8S2489C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4416_N8S2489C21D0Ev,_ZThn2504_N8S2489C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4416_N8S2489C21D1Ev,_ZThn2504_N8S2489C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7024_N8S2489C19D0Ev,_ZThn3960_N8S2489C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7024_N8S2489C19D1Ev,_ZThn3960_N8S2489C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S2489C10D0Ev,_ZThn468_N8S2489C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7024_N8S2489C10D0Ev,_ZThn3960_N8S2489C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S2489C10D1Ev,_ZThn468_N8S2489C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7024_N8S2489C10D1Ev,_ZThn3960_N8S2489C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C22D0Ev,_ZTv0_n32_N8S2489C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24592_N8S2489C22D0Ev,_ZThn13704_N8S2489C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C22D1Ev,_ZTv0_n32_N8S2489C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24592_N8S2489C22D1Ev,_ZThn13704_N8S2489C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C22D0Ev,_ZTv0_n20_N8S2489C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8928_N8S2489C22D0Ev,_ZThn5036_N8S2489C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C22D1Ev,_ZTv0_n20_N8S2489C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8928_N8S2489C22D1Ev,_ZThn5036_N8S2489C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C22D0Ev,_ZTv0_n28_N8S2489C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn76800_N8S2489C22D0Ev,_ZThn42828_N8S2489C22D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8128_N8S2489C22D0Ev,_ZThn4568_N8S2489C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C22D1Ev,_ZTv0_n28_N8S2489C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn76800_N8S2489C22D1Ev,_ZThn42828_N8S2489C22D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8128_N8S2489C22D1Ev,_ZThn4568_N8S2489C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2489C22D0Ev,_ZTv0_n44_N8S2489C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1808_N8S2489C22D0Ev,_ZThn1032_N8S2489C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2489C22D1Ev,_ZTv0_n44_N8S2489C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1808_N8S2489C22D1Ev,_ZThn1032_N8S2489C22D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2489C22 = {  "S2489C22", // class name
  bases_S2489C22, 31,
  &(vtc_S2489C22[0]), // expected_vtbl_contents
  &(vtt_S2489C22[0]), // expected_vtt_contents
  ABISELECT(79408,44284), // object size
  NSPAIRA(_ZTI8S2489C22),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S2489C22),147, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2489C22),86, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2489C15  : S2489C14 , S2489C16 , S2489C22 , S2489C21 {
  ::S2489C4 s2489c15f0;
  int s2489c15f1;
  int s2489c15f2;
  __tsi64 s2489c15f3;
  int s2489c15f4;
  void *s2489c15f5;
  int s2489c15f6;
  int s2489c15f7;
  int s2489c15f8;
  virtual  ~S2489C15(); // _ZN8S2489C15D2Ev
  S2489C15(); // tgen
};
//SIG(-1 S2489C15) C1{ BC2{ VBC3{ BC4{ m Fc Fi FL FU5{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC6{ VBC4 v1 v2 Fp Fp Fi Fi FU7{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU7 Fp FL:3 FC4 FL FU7} v3 Fp FD FC4[7] FD FU5 Fs FL FL} VBC8{ VBC4 VBC6 vd v4 FL FL FL FL Fi FU7 Fc[10] Fi} Fi Fp Fi FU7} BC9{ VBC10{ BC11{ vd m FU5} BC12{ VBC8 BC13{ BC4 VBC6 VBC8 VBC3 vd v5 Fc Fi[7] Fl[5] FL FL FL FU14{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} BC4 BC6 vd v6 v7 v8 FU7 Fi Fl Fc Fp FC3 Fs} VBC15{ VBC3 VBC6 VBC8 BC16{ BC13 vd v9 v10 Fp Fp Fp Fi FC17{} FL FL} VBC18{ v11 FD FC2[6] Fc Fp Fp Fi[6] Fi Fp FL Fp Fi Fp Fp} vd Fc Fs[3] FC19{ BC4 VBC6 VBC8 VBC3 VBC12 vd FL Fi Fp Fp FL}[10] FC3 FL FL:5 Fi Fp[6] FL[2] FL Fi} BC19 vd v12 v13 Fi FD Fl Fc:3 Fp FC6} Fc Fp FL Fi Fi Fi Fp FL FC20{ BC4 VBC3 VBC8 BC16 vd FD} FD FL Fi} BC21{ VBC22{ VBC13 VBC18 BC10 vd Fp[6] Fi Fs FC17 FC20 Fp Fi Fi Fc Fc FU5} BC3 v14 v15 FL Fs FL:0 Fp Fp FD[10] Fi Fp Fp Fi Fl Fp} BC19 vd FU5 Fi Fi FL Fi Fp Fi Fi Fi}


 S2489C15 ::~S2489C15(){ note_dtor("S2489C15", this);}
S2489C15 ::S2489C15(){ note_ctor("S2489C15", this);} // tgen

static void Test_S2489C15()
{
  extern Class_Descriptor cd_S2489C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5380,12007)];
    init_test(&cd_S2489C15, buf);
    S2489C15 *dp, &lv = *(dp=new (buf) S2489C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(86064,48024), "sizeof(S2489C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C15)");
    /*is_ambiguous_... S2489C15::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C5*), ABISELECT(5392,3068), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C5*), ABISELECT(6576,3732), "S2489C15");
    check_base_class_offset(lv, (S2489C3*)(S2489C8*), ABISELECT(6576,3732), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*), ABISELECT(6576,3732), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C19*)(S2489C17*), ABISELECT(6576,3732), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C19*), ABISELECT(6576,3732), "S2489C15");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(6576,3732), "S2489C15");
    /*is_ambiguous_... S2489C22::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C5*)(S2489C22*), ABISELECT(6576,3732), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C5*), ABISELECT(5008,2864), "S2489C15");
    check_base_class_offset(lv, (S2489C5*)(S2489C14*), ABISELECT(5008,2864), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(5008,2864), "S2489C15");
    check_base_class_offset(lv, (S2489C5*)(S2489C20*), ABISELECT(5008,2864), "S2489C15");
    check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(5008,2864), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C21*)(S2489C17*), ABISELECT(5008,2864), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C19*), ABISELECT(5008,2864), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C10*), ABISELECT(5008,2864), "S2489C15");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(5008,2864), "S2489C15");
    check_base_class_offset(lv, (S2489C5*)(S2489C21*)(S2489C17*)(S2489C23*), ABISELECT(5008,2864), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C21 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C21*), ABISELECT(5008,2864), "S2489C15");
    check_base_class_offset(lv, (S2489C6*)(S2489C8*), ABISELECT(6832,3888), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(6832,3888), "S2489C15");
    /*is_ambiguous_... S2489C20::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C20*), ABISELECT(6832,3888), "S2489C15");
    /*is_ambiguous_... S2489C10::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(6832,3888), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C21*)(S2489C17*), ABISELECT(6832,3888), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C19*), ABISELECT(6832,3888), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*), ABISELECT(6832,3888), "S2489C15");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(6832,3888), "S2489C15");
    /*is_ambiguous_... S2489C21::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C21*)(S2489C17*)(S2489C23*), ABISELECT(6832,3888), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C21 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C21*), ABISELECT(6832,3888), "S2489C15");
    check_base_class_offset(lv, (S2489C8*)(S2489C14*), ABISELECT(6704,3804), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C19*)(S2489C17*), ABISELECT(6704,3804), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(6704,3804), "S2489C15");
    check_base_class_offset(lv, (S2489C8*)(S2489C20*), ABISELECT(6704,3804), "S2489C15");
    check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(6704,3804), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C21*)(S2489C17*), ABISELECT(6704,3804), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C19*), ABISELECT(6704,3804), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C19*), ABISELECT(6704,3804), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C10*), ABISELECT(6704,3804), "S2489C15");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(6704,3804), "S2489C15");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(6704,3804), "S2489C15");
    check_base_class_offset(lv, (S2489C8*)(S2489C21*)(S2489C17*)(S2489C23*), ABISELECT(6704,3804), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C21 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C21*), ABISELECT(6704,3804), "S2489C15");
    check_base_class_offset(lv, (S2489C14*), 0, "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C18*)(S2489C17*), ABISELECT(7216,4092), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(7328,4140), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(7312,4136), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C19*)(S2489C17*), ABISELECT(7600,4328), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C19*)(S2489C17*), ABISELECT(7728,4400), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C19*)(S2489C17*), ABISELECT(7312,4136), "S2489C15");
    /*is_ambiguous_... S2489C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(10688,6004), "S2489C15");
    check_base_class_offset(lv, (S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(10672,6000), "S2489C15");
    check_base_class_offset(lv, (S2489C9*)(S2489C20*), ABISELECT(10672,6000), "S2489C15");
    check_base_class_offset(lv, (S2489C13*)(S2489C20*), ABISELECT(62880,35124), "S2489C15");
    check_base_class_offset(lv, (S2489C13*)(S2489C23*), ABISELECT(62880,35124), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C20*)(S2489C17*), ABISELECT(10672,6000), "S2489C15");
    check_base_class_offset(lv, (S2489C20*)(S2489C17*)(S2489C23*), ABISELECT(10672,6000), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C21*)(S2489C17*), ABISELECT(9936,5596), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C19*), ABISELECT(76864,42844), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C10*)(S2489C19*), ABISELECT(76848,42840), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C19*), ABISELECT(77136,43032), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C19*), ABISELECT(77264,43104), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C19*)(S2489C21*)(S2489C17*), ABISELECT(76848,42840), "S2489C15");
    check_base_class_offset(lv, (S2489C19*)(S2489C21*)(S2489C17*)(S2489C23*), ABISELECT(76848,42840), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C21 */ AMB_check_base_class_offset(lv, (S2489C19*)(S2489C21*), ABISELECT(76848,42840), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C21*)(S2489C17*), ABISELECT(9920,5592), "S2489C15");
    check_base_class_offset(lv, (S2489C17*)(S2489C16*), ABISELECT(7216,4092), "S2489C15");
    check_base_class_offset(lv, (S2489C16*), ABISELECT(96,44), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*), ABISELECT(85792,47836), "S2489C15");
    /*is_ambiguous_... S2489C23::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C10*)(S2489C23*), ABISELECT(85776,47832), "S2489C15");
    check_base_class_offset(lv, (S2489C18*)(S2489C17*)(S2489C23*), ABISELECT(79456,44296), "S2489C15");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(79568,44344), "S2489C15");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C10*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(79552,44340), "S2489C15");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(79840,44532), "S2489C15");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(79968,44604), "S2489C15");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(79552,44340), "S2489C15");
    /*is_ambiguous_... S2489C21::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C21*)(S2489C17*)(S2489C23*), ABISELECT(82176,45800), "S2489C15");
    check_base_class_offset(lv, (S2489C21*)(S2489C17*)(S2489C23*), ABISELECT(82160,45796), "S2489C15");
    check_base_class_offset(lv, (S2489C17*)(S2489C23*), ABISELECT(79456,44296), "S2489C15");
    check_base_class_offset(lv, (S2489C23*)(S2489C22*), ABISELECT(79456,44296), "S2489C15");
    /*is_ambiguous_... S2489C22::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C5*)(S2489C22*), ABISELECT(3264,1856), "S2489C15");
    /*is_ambiguous_... S2489C22::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C5*)(S2489C22*), ABISELECT(2880,1652), "S2489C15");
    /*is_ambiguous_... S2489C22::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C22*), ABISELECT(2880,1652), "S2489C15");
    check_base_class_offset(lv, (S2489C22*), ABISELECT(2880,1652), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C21 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C21*), ABISELECT(4704,2688), "S2489C15");
    /*is_ambiguous_... S2489C15::S2489C21 */ AMB_check_base_class_offset(lv, (S2489C21*), ABISELECT(4688,2684), "S2489C15");
    check_field_offset(lv, s2489c15f0, ABISELECT(4880,2788), "S2489C15.s2489c15f0");
    check_field_offset(lv, s2489c15f1, ABISELECT(4960,2828), "S2489C15.s2489c15f1");
    check_field_offset(lv, s2489c15f2, ABISELECT(4964,2832), "S2489C15.s2489c15f2");
    check_field_offset(lv, s2489c15f3, ABISELECT(4968,2836), "S2489C15.s2489c15f3");
    check_field_offset(lv, s2489c15f4, ABISELECT(4976,2844), "S2489C15.s2489c15f4");
    check_field_offset(lv, s2489c15f5, ABISELECT(4984,2848), "S2489C15.s2489c15f5");
    check_field_offset(lv, s2489c15f6, ABISELECT(4992,2852), "S2489C15.s2489c15f6");
    check_field_offset(lv, s2489c15f7, ABISELECT(4996,2856), "S2489C15.s2489c15f7");
    check_field_offset(lv, s2489c15f8, ABISELECT(5000,2860), "S2489C15.s2489c15f8");
    test_class_info(&lv, &cd_S2489C15);
    dp->~S2489C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2489C15(Test_S2489C15, "S2489C15", ABISELECT(86064,48024));

#else // __cplusplus

extern void _ZN8S2489C15C1Ev();
extern void _ZN8S2489C15D2Ev();
Name_Map name_map_S2489C15[] = {
  NSPAIR(_ZN8S2489C15C1Ev),
  NSPAIR(_ZN8S2489C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C5;
extern VTBL_ENTRY _ZTI7S2489C5[];
extern  VTBL_ENTRY _ZTV7S2489C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C5[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C8;
extern VTBL_ENTRY _ZTI7S2489C8[];
extern  VTBL_ENTRY _ZTV7S2489C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C8[];
extern Class_Descriptor cd_S2489C14;
extern VTBL_ENTRY _ZTI8S2489C14[];
extern  VTBL_ENTRY _ZTV8S2489C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C14[];
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C19;
extern VTBL_ENTRY _ZTI8S2489C19[];
extern  VTBL_ENTRY _ZTV8S2489C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C19[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C9;
extern VTBL_ENTRY _ZTI7S2489C9[];
extern  VTBL_ENTRY _ZTV7S2489C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C9[];
extern Class_Descriptor cd_S2489C13;
extern VTBL_ENTRY _ZTI8S2489C13[];
extern  VTBL_ENTRY _ZTV8S2489C13[];
extern Class_Descriptor cd_S2489C20;
extern VTBL_ENTRY _ZTI8S2489C20[];
extern  VTBL_ENTRY _ZTV8S2489C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C20[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C19;
extern VTBL_ENTRY _ZTI8S2489C19[];
extern  VTBL_ENTRY _ZTV8S2489C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C19[];
extern Class_Descriptor cd_S2489C21;
extern VTBL_ENTRY _ZTI8S2489C21[];
extern  VTBL_ENTRY _ZTV8S2489C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C21[];
extern Class_Descriptor cd_S2489C17;
extern VTBL_ENTRY _ZTI8S2489C17[];
extern  VTBL_ENTRY _ZTV8S2489C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C17[];
extern Class_Descriptor cd_S2489C16;
extern VTBL_ENTRY _ZTI8S2489C16[];
extern  VTBL_ENTRY _ZTV8S2489C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C16[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C19;
extern VTBL_ENTRY _ZTI8S2489C19[];
extern  VTBL_ENTRY _ZTV8S2489C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C19[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C21;
extern VTBL_ENTRY _ZTI8S2489C21[];
extern  VTBL_ENTRY _ZTV8S2489C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C21[];
extern Class_Descriptor cd_S2489C17;
extern VTBL_ENTRY _ZTI8S2489C17[];
extern  VTBL_ENTRY _ZTV8S2489C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C17[];
extern Class_Descriptor cd_S2489C23;
extern VTBL_ENTRY _ZTI8S2489C23[];
extern  VTBL_ENTRY _ZTV8S2489C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C23[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C5;
extern VTBL_ENTRY _ZTI7S2489C5[];
extern  VTBL_ENTRY _ZTV7S2489C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C5[];
extern Class_Descriptor cd_S2489C22;
extern VTBL_ENTRY _ZTI8S2489C22[];
extern  VTBL_ENTRY _ZTV8S2489C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C22[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C21;
extern VTBL_ENTRY _ZTI8S2489C21[];
extern  VTBL_ENTRY _ZTV8S2489C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C21[];
static Base_Class bases_S2489C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(5392,3068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(6576,3732), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2489C6,    ABISELECT(5008,2864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2489C5,    ABISELECT(5008,2864), //bcp->offset
    53, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2489C6,    ABISELECT(6832,3888), //bcp->offset
    71, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2489C8,    ABISELECT(6704,3804), //bcp->offset
    62, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2489C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C18,    ABISELECT(7216,4092), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(7328,4140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(7312,4136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(7600,4328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(7728,4400), //bcp->offset
    112, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2489C19,    ABISELECT(7312,4136), //bcp->offset
    100, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(10688,6004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(10672,6000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2489C9,    ABISELECT(10672,6000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    91, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2489C13,    ABISELECT(62880,35124), //bcp->offset
    142, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S2489C20,    ABISELECT(10672,6000), //bcp->offset
    126, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(9936,5596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(76864,42844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(76848,42840), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    104, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(77136,43032), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(77264,43104), //bcp->offset
    165, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    108, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2489C19,    ABISELECT(76848,42840), //bcp->offset
    146, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S2489C21,    ABISELECT(9920,5592), //bcp->offset
    117, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2489C17,    ABISELECT(7216,4092), //bcp->offset
    78, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2489C16,    ABISELECT(96,44), //bcp->offset
    14, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(85792,47836), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(85776,47832), //bcp->offset
    219, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    152, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    38, //immediately_derived
  0, 1},
  {&cd_S2489C18,    ABISELECT(79456,44296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(79568,44344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(79552,44340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    116, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(79840,44532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(79968,44604), //bcp->offset
    205, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    120, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S2489C19,    ABISELECT(79552,44340), //bcp->offset
    193, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    115, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(82176,45800), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S2489C21,    ABISELECT(82160,45796), //bcp->offset
    210, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    125, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S2489C17,    ABISELECT(79456,44296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    114, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S2489C23,    ABISELECT(79456,44296), //bcp->offset
    170, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    113, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    42, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(3264,1856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(2880,1652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S2489C5,    ABISELECT(2880,1652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S2489C22,    ABISELECT(2880,1652), //bcp->offset
    26, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(4704,2688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S2489C21,    ABISELECT(4688,2684), //bcp->offset
    44, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2489C15[];
extern void _ZN8S2489C15D1Ev();
extern void _ZN8S2489C15D0Ev();
extern void ABISELECT(_ZThn96_N8S2489C15D1Ev,_ZThn44_N8S2489C15D1Ev)();
extern void ABISELECT(_ZThn96_N8S2489C15D0Ev,_ZThn44_N8S2489C15D0Ev)();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
extern void _ZN8S2489C223v14Ev();
extern void _ZN8S2489C223v15Ev();
extern void ABISELECT(_ZThn2880_N8S2489C15D1Ev,_ZThn1652_N8S2489C15D1Ev)();
extern void ABISELECT(_ZThn2880_N8S2489C15D0Ev,_ZThn1652_N8S2489C15D0Ev)();
extern void ABISELECT(_ZThn4688_N8S2489C15D1Ev,_ZThn2684_N8S2489C15D1Ev)();
extern void ABISELECT(_ZThn4688_N8S2489C15D0Ev,_ZThn2684_N8S2489C15D0Ev)();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S2489C15D1Ev,_ZTv0_n20_N8S2489C15D1Ev)();
extern void ABISELECT(_ZThn6704_N8S2489C15D1Ev,_ZThn3804_N8S2489C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C15D0Ev,_ZTv0_n20_N8S2489C15D0Ev)();
extern void ABISELECT(_ZThn6704_N8S2489C15D0Ev,_ZThn3804_N8S2489C15D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void ABISELECT(_ZTv0_n80_N8S2489C15D1Ev,_ZTv0_n40_N8S2489C15D1Ev)();
extern void ABISELECT(_ZThn7216_N8S2489C15D1Ev,_ZThn4092_N8S2489C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S2489C15D0Ev,_ZTv0_n40_N8S2489C15D0Ev)();
extern void ABISELECT(_ZThn7216_N8S2489C15D0Ev,_ZThn4092_N8S2489C15D0Ev)() __attribute__((weak));
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
extern void ABISELECT(_ZTvn96_n80_N8S2489C15D1Ev,_ZTvn44_n40_N8S2489C15D1Ev)();
extern void ABISELECT(_ZTvn96_n80_N8S2489C15D0Ev,_ZTvn44_n40_N8S2489C15D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void ABISELECT(_ZTvn2704_n80_N8S2489C15D1Ev,_ZTvn1500_n40_N8S2489C15D1Ev)();
extern void ABISELECT(_ZTvn2704_n80_N8S2489C15D0Ev,_ZTvn1500_n40_N8S2489C15D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S2489C15D1Ev,_ZTv0_n32_N8S2489C15D1Ev)();
extern void ABISELECT(_ZThn10672_N8S2489C15D1Ev,_ZThn6000_N8S2489C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2489C15D0Ev,_ZTv0_n32_N8S2489C15D0Ev)();
extern void ABISELECT(_ZThn10672_N8S2489C15D0Ev,_ZThn6000_N8S2489C15D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
extern void _ZN8S2489C133v11Ev();
extern void ABISELECT(_ZTv0_n56_N8S2489C15D1Ev,_ZTv0_n28_N8S2489C15D1Ev)();
extern void ABISELECT(_ZThn76848_N8S2489C15D1Ev,_ZThn42840_N8S2489C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C15D0Ev,_ZTv0_n28_N8S2489C15D0Ev)();
extern void ABISELECT(_ZThn76848_N8S2489C15D0Ev,_ZThn42840_N8S2489C15D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void ABISELECT(_ZTv0_n88_N8S2489C15D1Ev,_ZTv0_n44_N8S2489C15D1Ev)();
extern void ABISELECT(_ZThn79456_N8S2489C15D1Ev,_ZThn44296_N8S2489C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S2489C15D0Ev,_ZTv0_n44_N8S2489C15D0Ev)();
extern void ABISELECT(_ZThn79456_N8S2489C15D0Ev,_ZThn44296_N8S2489C15D0Ev)() __attribute__((weak));
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
extern void ABISELECT(_ZTvn96_n88_N8S2489C15D1Ev,_ZTvn44_n44_N8S2489C15D1Ev)();
extern void ABISELECT(_ZTvn96_n88_N8S2489C15D0Ev,_ZTvn44_n44_N8S2489C15D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void ABISELECT(_ZTvn2704_n88_N8S2489C15D1Ev,_ZTvn1500_n44_N8S2489C15D1Ev)();
extern void ABISELECT(_ZTvn2704_n88_N8S2489C15D0Ev,_ZTvn1500_n44_N8S2489C15D0Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2489C15D1Ev,_ZTv0_n28_N8S2489C15D1Ev)();
extern void ABISELECT(_ZThn85776_N8S2489C15D1Ev,_ZThn47832_N8S2489C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C15D0Ev,_ZTv0_n28_N8S2489C15D0Ev)();
extern void ABISELECT(_ZThn85776_N8S2489C15D0Ev,_ZThn47832_N8S2489C15D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY vtc_S2489C15[] = {
  ABISELECT(85776,47832),
  ABISELECT(79456,44296),
  ABISELECT(76848,42840),
  ABISELECT(62880,35124),
  ABISELECT(10672,6000),
  ABISELECT(7216,4092),
  ABISELECT(6832,3888),
  ABISELECT(6704,3804),
  ABISELECT(6576,3732),
  ABISELECT(5008,2864),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&_ZN8S2489C15D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C15D0Ev,
  ABISELECT(76752,42796),
  ABISELECT(62784,35080),
  ABISELECT(10576,5956),
  ABISELECT(4912,2820),
  ABISELECT(6736,3844),
  ABISELECT(6480,3688),
  ABISELECT(6608,3760),
  ABISELECT(7120,4048),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C15D1Ev,_ZThn44_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C15D0Ev,_ZThn44_N8S2489C15D0Ev),
  ABISELECT(73968,41188),
  ABISELECT(7792,4348),
  ABISELECT(60000,33472),
  ABISELECT(2128,1212),
  ABISELECT(3824,2152),
  ABISELECT(3952,2236),
  ABISELECT(82896,46180),
  ABISELECT(76576,42644),
  ABISELECT(3696,2080),
  ABISELECT(-2880,-1652),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
  (VTBL_ENTRY)&_ZN8S2489C223v14Ev,
  (VTBL_ENTRY)&_ZN8S2489C223v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2880_N8S2489C15D1Ev,_ZThn1652_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2880_N8S2489C15D0Ev,_ZThn1652_N8S2489C15D0Ev),
  ABISELECT(72160,40156),
  ABISELECT(320,180),
  ABISELECT(2016,1120),
  ABISELECT(1888,1048),
  ABISELECT(2144,1204),
  ABISELECT(-4688,-2684),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4688_N8S2489C15D1Ev,_ZThn2684_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4688_N8S2489C15D0Ev,_ZThn2684_N8S2489C15D0Ev),
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-5008,-2864),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
  0,
  ABISELECT(-6704,-3804),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(-6704,-3804),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C15D1Ev,_ZTv0_n20_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C15D0Ev,_ZTv0_n20_N8S2489C15D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-6832,-3888),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  ABISELECT(512,308),
  ABISELECT(512,308),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-7216,-4092),
  ABISELECT(69632,38748),
  ABISELECT(55664,31032),
  ABISELECT(3456,1908),
  ABISELECT(-2208,-1228),
  ABISELECT(-384,-204),
  ABISELECT(-640,-360),
  ABISELECT(-512,-288),
  ABISELECT(-7216,-4092),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2489C15D1Ev,_ZTv0_n40_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2489C15D0Ev,_ZTv0_n40_N8S2489C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
  ABISELECT(-2304,-1272),
  ABISELECT(-608,-332),
  ABISELECT(-736,-404),
  ABISELECT(-480,-248),
  ABISELECT(-7312,-4136),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2489C15D1Ev,_ZTvn44_n40_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2489C15D0Ev,_ZTvn44_n40_N8S2489C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
  ABISELECT(-1152,-668),
  ABISELECT(-7728,-4400),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  ABISELECT(66928,37248),
  ABISELECT(-4912,-2728),
  ABISELECT(-3216,-1788),
  ABISELECT(-3344,-1860),
  ABISELECT(-3088,-1704),
  ABISELECT(-9920,-5592),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2489C15D1Ev,_ZTvn1500_n40_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2489C15D0Ev,_ZTvn1500_n40_N8S2489C15D0Ev),
  0,
  0,
  0,
  ABISELECT(-10672,-6000),
  ABISELECT(52208,29124),
  ABISELECT(-5664,-3136),
  ABISELECT(-3968,-2196),
  ABISELECT(-4096,-2268),
  ABISELECT(-3840,-2112),
  ABISELECT(-10672,-6000),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C15D1Ev,_ZTv0_n32_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C15D0Ev,_ZTv0_n32_N8S2489C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
  0,
  ABISELECT(-62880,-35124),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-76848,-42840),
  ABISELECT(-71840,-39976),
  ABISELECT(-70144,-39036),
  ABISELECT(-70272,-39108),
  ABISELECT(-70016,-38952),
  ABISELECT(-76848,-42840),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C15D1Ev,_ZTv0_n28_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C15D0Ev,_ZTv0_n28_N8S2489C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
  ABISELECT(-70688,-39372),
  ABISELECT(-77264,-43104),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  ABISELECT(512,308),
  ABISELECT(512,308),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-79456,-44296),
  ABISELECT(6320,3536),
  ABISELECT(-2608,-1456),
  ABISELECT(-16576,-9172),
  ABISELECT(-68784,-38296),
  ABISELECT(-74448,-41432),
  ABISELECT(-72624,-40408),
  ABISELECT(-72880,-40564),
  ABISELECT(-72752,-40492),
  ABISELECT(-79456,-44296),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2489C15D1Ev,_ZTv0_n44_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2489C15D0Ev,_ZTv0_n44_N8S2489C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
  ABISELECT(-74544,-41476),
  ABISELECT(-72848,-40536),
  ABISELECT(-72976,-40608),
  ABISELECT(-72720,-40452),
  ABISELECT(-79552,-44340),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2489C15D1Ev,_ZTvn44_n44_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2489C15D0Ev,_ZTvn44_n44_N8S2489C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
  ABISELECT(-73392,-40872),
  ABISELECT(-79968,-44604),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  ABISELECT(-5312,-2956),
  ABISELECT(-77152,-42932),
  ABISELECT(-75456,-41992),
  ABISELECT(-75584,-42064),
  ABISELECT(-75328,-41908),
  ABISELECT(-82160,-45796),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2489C15D1Ev,_ZTvn1500_n44_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2489C15D0Ev,_ZTvn1500_n44_N8S2489C15D0Ev),
  0,
  ABISELECT(-85776,-47832),
  ABISELECT(-80768,-44968),
  ABISELECT(-79072,-44028),
  ABISELECT(-79200,-44100),
  ABISELECT(-78944,-43944),
  ABISELECT(-85776,-47832),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C15D1Ev,_ZTv0_n28_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C15D0Ev,_ZTv0_n28_N8S2489C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S2489C15[];
extern void _ZN8S2489C14D1Ev();
extern void _ZN8S2489C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C14__8S2489C15[] = {
  ABISELECT(6832,3888),
  ABISELECT(6704,3804),
  ABISELECT(6576,3732),
  ABISELECT(5008,2864),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C14[0]),
  (VTBL_ENTRY)&_ZN8S2489C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C14D0Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C14__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-5008,-2864),
  (VTBL_ENTRY)&(_ZTI8S2489C14[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C14D1Ev,_ZTv0_n20_N8S2489C14D1Ev)();
extern void ABISELECT(_ZThn6704_N8S2489C14D1Ev,_ZThn3804_N8S2489C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C14D0Ev,_ZTv0_n20_N8S2489C14D0Ev)();
extern void ABISELECT(_ZThn6704_N8S2489C14D0Ev,_ZThn3804_N8S2489C14D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C14__8S2489C15[] = {
  0,
  ABISELECT(-6704,-3804),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(-6704,-3804),
  (VTBL_ENTRY)&(_ZTI8S2489C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C14D1Ev,_ZTv0_n20_N8S2489C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C14D0Ev,_ZTv0_n20_N8S2489C14D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A1__8S2489C14__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-6832,-3888),
  (VTBL_ENTRY)&(_ZTI8S2489C14[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C16D1Ev();
extern void _ZN8S2489C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C16__8S2489C15[] = {
  ABISELECT(76752,42796),
  ABISELECT(62784,35080),
  ABISELECT(10576,5956),
  ABISELECT(4912,2820),
  ABISELECT(6736,3844),
  ABISELECT(6480,3688),
  ABISELECT(6608,3760),
  ABISELECT(7120,4048),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&_ZN8S2489C16D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C16D0Ev,
};
extern void ABISELECT(_ZTv0_n80_N8S2489C16D1Ev,_ZTv0_n40_N8S2489C16D1Ev)();
extern void ABISELECT(_ZThn7120_N8S2489C16D1Ev,_ZThn4048_N8S2489C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S2489C16D0Ev,_ZTv0_n40_N8S2489C16D0Ev)();
extern void ABISELECT(_ZThn7120_N8S2489C16D0Ev,_ZThn4048_N8S2489C16D0Ev)() __attribute__((weak));
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C17__8S2489C16__8S2489C15[] = {
  ABISELECT(512,308),
  ABISELECT(512,308),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-7120,-4048),
  ABISELECT(69632,38748),
  ABISELECT(55664,31032),
  ABISELECT(3456,1908),
  ABISELECT(-2208,-1228),
  ABISELECT(-384,-204),
  ABISELECT(-640,-360),
  ABISELECT(-512,-288),
  ABISELECT(-7120,-4048),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2489C16D1Ev,_ZTv0_n40_N8S2489C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2489C16D0Ev,_ZTv0_n40_N8S2489C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
};
extern void ABISELECT(_ZTvn96_n80_N8S2489C16D1Ev,_ZTvn44_n40_N8S2489C16D1Ev)();
extern void ABISELECT(_ZTvn96_n80_N8S2489C16D0Ev,_ZTvn44_n40_N8S2489C16D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C198S2489C17__8S2489C16__8S2489C15[] = {
  ABISELECT(-2304,-1272),
  ABISELECT(-608,-332),
  ABISELECT(-736,-404),
  ABISELECT(-480,-248),
  ABISELECT(-7216,-4092),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2489C16D1Ev,_ZTvn44_n40_N8S2489C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2489C16D0Ev,_ZTvn44_n40_N8S2489C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C16D1Ev,_ZTv0_n20_N8S2489C16D1Ev)();
extern void ABISELECT(_ZThn6608_N8S2489C16D1Ev,_ZThn3760_N8S2489C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C16D0Ev,_ZTv0_n20_N8S2489C16D0Ev)();
extern void ABISELECT(_ZThn6608_N8S2489C16D0Ev,_ZThn3760_N8S2489C16D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C16__8S2489C15[] = {
  0,
  ABISELECT(-6608,-3760),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(-6608,-3760),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C16D1Ev,_ZTv0_n20_N8S2489C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C16D0Ev,_ZTv0_n20_N8S2489C16D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C16__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-6736,-3844),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C16__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-4912,-2820),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C198S2489C17__A2__8S2489C16__8S2489C15[] = {
  ABISELECT(-1152,-668),
  ABISELECT(-7632,-4356),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2489C16D1Ev,_ZTv0_n32_N8S2489C16D1Ev)();
extern void ABISELECT(_ZThn10576_N8S2489C16D1Ev,_ZThn5956_N8S2489C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2489C16D0Ev,_ZTv0_n32_N8S2489C16D0Ev)();
extern void ABISELECT(_ZThn10576_N8S2489C16D0Ev,_ZThn5956_N8S2489C16D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C16__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(-10576,-5956),
  ABISELECT(52208,29124),
  ABISELECT(-5664,-3136),
  ABISELECT(-3968,-2196),
  ABISELECT(-4096,-2268),
  ABISELECT(-3840,-2112),
  ABISELECT(-10576,-5956),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C16D1Ev,_ZTv0_n32_N8S2489C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C16D0Ev,_ZTv0_n32_N8S2489C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C16__8S2489C15[] = {
  0,
  ABISELECT(-62784,-35080),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void ABISELECT(_ZTvn2704_n80_N8S2489C16D1Ev,_ZTvn1500_n40_N8S2489C16D1Ev)();
extern void ABISELECT(_ZTvn2704_n80_N8S2489C16D0Ev,_ZTvn1500_n40_N8S2489C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2489C218S2489C17__8S2489C16__8S2489C15[] = {
  ABISELECT(66928,37248),
  ABISELECT(-4912,-2728),
  ABISELECT(-3216,-1788),
  ABISELECT(-3344,-1860),
  ABISELECT(-3088,-1704),
  ABISELECT(-9824,-5548),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2489C16D1Ev,_ZTvn1500_n40_N8S2489C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2489C16D0Ev,_ZTvn1500_n40_N8S2489C16D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2489C16D1Ev,_ZTv0_n28_N8S2489C16D1Ev)();
extern void ABISELECT(_ZThn76752_N8S2489C16D1Ev,_ZThn42796_N8S2489C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C16D0Ev,_ZTv0_n28_N8S2489C16D0Ev)();
extern void ABISELECT(_ZThn76752_N8S2489C16D0Ev,_ZThn42796_N8S2489C16D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C16__8S2489C15[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-76752,-42796),
  ABISELECT(-71840,-39976),
  ABISELECT(-70144,-39036),
  ABISELECT(-70272,-39108),
  ABISELECT(-70016,-38952),
  ABISELECT(-76752,-42796),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C16D1Ev,_ZTv0_n28_N8S2489C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C16D0Ev,_ZTv0_n28_N8S2489C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C16__8S2489C15[] = {
  ABISELECT(-70688,-39372),
  ABISELECT(-77168,-43060),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
extern void _ZN8S2489C223v14Ev();
extern void _ZN8S2489C223v15Ev();
extern void _ZN8S2489C22D1Ev();
extern void _ZN8S2489C22D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C22__8S2489C15[] = {
  ABISELECT(73968,41188),
  ABISELECT(7792,4348),
  ABISELECT(60000,33472),
  ABISELECT(2128,1212),
  ABISELECT(3824,2152),
  ABISELECT(3952,2236),
  ABISELECT(82896,46180),
  ABISELECT(76576,42644),
  ABISELECT(3696,2080),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
  (VTBL_ENTRY)&_ZN8S2489C223v14Ev,
  (VTBL_ENTRY)&_ZN8S2489C223v15Ev,
  (VTBL_ENTRY)&_ZN8S2489C22D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C22D0Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C58S2489C22__A1__8S2489C15[] = {
  ABISELECT(3696,2080),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C5[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C67S2489C58S2489C22__A5__8S2489C15[] = {
  ABISELECT(3696,2080),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n88_N8S2489C22D1Ev,_ZTv0_n44_N8S2489C22D1Ev)();
extern void ABISELECT(_ZThn76576_N8S2489C22D1Ev,_ZThn42644_N8S2489C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S2489C22D0Ev,_ZTv0_n44_N8S2489C22D0Ev)();
extern void ABISELECT(_ZThn76576_N8S2489C22D0Ev,_ZThn42644_N8S2489C22D0Ev)() __attribute__((weak));
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C23__8S2489C22__8S2489C15[] = {
  ABISELECT(512,308),
  ABISELECT(512,308),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-76576,-42644),
  ABISELECT(6320,3536),
  ABISELECT(-2608,-1456),
  ABISELECT(-16576,-9172),
  ABISELECT(-68784,-38296),
  ABISELECT(-74448,-41432),
  ABISELECT(-72624,-40408),
  ABISELECT(-72880,-40564),
  ABISELECT(-72752,-40492),
  ABISELECT(-76576,-42644),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2489C22D1Ev,_ZTv0_n44_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2489C22D0Ev,_ZTv0_n44_N8S2489C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2489C22D1Ev,_ZTv0_n28_N8S2489C22D1Ev)();
extern void ABISELECT(_ZThn82896_N8S2489C22D1Ev,_ZThn46180_N8S2489C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C22D0Ev,_ZTv0_n28_N8S2489C22D0Ev)();
extern void ABISELECT(_ZThn82896_N8S2489C22D0Ev,_ZThn46180_N8S2489C22D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C10__8S2489C22__8S2489C15[] = {
  0,
  ABISELECT(-82896,-46180),
  ABISELECT(-80768,-44968),
  ABISELECT(-79072,-44028),
  ABISELECT(-79200,-44100),
  ABISELECT(-78944,-43944),
  ABISELECT(-82896,-46180),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C22D1Ev,_ZTv0_n28_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C22D0Ev,_ZTv0_n28_N8S2489C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C22__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-3952,-2236),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C22D1Ev,_ZTv0_n20_N8S2489C22D1Ev)();
extern void ABISELECT(_ZThn3824_N8S2489C22D1Ev,_ZThn2152_N8S2489C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C22D0Ev,_ZTv0_n20_N8S2489C22D0Ev)();
extern void ABISELECT(_ZThn3824_N8S2489C22D0Ev,_ZThn2152_N8S2489C22D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C22__8S2489C15[] = {
  0,
  ABISELECT(-3824,-2152),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(-3824,-2152),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C22D1Ev,_ZTv0_n20_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C22D0Ev,_ZTv0_n20_N8S2489C22D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C22__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-2128,-1212),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C22__8S2489C15[] = {
  0,
  ABISELECT(-60000,-33472),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void ABISELECT(_ZTvn96_n88_N8S2489C22D1Ev,_ZTvn44_n44_N8S2489C22D1Ev)();
extern void ABISELECT(_ZTvn96_n88_N8S2489C22D0Ev,_ZTvn44_n44_N8S2489C22D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C198S2489C178S2489C23__8S2489C22__8S2489C15[] = {
  ABISELECT(-74544,-41476),
  ABISELECT(-72848,-40536),
  ABISELECT(-72976,-40608),
  ABISELECT(-72720,-40452),
  ABISELECT(-76672,-42688),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2489C22D1Ev,_ZTvn44_n44_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2489C22D0Ev,_ZTvn44_n44_N8S2489C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C198S2489C178S2489C23__A2__8S2489C22__8S2489C15[] = {
  ABISELECT(-73392,-40872),
  ABISELECT(-77088,-42952),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2489C22D1Ev,_ZTv0_n32_N8S2489C22D1Ev)();
extern void ABISELECT(_ZThn7792_N8S2489C22D1Ev,_ZThn4348_N8S2489C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2489C22D0Ev,_ZTv0_n32_N8S2489C22D0Ev)();
extern void ABISELECT(_ZThn7792_N8S2489C22D0Ev,_ZThn4348_N8S2489C22D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C22__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(-7792,-4348),
  ABISELECT(52208,29124),
  ABISELECT(-5664,-3136),
  ABISELECT(-3968,-2196),
  ABISELECT(-4096,-2268),
  ABISELECT(-3840,-2112),
  ABISELECT(-7792,-4348),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C22D1Ev,_ZTv0_n32_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C22D0Ev,_ZTv0_n32_N8S2489C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void ABISELECT(_ZTvn2704_n88_N8S2489C22D1Ev,_ZTvn1500_n44_N8S2489C22D1Ev)();
extern void ABISELECT(_ZTvn2704_n88_N8S2489C22D0Ev,_ZTvn1500_n44_N8S2489C22D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2489C218S2489C178S2489C23__8S2489C22__8S2489C15[] = {
  ABISELECT(-5312,-2956),
  ABISELECT(-77152,-42932),
  ABISELECT(-75456,-41992),
  ABISELECT(-75584,-42064),
  ABISELECT(-75328,-41908),
  ABISELECT(-79280,-44144),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2489C22D1Ev,_ZTvn1500_n44_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2489C22D0Ev,_ZTvn1500_n44_N8S2489C22D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2489C22D1Ev,_ZTv0_n28_N8S2489C22D1Ev)();
extern void ABISELECT(_ZThn73968_N8S2489C22D1Ev,_ZThn41188_N8S2489C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C22D0Ev,_ZTv0_n28_N8S2489C22D0Ev)();
extern void ABISELECT(_ZThn73968_N8S2489C22D0Ev,_ZThn41188_N8S2489C22D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C22__8S2489C15[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-73968,-41188),
  ABISELECT(-71840,-39976),
  ABISELECT(-70144,-39036),
  ABISELECT(-70272,-39108),
  ABISELECT(-70016,-38952),
  ABISELECT(-73968,-41188),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C22D1Ev,_ZTv0_n28_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C22D0Ev,_ZTv0_n28_N8S2489C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C22__8S2489C15[] = {
  ABISELECT(-70688,-39372),
  ABISELECT(-74384,-41452),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C21D1Ev();
extern void _ZN8S2489C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C21__A2__8S2489C15[] = {
  ABISELECT(72160,40156),
  ABISELECT(320,180),
  ABISELECT(2016,1120),
  ABISELECT(1888,1048),
  ABISELECT(2144,1204),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN8S2489C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C21D0Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C21__A2__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-2144,-1204),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev)();
extern void ABISELECT(_ZThn2016_N8S2489C21D1Ev,_ZThn1120_N8S2489C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev)();
extern void ABISELECT(_ZThn2016_N8S2489C21D0Ev,_ZThn1120_N8S2489C21D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C21__A2__8S2489C15[] = {
  0,
  ABISELECT(-2016,-1120),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(-2016,-1120),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C21__A2__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-320,-180),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev)();
extern void ABISELECT(_ZThn72160_N8S2489C21D1Ev,_ZThn40156_N8S2489C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev)();
extern void ABISELECT(_ZThn72160_N8S2489C21D0Ev,_ZThn40156_N8S2489C21D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__8S2489C21__A2__8S2489C15[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-72160,-40156),
  ABISELECT(-71840,-39976),
  ABISELECT(-70144,-39036),
  ABISELECT(-70272,-39108),
  ABISELECT(-70016,-38952),
  ABISELECT(-72160,-40156),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A2__8S2489C21__A2__8S2489C15[] = {
  ABISELECT(-70688,-39372),
  ABISELECT(-72576,-40420),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C15[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C5[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C67S2489C5__8S2489C15[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C8D1Ev();
extern void _ZN7S2489C8D0Ev();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C15[] = {
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C8__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A1__8S2489C15[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C17D1Ev();
extern void _ZN8S2489C17D0Ev();
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C17__8S2489C15[] = {
  ABISELECT(69632,38748),
  ABISELECT(55664,31032),
  ABISELECT(3456,1908),
  ABISELECT(-2208,-1228),
  ABISELECT(-384,-204),
  ABISELECT(-640,-360),
  ABISELECT(-512,-288),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN8S2489C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C17D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
};
extern void _ZN8S2489C19D1Ev();
extern void _ZN8S2489C19D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C198S2489C17__8S2489C15[] = {
  ABISELECT(-2304,-1272),
  ABISELECT(-608,-332),
  ABISELECT(-736,-404),
  ABISELECT(-480,-248),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN8S2489C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C108S2489C198S2489C17__8S2489C15[] = {
  ABISELECT(-2304,-1272),
  ABISELECT(-608,-332),
  ABISELECT(-736,-404),
  ABISELECT(-480,-248),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C108S2489C198S2489C17__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(480,248),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C108S2489C198S2489C17__8S2489C15[] = {
  0,
  ABISELECT(608,332),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(608,332),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C108S2489C198S2489C17__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(2304,1272),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C198S2489C17__A2__8S2489C15[] = {
  ABISELECT(-1152,-668),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C198S2489C17__8S2489C15[] = {
  0,
  ABISELECT(608,332),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(608,332),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C198S2489C17__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(480,248),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C198S2489C17__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(2304,1272),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A__8S2489C198S2489C17__8S2489C15[] = {
  ABISELECT(-1152,-668),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C21D1Ev();
extern void _ZN8S2489C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C218S2489C17__8S2489C15[] = {
  ABISELECT(66928,37248),
  ABISELECT(-4912,-2728),
  ABISELECT(-3216,-1788),
  ABISELECT(-3344,-1860),
  ABISELECT(-3088,-1704),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN8S2489C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C21D0Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C218S2489C17__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(3088,1704),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C218S2489C17__8S2489C15[] = {
  0,
  ABISELECT(3216,1788),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(3216,1788),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C218S2489C17__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(4912,2728),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev)();
extern void ABISELECT(_ZThn66928_N8S2489C21D1Ev,_ZThn37248_N8S2489C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev)();
extern void ABISELECT(_ZThn66928_N8S2489C21D0Ev,_ZThn37248_N8S2489C21D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__8S2489C218S2489C17__8S2489C15[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-66928,-37248),
  ABISELECT(-71840,-39976),
  ABISELECT(-70144,-39036),
  ABISELECT(-70272,-39108),
  ABISELECT(-70016,-38952),
  ABISELECT(-66928,-37248),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A2__8S2489C218S2489C17__8S2489C15[] = {
  ABISELECT(-70688,-39372),
  ABISELECT(-67344,-37512),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZThn96_N8S2489C17D1Ev,_ZThn44_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S2489C17D0Ev,_ZThn44_N8S2489C17D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A__8S2489C17__8S2489C15[] = {
  ABISELECT(-2304,-1272),
  ABISELECT(-608,-332),
  ABISELECT(-736,-404),
  ABISELECT(-480,-248),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C17D1Ev,_ZThn44_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C17D0Ev,_ZThn44_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C17__8S2489C15[] = {
  0,
  ABISELECT(512,288),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(512,288),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C17__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C17__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(2208,1228),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A2__8S2489C17__8S2489C15[] = {
  ABISELECT(-1152,-668),
  ABISELECT(-512,-308),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn3456_N8S2489C17D1Ev,_ZThn1908_N8S2489C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev)();
extern void ABISELECT(_ZThn3456_N8S2489C17D0Ev,_ZThn1908_N8S2489C17D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C17__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(-3456,-1908),
  ABISELECT(52208,29124),
  ABISELECT(-5664,-3136),
  ABISELECT(-3968,-2196),
  ABISELECT(-4096,-2268),
  ABISELECT(-3840,-2112),
  ABISELECT(-3456,-1908),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C17__8S2489C15[] = {
  0,
  ABISELECT(-55664,-31032),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void ABISELECT(_ZThn2704_N8S2489C17D1Ev,_ZThn1500_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2489C17D0Ev,_ZThn1500_N8S2489C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2489C21__8S2489C17__8S2489C15[] = {
  ABISELECT(66928,37248),
  ABISELECT(-4912,-2728),
  ABISELECT(-3216,-1788),
  ABISELECT(-3344,-1860),
  ABISELECT(-3088,-1704),
  ABISELECT(-2704,-1500),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C17D1Ev,_ZThn1500_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C17D0Ev,_ZThn1500_N8S2489C17D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn69632_N8S2489C17D1Ev,_ZThn38748_N8S2489C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev)();
extern void ABISELECT(_ZThn69632_N8S2489C17D0Ev,_ZThn38748_N8S2489C17D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C17__8S2489C15[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-69632,-38748),
  ABISELECT(-71840,-39976),
  ABISELECT(-70144,-39036),
  ABISELECT(-70272,-39108),
  ABISELECT(-70016,-38952),
  ABISELECT(-69632,-38748),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C17__8S2489C15[] = {
  ABISELECT(-70688,-39372),
  ABISELECT(-70048,-39012),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C20D1Ev();
extern void _ZN8S2489C20D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C15[] = {
  ABISELECT(52208,29124),
  ABISELECT(-5664,-3136),
  ABISELECT(-3968,-2196),
  ABISELECT(-4096,-2268),
  ABISELECT(-3840,-2112),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN8S2489C20D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C20D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN7S2489C9D1Ev();
extern void _ZN7S2489C9D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C98S2489C20__8S2489C15[] = {
  ABISELECT(-5664,-3136),
  ABISELECT(-3968,-2196),
  ABISELECT(-4096,-2268),
  ABISELECT(-3840,-2112),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C107S2489C98S2489C20__A1__8S2489C15[] = {
  ABISELECT(-5664,-3136),
  ABISELECT(-3968,-2196),
  ABISELECT(-4096,-2268),
  ABISELECT(-3840,-2112),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C107S2489C98S2489C20__A1__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(3840,2112),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C107S2489C98S2489C20__A1__8S2489C15[] = {
  0,
  ABISELECT(3968,2196),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(3968,2196),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C107S2489C98S2489C20__A1__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(5664,3136),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C98S2489C20__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(3840,2112),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__7S2489C98S2489C20__8S2489C15[] = {
  0,
  ABISELECT(3968,2196),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(3968,2196),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__7S2489C98S2489C20__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(5664,3136),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C20__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(5664,3136),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A1__8S2489C20__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(3840,2112),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C20D1Ev,_ZTv0_n20_N8S2489C20D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C20D0Ev,_ZTv0_n20_N8S2489C20D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C20__8S2489C15[] = {
  0,
  ABISELECT(3968,2196),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(3968,2196),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C20D1Ev,_ZTv0_n20_N8S2489C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C20D0Ev,_ZTv0_n20_N8S2489C20D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C20__8S2489C15[] = {
  0,
  ABISELECT(-52208,-29124),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void _ZN8S2489C19D1Ev();
extern void _ZN8S2489C19D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C15[] = {
  ABISELECT(-71840,-39976),
  ABISELECT(-70144,-39036),
  ABISELECT(-70272,-39108),
  ABISELECT(-70016,-38952),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN8S2489C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C108S2489C19__A2__8S2489C15[] = {
  ABISELECT(-71840,-39976),
  ABISELECT(-70144,-39036),
  ABISELECT(-70272,-39108),
  ABISELECT(-70016,-38952),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C108S2489C19__A2__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(70016,38952),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C108S2489C19__A2__8S2489C15[] = {
  0,
  ABISELECT(70144,39036),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(70144,39036),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C108S2489C19__A2__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(71840,39976),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C15[] = {
  ABISELECT(-70688,-39372),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C19__A1__8S2489C15[] = {
  0,
  ABISELECT(70144,39036),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(70144,39036),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C19__A1__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(70016,38952),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C19__A1__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(71840,39976),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A__8S2489C19__A1__8S2489C15[] = {
  ABISELECT(-70688,-39372),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C23D1Ev();
extern void _ZN8S2489C23D0Ev();
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C23__8S2489C15[] = {
  ABISELECT(6320,3536),
  ABISELECT(-2608,-1456),
  ABISELECT(-16576,-9172),
  ABISELECT(-68784,-38296),
  ABISELECT(-74448,-41432),
  ABISELECT(-72624,-40408),
  ABISELECT(-72880,-40564),
  ABISELECT(-72752,-40492),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN8S2489C23D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C23D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
};
extern void _ZN8S2489C17D1Ev();
extern void _ZN8S2489C17D0Ev();
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C178S2489C23__A1__8S2489C15[] = {
  ABISELECT(-2608,-1456),
  ABISELECT(-16576,-9172),
  ABISELECT(-68784,-38296),
  ABISELECT(-74448,-41432),
  ABISELECT(-72624,-40408),
  ABISELECT(-72880,-40564),
  ABISELECT(-72752,-40492),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN8S2489C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C17D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
};
extern void _ZN8S2489C19D1Ev();
extern void _ZN8S2489C19D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C198S2489C178S2489C23__A2__8S2489C15[] = {
  ABISELECT(-74544,-41476),
  ABISELECT(-72848,-40536),
  ABISELECT(-72976,-40608),
  ABISELECT(-72720,-40452),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN8S2489C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C108S2489C198S2489C178S2489C23__A4__8S2489C15[] = {
  ABISELECT(-74544,-41476),
  ABISELECT(-72848,-40536),
  ABISELECT(-72976,-40608),
  ABISELECT(-72720,-40452),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C108S2489C198S2489C178S2489C23__A4__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(72720,40452),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C108S2489C198S2489C178S2489C23__A4__8S2489C15[] = {
  0,
  ABISELECT(72848,40536),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(72848,40536),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C108S2489C198S2489C178S2489C23__A4__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(74544,41476),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C198S2489C178S2489C23__A4__8S2489C15[] = {
  ABISELECT(-73392,-40872),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C198S2489C178S2489C23__A2__8S2489C15[] = {
  0,
  ABISELECT(72848,40536),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(72848,40536),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C198S2489C178S2489C23__A2__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(72720,40452),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C198S2489C178S2489C23__A2__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(74544,41476),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A__8S2489C198S2489C178S2489C23__A2__8S2489C15[] = {
  ABISELECT(-73392,-40872),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C21D1Ev();
extern void _ZN8S2489C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C218S2489C178S2489C23__A1__8S2489C15[] = {
  ABISELECT(-5312,-2956),
  ABISELECT(-77152,-42932),
  ABISELECT(-75456,-41992),
  ABISELECT(-75584,-42064),
  ABISELECT(-75328,-41908),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN8S2489C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C21D0Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C218S2489C178S2489C23__A1__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(75328,41908),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C218S2489C178S2489C23__A1__8S2489C15[] = {
  0,
  ABISELECT(75456,41992),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(75456,41992),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C218S2489C178S2489C23__A1__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(77152,42932),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__8S2489C218S2489C178S2489C23__A1__8S2489C15[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(5312,2956),
  ABISELECT(-71840,-39976),
  ABISELECT(-70144,-39036),
  ABISELECT(-70272,-39108),
  ABISELECT(-70016,-38952),
  ABISELECT(5312,2956),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A2__8S2489C218S2489C178S2489C23__A1__8S2489C15[] = {
  ABISELECT(-70688,-39372),
  ABISELECT(4896,2692),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZThn96_N8S2489C17D1Ev,_ZThn44_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S2489C17D0Ev,_ZThn44_N8S2489C17D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A__8S2489C178S2489C23__A1__8S2489C15[] = {
  ABISELECT(-74544,-41476),
  ABISELECT(-72848,-40536),
  ABISELECT(-72976,-40608),
  ABISELECT(-72720,-40452),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C17D1Ev,_ZThn44_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C17D0Ev,_ZThn44_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C178S2489C23__A1__8S2489C15[] = {
  0,
  ABISELECT(72752,40492),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(72752,40492),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C178S2489C23__A1__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(72624,40408),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C178S2489C23__A1__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(74448,41432),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A2__8S2489C178S2489C23__A1__8S2489C15[] = {
  ABISELECT(-73392,-40872),
  ABISELECT(-512,-308),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C178S2489C23__A1__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(68784,38296),
  ABISELECT(52208,29124),
  ABISELECT(-5664,-3136),
  ABISELECT(-3968,-2196),
  ABISELECT(-4096,-2268),
  ABISELECT(-3840,-2112),
  ABISELECT(68784,38296),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C178S2489C23__A1__8S2489C15[] = {
  0,
  ABISELECT(16576,9172),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void ABISELECT(_ZThn2704_N8S2489C17D1Ev,_ZThn1500_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2489C17D0Ev,_ZThn1500_N8S2489C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2489C21__8S2489C178S2489C23__A1__8S2489C15[] = {
  ABISELECT(-5312,-2956),
  ABISELECT(-77152,-42932),
  ABISELECT(-75456,-41992),
  ABISELECT(-75584,-42064),
  ABISELECT(-75328,-41908),
  ABISELECT(-2704,-1500),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C17D1Ev,_ZThn1500_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C17D0Ev,_ZThn1500_N8S2489C17D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C178S2489C23__A1__8S2489C15[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(2608,1456),
  ABISELECT(-71840,-39976),
  ABISELECT(-70144,-39036),
  ABISELECT(-70272,-39108),
  ABISELECT(-70016,-38952),
  ABISELECT(2608,1456),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C178S2489C23__A1__8S2489C15[] = {
  ABISELECT(-70688,-39372),
  ABISELECT(2192,1192),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev)();
extern void ABISELECT(_ZThn6320_N8S2489C23D1Ev,_ZThn3536_N8S2489C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev)();
extern void ABISELECT(_ZThn6320_N8S2489C23D0Ev,_ZThn3536_N8S2489C23D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C10__8S2489C23__8S2489C15[] = {
  0,
  ABISELECT(-6320,-3536),
  ABISELECT(-80768,-44968),
  ABISELECT(-79072,-44028),
  ABISELECT(-79200,-44100),
  ABISELECT(-78944,-43944),
  ABISELECT(-6320,-3536),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C23__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(72624,40408),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C23D1Ev,_ZTv0_n20_N8S2489C23D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C23D0Ev,_ZTv0_n20_N8S2489C23D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C23__8S2489C15[] = {
  0,
  ABISELECT(72752,40492),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(72752,40492),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C23D1Ev,_ZTv0_n20_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C23D0Ev,_ZTv0_n20_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C23__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(74448,41432),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C23__8S2489C15[] = {
  0,
  ABISELECT(16576,9172),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void ABISELECT(_ZThn96_N8S2489C23D1Ev,_ZThn44_N8S2489C23D1Ev)();
extern void ABISELECT(_ZThn96_N8S2489C23D0Ev,_ZThn44_N8S2489C23D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C198S2489C17__8S2489C23__8S2489C15[] = {
  ABISELECT(-74544,-41476),
  ABISELECT(-72848,-40536),
  ABISELECT(-72976,-40608),
  ABISELECT(-72720,-40452),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C23D1Ev,_ZThn44_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C23D0Ev,_ZThn44_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C198S2489C17__A2__8S2489C23__8S2489C15[] = {
  ABISELECT(-73392,-40872),
  ABISELECT(-512,-308),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2489C23D1Ev,_ZTv0_n32_N8S2489C23D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S2489C23D0Ev,_ZTv0_n32_N8S2489C23D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C23__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(68784,38296),
  ABISELECT(52208,29124),
  ABISELECT(-5664,-3136),
  ABISELECT(-3968,-2196),
  ABISELECT(-4096,-2268),
  ABISELECT(-3840,-2112),
  ABISELECT(68784,38296),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C23D1Ev,_ZTv0_n32_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C23D0Ev,_ZTv0_n32_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void ABISELECT(_ZThn2704_N8S2489C23D1Ev,_ZThn1500_N8S2489C23D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2489C23D0Ev,_ZThn1500_N8S2489C23D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2489C218S2489C17__8S2489C23__8S2489C15[] = {
  ABISELECT(-5312,-2956),
  ABISELECT(-77152,-42932),
  ABISELECT(-75456,-41992),
  ABISELECT(-75584,-42064),
  ABISELECT(-75328,-41908),
  ABISELECT(-2704,-1500),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C23D1Ev,_ZThn1500_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C23D0Ev,_ZThn1500_N8S2489C23D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C23__8S2489C15[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(2608,1456),
  ABISELECT(-71840,-39976),
  ABISELECT(-70144,-39036),
  ABISELECT(-70272,-39108),
  ABISELECT(-70016,-38952),
  ABISELECT(2608,1456),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C23__8S2489C15[] = {
  ABISELECT(-70688,-39372),
  ABISELECT(2192,1192),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C10__A3__8S2489C15[] = {
  ABISELECT(-80768,-44968),
  ABISELECT(-79072,-44028),
  ABISELECT(-79200,-44100),
  ABISELECT(-78944,-43944),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C10__A3__8S2489C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(78944,43944),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C10__A3__8S2489C15[] = {
  0,
  ABISELECT(79072,44028),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(79072,44028),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C10__A3__8S2489C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(80768,44968),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
static  VTT_ENTRY vtt_S2489C15[] = {
  {&(_ZTV8S2489C15[12]),  12,230},
  {&(_tg__ZTV8S2489C14__8S2489C15[6]),  6,8},
  {&(_tg__ZTV7S2489C5__8S2489C14__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C8__8S2489C14__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A1__8S2489C14__8S2489C15[5]),  5,7},
  {&(_tg__ZTV8S2489C16__8S2489C15[10]),  10,12},
  {&(_tg__ZTV8S2489C17__8S2489C16__8S2489C15[18]),  18,22},
  {&(_tg__ZTV8S2489C198S2489C17__8S2489C16__8S2489C15[6]),  6,12},
  {&(_tg__ZTV7S2489C8__8S2489C16__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C16__8S2489C15[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C16__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C198S2489C17__A2__8S2489C16__8S2489C15[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C16__8S2489C15[11]),  11,16},
  {&(_tg__ZTV8S2489C13__8S2489C16__8S2489C15[3]),  3,4},
  {&(_tg__ZTV8S2489C218S2489C17__8S2489C16__8S2489C15[7]),  7,9},
  {&(_tg__ZTV8S2489C19__A1__8S2489C16__8S2489C15[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C16__8S2489C15[3]),  3,5},
  {&(_tg__ZTV8S2489C22__8S2489C15[11]),  11,18},
  {&(_tg__ZTV7S2489C58S2489C22__A1__8S2489C15[3]),  3,6},
  {&(_tg__ZTV7S2489C67S2489C58S2489C22__A5__8S2489C15[3]),  3,5},
  {&(_tg__ZTV8S2489C23__8S2489C22__8S2489C15[19]),  19,23},
  {&(_tg__ZTV8S2489C10__8S2489C22__8S2489C15[8]),  8,11},
  {&(_tg__ZTV7S2489C6__8S2489C22__8S2489C15[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C22__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C22__8S2489C15[6]),  6,9},
  {&(_tg__ZTV8S2489C13__8S2489C22__8S2489C15[3]),  3,4},
  {&(_tg__ZTV8S2489C198S2489C178S2489C23__8S2489C22__8S2489C15[6]),  6,12},
  {&(_tg__ZTV7S2489C68S2489C198S2489C178S2489C23__A2__8S2489C22__8S2489C15[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C22__8S2489C15[11]),  11,16},
  {&(_tg__ZTV8S2489C218S2489C178S2489C23__8S2489C22__8S2489C15[7]),  7,9},
  {&(_tg__ZTV8S2489C19__A1__8S2489C22__8S2489C15[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C22__8S2489C15[3]),  3,5},
  {&(_tg__ZTV8S2489C21__A2__8S2489C15[7]),  7,9},
  {&(_tg__ZTV7S2489C6__8S2489C21__A2__8S2489C15[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C21__A2__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C21__A2__8S2489C15[6]),  6,9},
  {&(_tg__ZTV8S2489C19__8S2489C21__A2__8S2489C15[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A2__8S2489C21__A2__8S2489C15[3]),  3,5},
  {&(_ZTV8S2489C15[59]),  59,230},
  {&(_ZTV8S2489C15[68]),  68,230},
  {&(_ZTV8S2489C15[76]),  76,230},
  {&(_ZTV8S2489C15[24]),  24,230},
  {&(_ZTV8S2489C15[96]),  96,230},
  {&(_ZTV8S2489C15[106]),  106,230},
  {&(_ZTV8S2489C15[115]),  115,230},
  {&(_ZTV8S2489C15[137]),  137,230},
  {&(_ZTV8S2489C15[145]),  145,230},
  {&(_ZTV8S2489C15[124]),  124,230},
  {&(_ZTV8S2489C15[159]),  159,230},
  {&(_ZTV8S2489C15[168]),  168,230},
  {&(_ZTV8S2489C15[37]),  37,230},
  {&(_ZTV8S2489C15[189]),  189,230},
  {&(_ZTV8S2489C15[227]),  227,230},
  {&(_ZTV8S2489C15[199]),  199,230},
  {&(_ZTV8S2489C15[208]),  208,230},
  {&(_ZTV8S2489C15[217]),  217,230},
  {&(_ZTV8S2489C15[51]),  51,230},
  {&(_tg__ZTV7S2489C5__8S2489C15[3]),  3,6},
  {&(_tg__ZTV7S2489C67S2489C5__8S2489C15[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C15[4]),  4,7},
  {&(_tg__ZTV7S2489C6__7S2489C8__8S2489C15[5]),  5,7},
  {&(_tg__ZTV7S2489C6__A1__8S2489C15[3]),  3,5},
  {&(_tg__ZTV8S2489C17__8S2489C15[9]),  9,13},
  {&(_tg__ZTV8S2489C198S2489C17__8S2489C15[6]),  6,12},
  {&(_tg__ZTV8S2489C108S2489C198S2489C17__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C108S2489C198S2489C17__8S2489C15[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C108S2489C198S2489C17__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C108S2489C198S2489C17__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C198S2489C17__A2__8S2489C15[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C198S2489C17__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C198S2489C17__8S2489C15[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C198S2489C17__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A__8S2489C198S2489C17__8S2489C15[3]),  3,5},
  {&(_tg__ZTV8S2489C218S2489C17__8S2489C15[7]),  7,9},
  {&(_tg__ZTV7S2489C6__8S2489C218S2489C17__8S2489C15[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C218S2489C17__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C218S2489C17__8S2489C15[6]),  6,9},
  {&(_tg__ZTV8S2489C19__8S2489C218S2489C17__8S2489C15[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A2__8S2489C218S2489C17__8S2489C15[3]),  3,5},
  {&(_tg__ZTV8S2489C19__A__8S2489C17__8S2489C15[6]),  6,12},
  {&(_tg__ZTV7S2489C8__8S2489C17__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C17__8S2489C15[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C17__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C19__A2__8S2489C17__8S2489C15[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C17__8S2489C15[11]),  11,16},
  {&(_tg__ZTV8S2489C13__8S2489C17__8S2489C15[3]),  3,4},
  {&(_tg__ZTV8S2489C21__8S2489C17__8S2489C15[7]),  7,9},
  {&(_tg__ZTV8S2489C19__A1__8S2489C17__8S2489C15[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C17__8S2489C15[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C15[7]),  7,12},
  {&(_tg__ZTV7S2489C98S2489C20__8S2489C15[6]),  6,11},
  {&(_tg__ZTV8S2489C107S2489C98S2489C20__A1__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C107S2489C98S2489C20__A1__8S2489C15[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C107S2489C98S2489C20__A1__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C107S2489C98S2489C20__A1__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C6__7S2489C98S2489C20__8S2489C15[5]),  5,7},
  {&(_tg__ZTV7S2489C8__7S2489C98S2489C20__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C5__7S2489C98S2489C20__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C20__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A1__8S2489C20__8S2489C15[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C20__8S2489C15[6]),  6,9},
  {&(_tg__ZTV8S2489C13__8S2489C20__8S2489C15[3]),  3,4},
  {&(_tg__ZTV8S2489C19__A1__8S2489C15[6]),  6,12},
  {&(_tg__ZTV8S2489C108S2489C19__A2__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C108S2489C19__A2__8S2489C15[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C108S2489C19__A2__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C108S2489C19__A2__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C15[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C19__A1__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C19__A1__8S2489C15[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C19__A1__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A__8S2489C19__A1__8S2489C15[3]),  3,5},
  {&(_tg__ZTV8S2489C23__8S2489C15[10]),  10,14},
  {&(_tg__ZTV8S2489C178S2489C23__A1__8S2489C15[9]),  9,13},
  {&(_tg__ZTV8S2489C198S2489C178S2489C23__A2__8S2489C15[6]),  6,12},
  {&(_tg__ZTV8S2489C108S2489C198S2489C178S2489C23__A4__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C108S2489C198S2489C178S2489C23__A4__8S2489C15[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C108S2489C198S2489C178S2489C23__A4__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C108S2489C198S2489C178S2489C23__A4__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C198S2489C178S2489C23__A4__8S2489C15[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C198S2489C178S2489C23__A2__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C198S2489C178S2489C23__A2__8S2489C15[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C198S2489C178S2489C23__A2__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A__8S2489C198S2489C178S2489C23__A2__8S2489C15[3]),  3,5},
  {&(_tg__ZTV8S2489C218S2489C178S2489C23__A1__8S2489C15[7]),  7,9},
  {&(_tg__ZTV7S2489C6__8S2489C218S2489C178S2489C23__A1__8S2489C15[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C218S2489C178S2489C23__A1__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C218S2489C178S2489C23__A1__8S2489C15[6]),  6,9},
  {&(_tg__ZTV8S2489C19__8S2489C218S2489C178S2489C23__A1__8S2489C15[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A2__8S2489C218S2489C178S2489C23__A1__8S2489C15[3]),  3,5},
  {&(_tg__ZTV8S2489C19__A__8S2489C178S2489C23__A1__8S2489C15[6]),  6,12},
  {&(_tg__ZTV7S2489C8__8S2489C178S2489C23__A1__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C178S2489C23__A1__8S2489C15[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C178S2489C23__A1__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C19__A2__8S2489C178S2489C23__A1__8S2489C15[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C178S2489C23__A1__8S2489C15[11]),  11,16},
  {&(_tg__ZTV8S2489C13__8S2489C178S2489C23__A1__8S2489C15[3]),  3,4},
  {&(_tg__ZTV8S2489C21__8S2489C178S2489C23__A1__8S2489C15[7]),  7,9},
  {&(_tg__ZTV8S2489C19__A1__8S2489C178S2489C23__A1__8S2489C15[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C178S2489C23__A1__8S2489C15[3]),  3,5},
  {&(_tg__ZTV8S2489C10__8S2489C23__8S2489C15[8]),  8,11},
  {&(_tg__ZTV7S2489C6__8S2489C23__8S2489C15[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C23__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C23__8S2489C15[6]),  6,9},
  {&(_tg__ZTV8S2489C13__8S2489C23__8S2489C15[3]),  3,4},
  {&(_tg__ZTV8S2489C198S2489C17__8S2489C23__8S2489C15[6]),  6,12},
  {&(_tg__ZTV7S2489C68S2489C198S2489C17__A2__8S2489C23__8S2489C15[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C23__8S2489C15[11]),  11,16},
  {&(_tg__ZTV8S2489C218S2489C17__8S2489C23__8S2489C15[7]),  7,9},
  {&(_tg__ZTV8S2489C19__A1__8S2489C23__8S2489C15[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C23__8S2489C15[3]),  3,5},
  {&(_tg__ZTV8S2489C10__A3__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C10__A3__8S2489C15[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C10__A3__8S2489C15[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C10__A3__8S2489C15[6]),  6,9},
};
extern VTBL_ENTRY _ZTI8S2489C15[];
extern  VTBL_ENTRY _ZTV8S2489C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C15[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N8S2489C23D0Ev,_ZThn3536_N8S2489C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N8S2489C23D1Ev,_ZThn3536_N8S2489C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn69632_N8S2489C17D0Ev,_ZThn38748_N8S2489C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn69632_N8S2489C17D1Ev,_ZThn38748_N8S2489C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N8S2489C17D0Ev,_ZThn1908_N8S2489C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N8S2489C17D1Ev,_ZThn1908_N8S2489C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn66928_N8S2489C21D0Ev,_ZThn37248_N8S2489C21D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72160_N8S2489C21D0Ev,_ZThn40156_N8S2489C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn66928_N8S2489C21D1Ev,_ZThn37248_N8S2489C21D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72160_N8S2489C21D1Ev,_ZThn40156_N8S2489C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N8S2489C21D0Ev,_ZThn1120_N8S2489C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N8S2489C21D1Ev,_ZThn1120_N8S2489C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C22D0Ev,_ZTv0_n32_N8S2489C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7792_N8S2489C22D0Ev,_ZThn4348_N8S2489C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C22D1Ev,_ZTv0_n32_N8S2489C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7792_N8S2489C22D1Ev,_ZThn4348_N8S2489C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C22D0Ev,_ZTv0_n20_N8S2489C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3824_N8S2489C22D0Ev,_ZThn2152_N8S2489C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C22D1Ev,_ZTv0_n20_N8S2489C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3824_N8S2489C22D1Ev,_ZThn2152_N8S2489C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C22D0Ev,_ZTv0_n28_N8S2489C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn73968_N8S2489C22D0Ev,_ZThn41188_N8S2489C22D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn82896_N8S2489C22D0Ev,_ZThn46180_N8S2489C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C22D1Ev,_ZTv0_n28_N8S2489C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn73968_N8S2489C22D1Ev,_ZThn41188_N8S2489C22D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn82896_N8S2489C22D1Ev,_ZThn46180_N8S2489C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2489C22D0Ev,_ZTv0_n44_N8S2489C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn76576_N8S2489C22D0Ev,_ZThn42644_N8S2489C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2489C22D1Ev,_ZTv0_n44_N8S2489C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn76576_N8S2489C22D1Ev,_ZThn42644_N8S2489C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C16D0Ev,_ZTv0_n28_N8S2489C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn76752_N8S2489C16D0Ev,_ZThn42796_N8S2489C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C16D1Ev,_ZTv0_n28_N8S2489C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn76752_N8S2489C16D1Ev,_ZThn42796_N8S2489C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C16D0Ev,_ZTv0_n32_N8S2489C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10576_N8S2489C16D0Ev,_ZThn5956_N8S2489C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C16D1Ev,_ZTv0_n32_N8S2489C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10576_N8S2489C16D1Ev,_ZThn5956_N8S2489C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C16D0Ev,_ZTv0_n20_N8S2489C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6608_N8S2489C16D0Ev,_ZThn3760_N8S2489C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C16D1Ev,_ZTv0_n20_N8S2489C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6608_N8S2489C16D1Ev,_ZThn3760_N8S2489C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2489C16D0Ev,_ZTv0_n40_N8S2489C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2489C16D0Ev,_ZThn4048_N8S2489C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2489C16D1Ev,_ZTv0_n40_N8S2489C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2489C16D1Ev,_ZThn4048_N8S2489C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C14D0Ev,_ZTv0_n20_N8S2489C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N8S2489C14D0Ev,_ZThn3804_N8S2489C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C14D1Ev,_ZTv0_n20_N8S2489C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N8S2489C14D1Ev,_ZThn3804_N8S2489C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2489C15D0Ev,_ZTv0_n44_N8S2489C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn79456_N8S2489C15D0Ev,_ZThn44296_N8S2489C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2489C15D1Ev,_ZTv0_n44_N8S2489C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn79456_N8S2489C15D1Ev,_ZThn44296_N8S2489C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C15D0Ev,_ZTv0_n28_N8S2489C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn85776_N8S2489C15D0Ev,_ZThn47832_N8S2489C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn76848_N8S2489C15D0Ev,_ZThn42840_N8S2489C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C15D1Ev,_ZTv0_n28_N8S2489C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn85776_N8S2489C15D1Ev,_ZThn47832_N8S2489C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn76848_N8S2489C15D1Ev,_ZThn42840_N8S2489C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C15D0Ev,_ZTv0_n32_N8S2489C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10672_N8S2489C15D0Ev,_ZThn6000_N8S2489C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C15D1Ev,_ZTv0_n32_N8S2489C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10672_N8S2489C15D1Ev,_ZThn6000_N8S2489C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2489C15D0Ev,_ZTv0_n40_N8S2489C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7216_N8S2489C15D0Ev,_ZThn4092_N8S2489C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2489C15D1Ev,_ZTv0_n40_N8S2489C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7216_N8S2489C15D1Ev,_ZThn4092_N8S2489C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C15D0Ev,_ZTv0_n20_N8S2489C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N8S2489C15D0Ev,_ZThn3804_N8S2489C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C15D1Ev,_ZTv0_n20_N8S2489C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N8S2489C15D1Ev,_ZThn3804_N8S2489C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2489C15 = {  "S2489C15", // class name
  bases_S2489C15, 45,
  &(vtc_S2489C15[0]), // expected_vtbl_contents
  &(vtt_S2489C15[0]), // expected_vtt_contents
  ABISELECT(86064,48024), // object size
  NSPAIRA(_ZTI8S2489C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S2489C15),230, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2489C15),155, //virtual table table var
  31, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2489C24  : virtual S2489C6 , virtual S2489C20 , S2489C8 , S2489C18 {
  void *s2489c24f0;
  void *s2489c24f1;
  int s2489c24f2;
  void *s2489c24f3;
  virtual  ~S2489C24(); // _ZN8S2489C24D2Ev
  S2489C24(); // tgen
};
//SIG(-1 S2489C24) C1{ VBC2{ VBC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} v1 v2 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC3 FL FU5} VBC6{ VBC7{ BC3 BC2 v3 Fp FD FC3[7] FD FU4 Fs FL FL} VBC2 VBC8{ VBC3 VBC2 vd v4 FL FL FL FL Fi FU5 Fc[10] Fi} BC9{ BC10{ BC3 VBC2 VBC8 VBC7 vd v5 Fc Fi[7] Fl[5] FL FL FL FU11{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} vd v6 v7 Fp Fp Fp Fi FC12{} FL FL} VBC13{ v8 FD FC14{ VBC7 VBC8 Fi Fp Fi FU5}[6] Fc Fp Fp Fi[6] Fi Fp FL Fp Fi Fp Fp} vd Fc Fs[3] FC15{ BC3 VBC2 VBC8 VBC7 VBC16{ VBC8 BC10 BC3 BC2 vd v9 v10 v11 FU5 Fi Fl Fc Fp FC7 Fs} vd FL Fi Fp Fp FL}[10] FC7 FL FL:5 Fi Fp[6] FL[2] FL Fi} BC8 BC17{ vd m FU4} vd Fp Fp Fi Fp}


 S2489C24 ::~S2489C24(){ note_dtor("S2489C24", this);}
S2489C24 ::S2489C24(){ note_ctor("S2489C24", this);} // tgen

static void Test_S2489C24()
{
  extern Class_Descriptor cd_S2489C24;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4290,9554)];
    init_test(&cd_S2489C24, buf);
    S2489C24 *dp, &lv = *(dp=new (buf) S2489C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(68624,38212), "sizeof(S2489C24)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C24)");
    /*is_ambiguous_... S2489C24::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*), ABISELECT(640,348), "S2489C24");
    check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C5*), ABISELECT(640,348), "S2489C24");
    /*is_ambiguous_... S2489C24::S2489C8 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C8*), ABISELECT(640,348), "S2489C24");
    /*is_ambiguous_... S2489C24::S2489C8 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C8*), ABISELECT(640,348), "S2489C24");
    /*is_ambiguous_... S2489C24::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*), ABISELECT(256,144), "S2489C24");
    /*is_ambiguous_... S2489C20::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C20*), ABISELECT(256,144), "S2489C24");
    /*is_ambiguous_... S2489C24::S2489C8 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C8*), ABISELECT(256,144), "S2489C24");
    /*is_ambiguous_... S2489C10::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(256,144), "S2489C24");
    /*is_ambiguous_... S2489C24::S2489C8 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C8*), ABISELECT(256,144), "S2489C24");
    /*is_ambiguous_... S2489C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C5*), ABISELECT(53360,29748), "S2489C24");
    check_base_class_offset(lv, (S2489C6*)(S2489C5*), ABISELECT(52976,29544), "S2489C24");
    check_base_class_offset(lv, (S2489C5*)(S2489C20*), ABISELECT(52976,29544), "S2489C24");
    check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(52976,29544), "S2489C24");
    check_base_class_offset(lv, (S2489C8*)(S2489C20*), ABISELECT(54536,30412), "S2489C24");
    check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(54536,30412), "S2489C24");
    /*is_ambiguous_... S2489C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(784,424), "S2489C24");
    check_base_class_offset(lv, (S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(768,420), "S2489C24");
    check_base_class_offset(lv, (S2489C9*)(S2489C20*), ABISELECT(768,420), "S2489C24");
    check_base_class_offset(lv, (S2489C13*)(S2489C20*), ABISELECT(54656,30496), "S2489C24");
    check_base_class_offset(lv, (S2489C20*), ABISELECT(768,420), "S2489C24");
    /*is_ambiguous_... S2489C24::S2489C8 */ AMB_check_base_class_offset(lv, (S2489C8*), 0, "S2489C24");
    check_base_class_offset(lv, (S2489C18*), ABISELECT(128,84), "S2489C24");
    check_field_offset(lv, s2489c24f0, ABISELECT(224,128), "S2489C24.s2489c24f0");
    check_field_offset(lv, s2489c24f1, ABISELECT(232,132), "S2489C24.s2489c24f1");
    check_field_offset(lv, s2489c24f2, ABISELECT(240,136), "S2489C24.s2489c24f2");
    check_field_offset(lv, s2489c24f3, ABISELECT(248,140), "S2489C24.s2489c24f3");
    test_class_info(&lv, &cd_S2489C24);
    dp->~S2489C24();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2489C24(Test_S2489C24, "S2489C24", ABISELECT(68624,38212));

#else // __cplusplus

extern void _ZN8S2489C24C1Ev();
extern void _ZN8S2489C24D2Ev();
Name_Map name_map_S2489C24[] = {
  NSPAIR(_ZN8S2489C24C1Ev),
  NSPAIR(_ZN8S2489C24D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C5;
extern VTBL_ENTRY _ZTI7S2489C5[];
extern  VTBL_ENTRY _ZTV7S2489C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C5[];
extern Class_Descriptor cd_S2489C8;
extern VTBL_ENTRY _ZTI7S2489C8[];
extern  VTBL_ENTRY _ZTV7S2489C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C9;
extern VTBL_ENTRY _ZTI7S2489C9[];
extern  VTBL_ENTRY _ZTV7S2489C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C9[];
extern Class_Descriptor cd_S2489C13;
extern VTBL_ENTRY _ZTI8S2489C13[];
extern  VTBL_ENTRY _ZTV8S2489C13[];
extern Class_Descriptor cd_S2489C20;
extern VTBL_ENTRY _ZTI8S2489C20[];
extern  VTBL_ENTRY _ZTV8S2489C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C20[];
extern Class_Descriptor cd_S2489C8;
extern VTBL_ENTRY _ZTI7S2489C8[];
extern  VTBL_ENTRY _ZTV7S2489C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C8[];
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
static Base_Class bases_S2489C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(640,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S2489C6,    ABISELECT(256,144), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(53360,29748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(52976,29544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2489C5,    ABISELECT(52976,29544), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C8,    ABISELECT(54536,30412), //bcp->offset
    47, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(784,424), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(768,420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2489C9,    ABISELECT(768,420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2489C13,    ABISELECT(54656,30496), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2489C20,    ABISELECT(768,420), //bcp->offset
    22, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C18,    ABISELECT(128,84), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2489C24[];
extern void _ZN8S2489C24D1Ev();
extern void _ZN8S2489C24D0Ev();
extern void _ZN7S2489C82v4Ev();
extern void ABISELECT(_ZThn128_N8S2489C24D1Ev,_ZThn84_N8S2489C24D1Ev)();
extern void ABISELECT(_ZThn128_N8S2489C24D0Ev,_ZThn84_N8S2489C24D0Ev)();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S2489C24D1Ev,_ZTv0_n32_N8S2489C24D1Ev)();
extern void ABISELECT(_ZThn768_N8S2489C24D1Ev,_ZThn420_N8S2489C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2489C24D0Ev,_ZTv0_n32_N8S2489C24D0Ev)();
extern void ABISELECT(_ZThn768_N8S2489C24D0Ev,_ZThn420_N8S2489C24D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S2489C24D1Ev,_ZTv0_n20_N8S2489C24D1Ev)();
extern void ABISELECT(_ZThn54536_N8S2489C24D1Ev,_ZThn30412_N8S2489C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C24D0Ev,_ZTv0_n20_N8S2489C24D0Ev)();
extern void ABISELECT(_ZThn54536_N8S2489C24D0Ev,_ZThn30412_N8S2489C24D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY vtc_S2489C24[] = {
  ABISELECT(54656,30496),
  ABISELECT(54536,30412),
  ABISELECT(52976,29544),
  ABISELECT(768,420),
  ABISELECT(256,144),
  ABISELECT(640,348),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C24[0]),
  (VTBL_ENTRY)&_ZN8S2489C24D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C24D0Ev,
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S2489C24[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S2489C24D1Ev,_ZThn84_N8S2489C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S2489C24D0Ev,_ZThn84_N8S2489C24D0Ev),
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S2489C24[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  0,
  0,
  0,
  ABISELECT(-768,-420),
  ABISELECT(53888,30076),
  ABISELECT(52208,29124),
  ABISELECT(53768,29992),
  ABISELECT(-128,-72),
  ABISELECT(-512,-276),
  ABISELECT(-768,-420),
  (VTBL_ENTRY)&(_ZTI8S2489C24[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C24D1Ev,_ZTv0_n32_N8S2489C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C24D0Ev,_ZTv0_n32_N8S2489C24D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
  0,
  0,
  0,
  ABISELECT(-52336,-29196),
  ABISELECT(-52976,-29544),
  (VTBL_ENTRY)&(_ZTI8S2489C24[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
  0,
  ABISELECT(-54536,-30412),
  ABISELECT(-54280,-30268),
  ABISELECT(-53896,-30064),
  ABISELECT(-54536,-30412),
  (VTBL_ENTRY)&(_ZTI8S2489C24[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C24D1Ev,_ZTv0_n20_N8S2489C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C24D0Ev,_ZTv0_n20_N8S2489C24D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
  0,
  ABISELECT(-54656,-30496),
  (VTBL_ENTRY)&(_ZTI8S2489C24[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern VTBL_ENTRY _ZTV8S2489C24[];
extern void _ZN7S2489C8D1Ev();
extern void _ZN7S2489C8D0Ev();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__A__8S2489C24[] = {
  ABISELECT(256,144),
  ABISELECT(640,348),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C8__A__8S2489C24[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C24[] = {
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C20D1Ev();
extern void _ZN8S2489C20D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C24[] = {
  ABISELECT(53888,30076),
  ABISELECT(52208,29124),
  ABISELECT(53768,29992),
  ABISELECT(-128,-72),
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN8S2489C20D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C20D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN7S2489C9D1Ev();
extern void _ZN7S2489C9D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C98S2489C20__8S2489C24[] = {
  ABISELECT(52208,29124),
  ABISELECT(53768,29992),
  ABISELECT(-128,-72),
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C107S2489C98S2489C20__8S2489C24[] = {
  ABISELECT(52208,29124),
  ABISELECT(53768,29992),
  ABISELECT(-128,-72),
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C107S2489C98S2489C20__8S2489C24[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(512,276),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZThn53768_N8S2489C10D1Ev,_ZThn29992_N8S2489C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void ABISELECT(_ZThn53768_N8S2489C10D0Ev,_ZThn29992_N8S2489C10D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C107S2489C98S2489C20__8S2489C24[] = {
  0,
  ABISELECT(-53768,-29992),
  ABISELECT(-54280,-30268),
  ABISELECT(-53896,-30064),
  ABISELECT(-53768,-29992),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C107S2489C98S2489C20__8S2489C24[] = {
  0,
  0,
  0,
  ABISELECT(-52336,-29196),
  ABISELECT(-52208,-29124),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C98S2489C20__8S2489C24[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(512,276),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev)();
extern void ABISELECT(_ZThn53768_N7S2489C9D1Ev,_ZThn29992_N7S2489C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev)();
extern void ABISELECT(_ZThn53768_N7S2489C9D0Ev,_ZThn29992_N7S2489C9D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__7S2489C98S2489C20__8S2489C24[] = {
  0,
  ABISELECT(-53768,-29992),
  ABISELECT(-54280,-30268),
  ABISELECT(-53896,-30064),
  ABISELECT(-53768,-29992),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__7S2489C98S2489C20__8S2489C24[] = {
  0,
  0,
  0,
  ABISELECT(-52336,-29196),
  ABISELECT(-52208,-29124),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C20__8S2489C24[] = {
  0,
  0,
  0,
  ABISELECT(-52336,-29196),
  ABISELECT(-52208,-29124),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A1__8S2489C20__8S2489C24[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(512,276),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C20D1Ev,_ZTv0_n20_N8S2489C20D1Ev)();
extern void ABISELECT(_ZThn53768_N8S2489C20D1Ev,_ZThn29992_N8S2489C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C20D0Ev,_ZTv0_n20_N8S2489C20D0Ev)();
extern void ABISELECT(_ZThn53768_N8S2489C20D0Ev,_ZThn29992_N8S2489C20D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C20__8S2489C24[] = {
  0,
  ABISELECT(-53768,-29992),
  ABISELECT(-54280,-30268),
  ABISELECT(-53896,-30064),
  ABISELECT(-53768,-29992),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C20D1Ev,_ZTv0_n20_N8S2489C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C20D0Ev,_ZTv0_n20_N8S2489C20D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C20__8S2489C24[] = {
  0,
  ABISELECT(-53888,-30076),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C24[] = {
  ABISELECT(-52336,-29196),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C5[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C67S2489C5__A1__8S2489C24[] = {
  ABISELECT(-52336,-29196),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C8D1Ev();
extern void _ZN7S2489C8D0Ev();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C24[] = {
  ABISELECT(-54280,-30268),
  ABISELECT(-53896,-30064),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C8__8S2489C24[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(54280,30268),
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
static  VTT_ENTRY vtt_S2489C24[] = {
  {&(_ZTV8S2489C24[8]),  8,60},
  {&(_tg__ZTV7S2489C8__A__8S2489C24[4]),  4,7},
  {&(_tg__ZTV7S2489C6__7S2489C8__A__8S2489C24[5]),  5,7},
  {&(_ZTV8S2489C24[20]),  20,60},
  {&(_ZTV8S2489C24[33]),  33,60},
  {&(_ZTV8S2489C24[44]),  44,60},
  {&(_ZTV8S2489C24[53]),  53,60},
  {&(_ZTV8S2489C24[59]),  59,60},
  {&(_tg__ZTV7S2489C6__8S2489C24[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C24[7]),  7,12},
  {&(_tg__ZTV7S2489C98S2489C20__8S2489C24[6]),  6,11},
  {&(_tg__ZTV8S2489C107S2489C98S2489C20__8S2489C24[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C107S2489C98S2489C20__8S2489C24[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C107S2489C98S2489C20__8S2489C24[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C107S2489C98S2489C20__8S2489C24[6]),  6,9},
  {&(_tg__ZTV7S2489C6__7S2489C98S2489C20__8S2489C24[5]),  5,7},
  {&(_tg__ZTV7S2489C8__7S2489C98S2489C20__8S2489C24[6]),  6,9},
  {&(_tg__ZTV7S2489C5__7S2489C98S2489C20__8S2489C24[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C20__8S2489C24[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A1__8S2489C20__8S2489C24[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C20__8S2489C24[6]),  6,9},
  {&(_tg__ZTV8S2489C13__8S2489C20__8S2489C24[3]),  3,4},
  {&(_tg__ZTV7S2489C5__8S2489C24[3]),  3,6},
  {&(_tg__ZTV7S2489C67S2489C5__A1__8S2489C24[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C24[4]),  4,7},
  {&(_tg__ZTV7S2489C6__7S2489C8__8S2489C24[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S2489C24[];
extern  VTBL_ENTRY _ZTV8S2489C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C24[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C20D0Ev,_ZTv0_n20_N8S2489C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53768_N8S2489C20D0Ev,_ZThn29992_N8S2489C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C20D1Ev,_ZTv0_n20_N8S2489C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53768_N8S2489C20D1Ev,_ZThn29992_N8S2489C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53768_N7S2489C9D0Ev,_ZThn29992_N7S2489C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53768_N7S2489C9D1Ev,_ZThn29992_N7S2489C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53768_N8S2489C10D0Ev,_ZThn29992_N8S2489C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53768_N8S2489C10D1Ev,_ZThn29992_N8S2489C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C24D0Ev,_ZTv0_n20_N8S2489C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54536_N8S2489C24D0Ev,_ZThn30412_N8S2489C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C24D1Ev,_ZTv0_n20_N8S2489C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54536_N8S2489C24D1Ev,_ZThn30412_N8S2489C24D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C24D0Ev,_ZTv0_n32_N8S2489C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn768_N8S2489C24D0Ev,_ZThn420_N8S2489C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C24D1Ev,_ZTv0_n32_N8S2489C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn768_N8S2489C24D1Ev,_ZThn420_N8S2489C24D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2489C24 = {  "S2489C24", // class name
  bases_S2489C24, 13,
  &(vtc_S2489C24[0]), // expected_vtbl_contents
  &(vtt_S2489C24[0]), // expected_vtt_contents
  ABISELECT(68624,38212), // object size
  NSPAIRA(_ZTI8S2489C24),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S2489C24),60, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2489C24),26, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2489C1  : S2489C2 , virtual S2489C13 , virtual S2489C15 {
  ::S2489C24 s2489c1f0;
  __tsi64 s2489c1f1;
  virtual  ~S2489C1(); // _ZN7S2489C1D2Ev
  S2489C1(); // tgen
};
//SIG(1 S2489C1) C1{ BC2{ BC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC5{ BC3 BC6{ VBC3 v1 v2 Fp Fp Fi Fi FU7{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU7 Fp FL:3 FC3 FL FU7} v3 Fp FD FC3[7] FD FU4 Fs FL FL} VBC8{ VBC3 VBC6 vd v4 FL FL FL FL Fi FU7 Fc[10] Fi} BC9{ BC10{ BC3 VBC6 VBC8 VBC5 vd v5 Fc Fi[7] Fl[5] FL FL FL FU11{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} vd v6 v7 Fp Fp Fp Fi FC12{} FL FL} vd FD} VBC13{ v8 FD FC14{ VBC5 VBC8 Fi Fp Fi FU7}[6] Fc Fp Fp Fi[6] Fi Fp FL Fp Fi Fp Fp} VBC15{ BC14 BC16{ VBC17{ BC18{ vd m FU4} BC19{ VBC8 BC10 BC3 BC6 vd v9 v10 v11 FU7 Fi Fl Fc Fp FC5 Fs} VBC20{ VBC5 VBC6 VBC8 BC9 VBC13 vd Fc Fs[3] FC21{ BC3 VBC6 VBC8 VBC5 VBC19 vd FL Fi Fp Fp FL}[10] FC5 FL FL:5 Fi Fp[6] FL[2] FL Fi} BC21 vd v12 v13 Fi FD Fl Fc:3 Fp FC6} Fc Fp FL Fi Fi Fi Fp FL FC2 FD FL Fi} BC22{ VBC23{ VBC10 VBC13 BC17 vd Fp[6] Fi Fs FC12 FC2 Fp Fi Fi Fc Fc FU4} BC5 v14 v15 FL Fs FL:0 Fp Fp FD[10] Fi Fp Fp Fi Fl Fp} BC21 vd FU4 Fi Fi FL Fi Fp Fi Fi Fi} vd FC24{ VBC6 VBC20 BC8 BC18 vd Fp Fp Fi Fp} FL}


 S2489C1 ::~S2489C1(){ note_dtor("S2489C1", this);}
S2489C1 ::S2489C1(){ note_ctor("S2489C1", this);} // tgen

static void Test_S2489C1()
{
  extern Class_Descriptor cd_S2489C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9700,21640)];
    init_test(&cd_S2489C1, buf);
    S2489C1 *dp, &lv = *(dp=new (buf) S2489C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(155184,86556), "sizeof(S2489C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2489C1)");
    /*is_ambiguous_... S2489C2::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C2*), ABISELECT(336,228), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C5*), ABISELECT(69504,38736), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C5*), ABISELECT(70688,39400), "S2489C1");
    check_base_class_offset(lv, (S2489C3*)(S2489C8*), ABISELECT(70688,39400), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*), ABISELECT(70688,39400), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C19*)(S2489C17*), ABISELECT(70688,39400), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C19*), ABISELECT(70688,39400), "S2489C1");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(70688,39400), "S2489C1");
    /*is_ambiguous_... S2489C22::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C6*)(S2489C5*)(S2489C22*)(S2489C15*), ABISELECT(70688,39400), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C5*), ABISELECT(69120,38532), "S2489C1");
    check_base_class_offset(lv, (S2489C5*)(S2489C2*), ABISELECT(69120,38532), "S2489C1");
    check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C9*)(S2489C2*), ABISELECT(69120,38532), "S2489C1");
    check_base_class_offset(lv, (S2489C5*)(S2489C14*)(S2489C15*), ABISELECT(69120,38532), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(69120,38532), "S2489C1");
    check_base_class_offset(lv, (S2489C5*)(S2489C20*), ABISELECT(69120,38532), "S2489C1");
    check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(69120,38532), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C21*)(S2489C17*), ABISELECT(69120,38532), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C19*), ABISELECT(69120,38532), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C10*), ABISELECT(69120,38532), "S2489C1");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C10*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(69120,38532), "S2489C1");
    check_base_class_offset(lv, (S2489C5*)(S2489C21*)(S2489C17*)(S2489C23*), ABISELECT(69120,38532), "S2489C1");
    /*is_ambiguous_... S2489C15::S2489C21 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C21*)(S2489C15*), ABISELECT(69120,38532), "S2489C1");
    check_base_class_offset(lv, (S2489C6*)(S2489C8*), ABISELECT(70944,39556), "S2489C1");
    /*is_ambiguous_... S2489C10::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C9*)(S2489C2*), ABISELECT(70944,39556), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(70944,39556), "S2489C1");
    /*is_ambiguous_... S2489C20::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C20*), ABISELECT(70944,39556), "S2489C1");
    /*is_ambiguous_... S2489C10::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(70944,39556), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C21*)(S2489C17*), ABISELECT(70944,39556), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C19*), ABISELECT(70944,39556), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*), ABISELECT(70944,39556), "S2489C1");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C10*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(70944,39556), "S2489C1");
    /*is_ambiguous_... S2489C21::S2489C6 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C21*)(S2489C17*)(S2489C23*), ABISELECT(70944,39556), "S2489C1");
    /*is_ambiguous_... S2489C15::S2489C21 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C21*)(S2489C15*), ABISELECT(70944,39556), "S2489C1");
    check_base_class_offset(lv, (S2489C8*)(S2489C2*), ABISELECT(70816,39472), "S2489C1");
    check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C9*)(S2489C2*), ABISELECT(70816,39472), "S2489C1");
    check_base_class_offset(lv, (S2489C8*)(S2489C14*)(S2489C15*), ABISELECT(70816,39472), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C19*)(S2489C17*), ABISELECT(70816,39472), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(70816,39472), "S2489C1");
    check_base_class_offset(lv, (S2489C8*)(S2489C20*), ABISELECT(70816,39472), "S2489C1");
    check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(70816,39472), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C21*)(S2489C17*), ABISELECT(70816,39472), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C19*), ABISELECT(70816,39472), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C19*), ABISELECT(70816,39472), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C10*), ABISELECT(70816,39472), "S2489C1");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(70816,39472), "S2489C1");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C10*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(70816,39472), "S2489C1");
    check_base_class_offset(lv, (S2489C8*)(S2489C21*)(S2489C17*)(S2489C23*), ABISELECT(70816,39472), "S2489C1");
    /*is_ambiguous_... S2489C15::S2489C21 */ AMB_check_base_class_offset(lv, (S2489C8*)(S2489C21*)(S2489C15*), ABISELECT(70816,39472), "S2489C1");
    /*is_ambiguous_... S2489C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C9*)(S2489C2*), ABISELECT(16,4), "S2489C1");
    check_base_class_offset(lv, (S2489C10*)(S2489C9*)(S2489C2*), 0, "S2489C1");
    check_base_class_offset(lv, (S2489C9*)(S2489C2*), 0, "S2489C1");
    check_base_class_offset(lv, (S2489C2*), 0, "S2489C1");
    check_base_class_offset(lv, (S2489C13*), ABISELECT(71328,39760), "S2489C1");
    check_base_class_offset(lv, (S2489C13*)(S2489C20*), ABISELECT(71328,39760), "S2489C1");
    check_base_class_offset(lv, (S2489C13*)(S2489C23*), ABISELECT(71328,39760), "S2489C1");
    check_base_class_offset(lv, (S2489C14*)(S2489C15*), ABISELECT(85296,47476), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C18*)(S2489C17*), ABISELECT(90304,50340), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(90416,50388), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C10*)(S2489C19*)(S2489C17*), ABISELECT(90400,50384), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C19*)(S2489C17*), ABISELECT(90688,50576), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C19*)(S2489C17*), ABISELECT(90816,50648), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C19*)(S2489C17*), ABISELECT(90400,50384), "S2489C1");
    /*is_ambiguous_... S2489C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(93776,52252), "S2489C1");
    check_base_class_offset(lv, (S2489C10*)(S2489C9*)(S2489C20*), ABISELECT(93760,52248), "S2489C1");
    check_base_class_offset(lv, (S2489C9*)(S2489C20*), ABISELECT(93760,52248), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C20*)(S2489C17*), ABISELECT(93760,52248), "S2489C1");
    check_base_class_offset(lv, (S2489C20*)(S2489C17*)(S2489C23*), ABISELECT(93760,52248), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C21*)(S2489C17*), ABISELECT(93024,51844), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C19*), ABISELECT(145984,81376), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C10*)(S2489C19*), ABISELECT(145968,81372), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C19*), ABISELECT(146256,81564), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C19*), ABISELECT(146384,81636), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C19*)(S2489C21*)(S2489C17*), ABISELECT(145968,81372), "S2489C1");
    check_base_class_offset(lv, (S2489C19*)(S2489C21*)(S2489C17*)(S2489C23*), ABISELECT(145968,81372), "S2489C1");
    /*is_ambiguous_... S2489C15::S2489C21 */ AMB_check_base_class_offset(lv, (S2489C19*)(S2489C21*)(S2489C15*), ABISELECT(145968,81372), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C17 */ AMB_check_base_class_offset(lv, (S2489C21*)(S2489C17*), ABISELECT(93008,51840), "S2489C1");
    check_base_class_offset(lv, (S2489C17*)(S2489C16*)(S2489C15*), ABISELECT(90304,50340), "S2489C1");
    check_base_class_offset(lv, (S2489C16*)(S2489C15*), ABISELECT(85392,47520), "S2489C1");
    /*is_ambiguous_... S2489C1::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*), ABISELECT(154912,86368), "S2489C1");
    /*is_ambiguous_... S2489C23::S2489C10 */ AMB_check_base_class_offset(lv, (S2489C10*)(S2489C23*), ABISELECT(154896,86364), "S2489C1");
    check_base_class_offset(lv, (S2489C18*)(S2489C17*)(S2489C23*), ABISELECT(148576,82828), "S2489C1");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C10*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(148688,82876), "S2489C1");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C10*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(148672,82872), "S2489C1");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(148960,83064), "S2489C1");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(149088,83136), "S2489C1");
    /*is_ambiguous_... S2489C17::S2489C19 */ AMB_check_base_class_offset(lv, (S2489C19*)(S2489C17*)(S2489C23*), ABISELECT(148672,82872), "S2489C1");
    /*is_ambiguous_... S2489C21::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C21*)(S2489C17*)(S2489C23*), ABISELECT(151296,84332), "S2489C1");
    check_base_class_offset(lv, (S2489C21*)(S2489C17*)(S2489C23*), ABISELECT(151280,84328), "S2489C1");
    check_base_class_offset(lv, (S2489C17*)(S2489C23*), ABISELECT(148576,82828), "S2489C1");
    check_base_class_offset(lv, (S2489C23*)(S2489C22*)(S2489C15*), ABISELECT(148576,82828), "S2489C1");
    /*is_ambiguous_... S2489C22::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C5*)(S2489C22*)(S2489C15*), ABISELECT(88560,49332), "S2489C1");
    /*is_ambiguous_... S2489C22::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C6*)(S2489C5*)(S2489C22*)(S2489C15*), ABISELECT(88176,49128), "S2489C1");
    /*is_ambiguous_... S2489C22::S2489C5 */ AMB_check_base_class_offset(lv, (S2489C5*)(S2489C22*)(S2489C15*), ABISELECT(88176,49128), "S2489C1");
    check_base_class_offset(lv, (S2489C22*)(S2489C15*), ABISELECT(88176,49128), "S2489C1");
    /*is_ambiguous_... S2489C15::S2489C21 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2489C21*)(S2489C15*), ABISELECT(90000,50164), "S2489C1");
    /*is_ambiguous_... S2489C15::S2489C21 */ AMB_check_base_class_offset(lv, (S2489C21*)(S2489C15*), ABISELECT(89984,50160), "S2489C1");
    check_base_class_offset(lv, (S2489C15*), ABISELECT(85296,47476), "S2489C1");
    check_field_offset(lv, s2489c1f0, ABISELECT(480,312), "S2489C1.s2489c1f0");
    check_field_offset(lv, s2489c1f1, ABISELECT(69104,38524), "S2489C1.s2489c1f1");
    test_class_info(&lv, &cd_S2489C1);
    dp->~S2489C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2489C1(Test_S2489C1, "S2489C1", ABISELECT(155184,86556));

#else // __cplusplus

extern void _ZN7S2489C1C1Ev();
extern void _ZN7S2489C1D2Ev();
Name_Map name_map_S2489C1[] = {
  NSPAIR(_ZN7S2489C1C1Ev),
  NSPAIR(_ZN7S2489C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C5;
extern VTBL_ENTRY _ZTI7S2489C5[];
extern  VTBL_ENTRY _ZTV7S2489C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C5[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C8;
extern VTBL_ENTRY _ZTI7S2489C8[];
extern  VTBL_ENTRY _ZTV7S2489C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C9;
extern VTBL_ENTRY _ZTI7S2489C9[];
extern  VTBL_ENTRY _ZTV7S2489C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C9[];
extern Class_Descriptor cd_S2489C2;
extern VTBL_ENTRY _ZTI7S2489C2[];
extern  VTBL_ENTRY _ZTV7S2489C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C2[];
extern Class_Descriptor cd_S2489C13;
extern VTBL_ENTRY _ZTI8S2489C13[];
extern  VTBL_ENTRY _ZTV8S2489C13[];
extern Class_Descriptor cd_S2489C14;
extern VTBL_ENTRY _ZTI8S2489C14[];
extern  VTBL_ENTRY _ZTV8S2489C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C14[];
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C19;
extern VTBL_ENTRY _ZTI8S2489C19[];
extern  VTBL_ENTRY _ZTV8S2489C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C19[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C9;
extern VTBL_ENTRY _ZTI7S2489C9[];
extern  VTBL_ENTRY _ZTV7S2489C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C9[];
extern Class_Descriptor cd_S2489C20;
extern VTBL_ENTRY _ZTI8S2489C20[];
extern  VTBL_ENTRY _ZTV8S2489C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C20[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C19;
extern VTBL_ENTRY _ZTI8S2489C19[];
extern  VTBL_ENTRY _ZTV8S2489C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C19[];
extern Class_Descriptor cd_S2489C21;
extern VTBL_ENTRY _ZTI8S2489C21[];
extern  VTBL_ENTRY _ZTV8S2489C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C21[];
extern Class_Descriptor cd_S2489C17;
extern VTBL_ENTRY _ZTI8S2489C17[];
extern  VTBL_ENTRY _ZTV8S2489C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C17[];
extern Class_Descriptor cd_S2489C16;
extern VTBL_ENTRY _ZTI8S2489C16[];
extern  VTBL_ENTRY _ZTV8S2489C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C16[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C10;
extern VTBL_ENTRY _ZTI8S2489C10[];
extern  VTBL_ENTRY _ZTV8S2489C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C19;
extern VTBL_ENTRY _ZTI8S2489C19[];
extern  VTBL_ENTRY _ZTV8S2489C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C19[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C21;
extern VTBL_ENTRY _ZTI8S2489C21[];
extern  VTBL_ENTRY _ZTV8S2489C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C21[];
extern Class_Descriptor cd_S2489C17;
extern VTBL_ENTRY _ZTI8S2489C17[];
extern  VTBL_ENTRY _ZTV8S2489C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C17[];
extern Class_Descriptor cd_S2489C23;
extern VTBL_ENTRY _ZTI8S2489C23[];
extern  VTBL_ENTRY _ZTV8S2489C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C23[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C6;
extern VTBL_ENTRY _ZTI7S2489C6[];
extern  VTBL_ENTRY _ZTV7S2489C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C6[];
extern Class_Descriptor cd_S2489C5;
extern VTBL_ENTRY _ZTI7S2489C5[];
extern  VTBL_ENTRY _ZTV7S2489C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C5[];
extern Class_Descriptor cd_S2489C22;
extern VTBL_ENTRY _ZTI8S2489C22[];
extern  VTBL_ENTRY _ZTV8S2489C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C22[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C21;
extern VTBL_ENTRY _ZTI8S2489C21[];
extern  VTBL_ENTRY _ZTV8S2489C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C21[];
extern Class_Descriptor cd_S2489C15;
extern VTBL_ENTRY _ZTI8S2489C15[];
extern  VTBL_ENTRY _ZTV8S2489C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2489C15[];
static Base_Class bases_S2489C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(336,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(69504,38736), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(70688,39400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2489C6,    ABISELECT(69120,38532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2489C5,    ABISELECT(69120,38532), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2489C6,    ABISELECT(70944,39556), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2489C8,    ABISELECT(70816,39472), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2489C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2489C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2489C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C13,    ABISELECT(71328,39760), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C14,    ABISELECT(85296,47476), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S2489C18,    ABISELECT(90304,50340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(90416,50388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(90400,50384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    98, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(90688,50576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(90816,50648), //bcp->offset
    140, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    102, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2489C19,    ABISELECT(90400,50384), //bcp->offset
    128, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    97, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(93776,52252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(93760,52248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    125, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2489C9,    ABISELECT(93760,52248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    124, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2489C20,    ABISELECT(93760,52248), //bcp->offset
    154, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    123, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(93024,51844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(145984,81376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(145968,81372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    137, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(146256,81564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(146384,81636), //bcp->offset
    189, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    141, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2489C19,    ABISELECT(145968,81372), //bcp->offset
    170, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    136, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S2489C21,    ABISELECT(93008,51840), //bcp->offset
    145, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    107, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S2489C17,    ABISELECT(90304,50340), //bcp->offset
    106, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    96, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S2489C16,    ABISELECT(85392,47520), //bcp->offset
    67, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(154912,86368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(154896,86364), //bcp->offset
    243, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    185, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    43, //immediately_derived
  0, 1},
  {&cd_S2489C18,    ABISELECT(148576,82828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(148688,82876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S2489C10,    ABISELECT(148672,82872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    149, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(148960,83064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(149088,83136), //bcp->offset
    229, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    153, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S2489C19,    ABISELECT(148672,82872), //bcp->offset
    217, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    148, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(151296,84332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S2489C21,    ABISELECT(151280,84328), //bcp->offset
    234, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    158, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S2489C17,    ABISELECT(148576,82828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    147, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S2489C23,    ABISELECT(148576,82828), //bcp->offset
    194, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    146, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    47, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(88560,49332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S2489C6,    ABISELECT(88176,49128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S2489C5,    ABISELECT(88176,49128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S2489C22,    ABISELECT(88176,49128), //bcp->offset
    79, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(90000,50164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S2489C21,    ABISELECT(89984,50160), //bcp->offset
    97, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S2489C15,    ABISELECT(85296,47476), //bcp->offset
    47, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2489C1[];
extern void _ZN7S2489C1D1Ev();
extern void _ZN7S2489C1D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S2489C1D1Ev,_ZTv0_n20_N7S2489C1D1Ev)();
extern void ABISELECT(_ZThn70816_N7S2489C1D1Ev,_ZThn39472_N7S2489C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2489C1D0Ev,_ZTv0_n20_N7S2489C1D0Ev)();
extern void ABISELECT(_ZThn70816_N7S2489C1D0Ev,_ZThn39472_N7S2489C1D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN8S2489C133v11Ev();
extern void ABISELECT(_ZTv0_n104_N7S2489C1D1Ev,_ZTv0_n52_N7S2489C1D1Ev)();
extern void ABISELECT(_ZThn85296_N7S2489C1D1Ev,_ZThn47476_N7S2489C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S2489C1D0Ev,_ZTv0_n52_N7S2489C1D0Ev)();
extern void ABISELECT(_ZThn85296_N7S2489C1D0Ev,_ZThn47476_N7S2489C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn96_n104_N7S2489C1D1Ev,_ZTvn44_n52_N7S2489C1D1Ev)();
extern void ABISELECT(_ZTvn96_n104_N7S2489C1D0Ev,_ZTvn44_n52_N7S2489C1D0Ev)();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
extern void _ZN8S2489C223v14Ev();
extern void _ZN8S2489C223v15Ev();
extern void ABISELECT(_ZTvn2880_n104_N7S2489C1D1Ev,_ZTvn1652_n52_N7S2489C1D1Ev)();
extern void ABISELECT(_ZTvn2880_n104_N7S2489C1D0Ev,_ZTvn1652_n52_N7S2489C1D0Ev)();
extern void ABISELECT(_ZTvn4688_n104_N7S2489C1D1Ev,_ZTvn2684_n52_N7S2489C1D1Ev)();
extern void ABISELECT(_ZTvn4688_n104_N7S2489C1D0Ev,_ZTvn2684_n52_N7S2489C1D0Ev)();
extern void ABISELECT(_ZTv0_n80_N7S2489C1D1Ev,_ZTv0_n40_N7S2489C1D1Ev)();
extern void ABISELECT(_ZThn90304_N7S2489C1D1Ev,_ZThn50340_N7S2489C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S2489C1D0Ev,_ZTv0_n40_N7S2489C1D0Ev)();
extern void ABISELECT(_ZThn90304_N7S2489C1D0Ev,_ZThn50340_N7S2489C1D0Ev)() __attribute__((weak));
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
extern void ABISELECT(_ZTvn96_n80_N7S2489C1D1Ev,_ZTvn44_n40_N7S2489C1D1Ev)();
extern void ABISELECT(_ZTvn96_n80_N7S2489C1D0Ev,_ZTvn44_n40_N7S2489C1D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void ABISELECT(_ZTvn2704_n80_N7S2489C1D1Ev,_ZTvn1500_n40_N7S2489C1D1Ev)();
extern void ABISELECT(_ZTvn2704_n80_N7S2489C1D0Ev,_ZTvn1500_n40_N7S2489C1D0Ev)();
extern void ABISELECT(_ZTv0_n64_N7S2489C1D1Ev,_ZTv0_n32_N7S2489C1D1Ev)();
extern void ABISELECT(_ZThn93760_N7S2489C1D1Ev,_ZThn52248_N7S2489C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S2489C1D0Ev,_ZTv0_n32_N7S2489C1D0Ev)();
extern void ABISELECT(_ZThn93760_N7S2489C1D0Ev,_ZThn52248_N7S2489C1D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
extern void ABISELECT(_ZTv0_n56_N7S2489C1D1Ev,_ZTv0_n28_N7S2489C1D1Ev)();
extern void ABISELECT(_ZThn145968_N7S2489C1D1Ev,_ZThn81372_N7S2489C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S2489C1D0Ev,_ZTv0_n28_N7S2489C1D0Ev)();
extern void ABISELECT(_ZThn145968_N7S2489C1D0Ev,_ZThn81372_N7S2489C1D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void ABISELECT(_ZTv0_n88_N7S2489C1D1Ev,_ZTv0_n44_N7S2489C1D1Ev)();
extern void ABISELECT(_ZThn148576_N7S2489C1D1Ev,_ZThn82828_N7S2489C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S2489C1D0Ev,_ZTv0_n44_N7S2489C1D0Ev)();
extern void ABISELECT(_ZThn148576_N7S2489C1D0Ev,_ZThn82828_N7S2489C1D0Ev)() __attribute__((weak));
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
extern void ABISELECT(_ZTvn96_n88_N7S2489C1D1Ev,_ZTvn44_n44_N7S2489C1D1Ev)();
extern void ABISELECT(_ZTvn96_n88_N7S2489C1D0Ev,_ZTvn44_n44_N7S2489C1D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void ABISELECT(_ZTvn2704_n88_N7S2489C1D1Ev,_ZTvn1500_n44_N7S2489C1D1Ev)();
extern void ABISELECT(_ZTvn2704_n88_N7S2489C1D0Ev,_ZTvn1500_n44_N7S2489C1D0Ev)();
extern void ABISELECT(_ZTv0_n56_N7S2489C1D1Ev,_ZTv0_n28_N7S2489C1D1Ev)();
extern void ABISELECT(_ZThn154896_N7S2489C1D1Ev,_ZThn86364_N7S2489C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S2489C1D0Ev,_ZTv0_n28_N7S2489C1D0Ev)();
extern void ABISELECT(_ZThn154896_N7S2489C1D0Ev,_ZThn86364_N7S2489C1D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY vtc_S2489C1[] = {
  ABISELECT(154896,86364),
  ABISELECT(148576,82828),
  ABISELECT(145968,81372),
  ABISELECT(93760,52248),
  ABISELECT(90304,50340),
  ABISELECT(85296,47476),
  ABISELECT(71328,39760),
  ABISELECT(69120,38532),
  ABISELECT(70816,39472),
  ABISELECT(70688,39400),
  ABISELECT(70944,39556),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&_ZN7S2489C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C1D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-69120,-38532),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
  0,
  ABISELECT(-70816,-39472),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(-70816,-39472),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C1D1Ev,_ZTv0_n20_N7S2489C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C1D0Ev,_ZTv0_n20_N7S2489C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-70944,-39556),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  0,
  ABISELECT(-71328,-39760),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
  ABISELECT(2880,1652),
  ABISELECT(2880,1652),
  ABISELECT(2880,1652),
  ABISELECT(2880,1652),
  ABISELECT(2880,1652),
  ABISELECT(-85296,-47476),
  ABISELECT(69600,38888),
  ABISELECT(63280,35352),
  ABISELECT(60672,33896),
  ABISELECT(-13968,-7716),
  ABISELECT(8464,4772),
  ABISELECT(5008,2864),
  ABISELECT(-14352,-7920),
  ABISELECT(-14480,-8004),
  ABISELECT(-14608,-8076),
  ABISELECT(-16176,-8944),
  ABISELECT(-85296,-47476),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S2489C1D1Ev,_ZTv0_n52_N7S2489C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S2489C1D0Ev,_ZTv0_n52_N7S2489C1D0Ev),
  ABISELECT(60576,33852),
  ABISELECT(-14064,-7760),
  ABISELECT(8368,4728),
  ABISELECT(-16272,-8988),
  ABISELECT(-14448,-7964),
  ABISELECT(-14704,-8120),
  ABISELECT(-14576,-8048),
  ABISELECT(4912,2820),
  ABISELECT(-85392,-47520),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n104_N7S2489C1D1Ev,_ZTvn44_n52_N7S2489C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n104_N7S2489C1D0Ev,_ZTvn44_n52_N7S2489C1D0Ev),
  ABISELECT(57792,32244),
  ABISELECT(5584,3120),
  ABISELECT(-16848,-9368),
  ABISELECT(-19056,-10596),
  ABISELECT(-17360,-9656),
  ABISELECT(-17232,-9572),
  ABISELECT(66720,37236),
  ABISELECT(60400,33700),
  ABISELECT(-17488,-9728),
  ABISELECT(-88176,-49128),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
  (VTBL_ENTRY)&_ZN8S2489C223v14Ev,
  (VTBL_ENTRY)&_ZN8S2489C223v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn2880_n104_N7S2489C1D1Ev,_ZTvn1652_n52_N7S2489C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2880_n104_N7S2489C1D0Ev,_ZTvn1652_n52_N7S2489C1D0Ev),
  ABISELECT(55984,31212),
  ABISELECT(-20864,-11628),
  ABISELECT(-19168,-10688),
  ABISELECT(-19296,-10760),
  ABISELECT(-19040,-10604),
  ABISELECT(-89984,-50160),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4688_n104_N7S2489C1D1Ev,_ZTvn2684_n52_N7S2489C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4688_n104_N7S2489C1D0Ev,_ZTvn2684_n52_N7S2489C1D0Ev),
  ABISELECT(512,308),
  ABISELECT(512,308),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-90304,-50340),
  ABISELECT(55664,31032),
  ABISELECT(-18976,-10580),
  ABISELECT(3456,1908),
  ABISELECT(-21184,-11808),
  ABISELECT(-19360,-10784),
  ABISELECT(-19616,-10940),
  ABISELECT(-19488,-10868),
  ABISELECT(-90304,-50340),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S2489C1D1Ev,_ZTv0_n40_N7S2489C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S2489C1D0Ev,_ZTv0_n40_N7S2489C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
  ABISELECT(-21280,-11852),
  ABISELECT(-19584,-10912),
  ABISELECT(-19712,-10984),
  ABISELECT(-19456,-10828),
  ABISELECT(-90400,-50384),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N7S2489C1D1Ev,_ZTvn44_n40_N7S2489C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N7S2489C1D0Ev,_ZTvn44_n40_N7S2489C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
  ABISELECT(-20128,-11248),
  ABISELECT(-90816,-50648),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  ABISELECT(52960,29532),
  ABISELECT(-23888,-13308),
  ABISELECT(-22192,-12368),
  ABISELECT(-22320,-12440),
  ABISELECT(-22064,-12284),
  ABISELECT(-93008,-51840),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N7S2489C1D1Ev,_ZTvn1500_n40_N7S2489C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N7S2489C1D0Ev,_ZTvn1500_n40_N7S2489C1D0Ev),
  0,
  0,
  0,
  ABISELECT(-93760,-52248),
  ABISELECT(-22432,-12488),
  ABISELECT(-24640,-13716),
  ABISELECT(-22944,-12776),
  ABISELECT(-23072,-12848),
  ABISELECT(-22816,-12692),
  ABISELECT(-93760,-52248),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2489C1D1Ev,_ZTv0_n32_N7S2489C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2489C1D0Ev,_ZTv0_n32_N7S2489C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-145968,-81372),
  ABISELECT(-76848,-42840),
  ABISELECT(-75152,-41900),
  ABISELECT(-75280,-41972),
  ABISELECT(-75024,-41816),
  ABISELECT(-145968,-81372),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2489C1D1Ev,_ZTv0_n28_N7S2489C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2489C1D0Ev,_ZTv0_n28_N7S2489C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
  ABISELECT(-75696,-42236),
  ABISELECT(-146384,-81636),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  ABISELECT(512,308),
  ABISELECT(512,308),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-148576,-82828),
  ABISELECT(6320,3536),
  ABISELECT(-2608,-1456),
  ABISELECT(-77248,-43068),
  ABISELECT(-54816,-30580),
  ABISELECT(-79456,-44296),
  ABISELECT(-77632,-43272),
  ABISELECT(-77888,-43428),
  ABISELECT(-77760,-43356),
  ABISELECT(-148576,-82828),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S2489C1D1Ev,_ZTv0_n44_N7S2489C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S2489C1D0Ev,_ZTv0_n44_N7S2489C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
  ABISELECT(-79552,-44340),
  ABISELECT(-77856,-43400),
  ABISELECT(-77984,-43472),
  ABISELECT(-77728,-43316),
  ABISELECT(-148672,-82872),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N7S2489C1D1Ev,_ZTvn44_n44_N7S2489C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N7S2489C1D0Ev,_ZTvn44_n44_N7S2489C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
  ABISELECT(-78400,-43736),
  ABISELECT(-149088,-83136),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  ABISELECT(-5312,-2956),
  ABISELECT(-82160,-45796),
  ABISELECT(-80464,-44856),
  ABISELECT(-80592,-44928),
  ABISELECT(-80336,-44772),
  ABISELECT(-151280,-84328),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N7S2489C1D1Ev,_ZTvn1500_n44_N7S2489C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N7S2489C1D0Ev,_ZTvn1500_n44_N7S2489C1D0Ev),
  0,
  ABISELECT(-154896,-86364),
  ABISELECT(-85776,-47832),
  ABISELECT(-84080,-46892),
  ABISELECT(-84208,-46964),
  ABISELECT(-83952,-46808),
  ABISELECT(-154896,-86364),
  (VTBL_ENTRY)&(_ZTI7S2489C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2489C1D1Ev,_ZTv0_n28_N7S2489C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2489C1D0Ev,_ZTv0_n28_N7S2489C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern VTBL_ENTRY _ZTV7S2489C1[];
extern void _ZN7S2489C2D1Ev();
extern void _ZN7S2489C2D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C2__7S2489C1[] = {
  ABISELECT(69120,38532),
  ABISELECT(70816,39472),
  ABISELECT(70688,39400),
  ABISELECT(70944,39556),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C2[0]),
  (VTBL_ENTRY)&_ZN7S2489C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C2D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN7S2489C9D1Ev();
extern void _ZN7S2489C9D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C97S2489C2__7S2489C1[] = {
  ABISELECT(69120,38532),
  ABISELECT(70816,39472),
  ABISELECT(70688,39400),
  ABISELECT(70944,39556),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C107S2489C97S2489C2__7S2489C1[] = {
  ABISELECT(69120,38532),
  ABISELECT(70816,39472),
  ABISELECT(70688,39400),
  ABISELECT(70944,39556),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C107S2489C97S2489C2__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-70944,-39556),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZThn70816_N8S2489C10D1Ev,_ZThn39472_N8S2489C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void ABISELECT(_ZThn70816_N8S2489C10D0Ev,_ZThn39472_N8S2489C10D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C107S2489C97S2489C2__7S2489C1[] = {
  0,
  ABISELECT(-70816,-39472),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(-70816,-39472),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C107S2489C97S2489C2__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-69120,-38532),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C97S2489C2__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-70944,-39556),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev)();
extern void ABISELECT(_ZThn70816_N7S2489C9D1Ev,_ZThn39472_N7S2489C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev)();
extern void ABISELECT(_ZThn70816_N7S2489C9D0Ev,_ZThn39472_N7S2489C9D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__7S2489C97S2489C2__7S2489C1[] = {
  0,
  ABISELECT(-70816,-39472),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(-70816,-39472),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__7S2489C97S2489C2__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-69120,-38532),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__7S2489C2__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-69120,-38532),
  (VTBL_ENTRY)&(_ZTI7S2489C2[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2489C2D1Ev,_ZTv0_n20_N7S2489C2D1Ev)();
extern void ABISELECT(_ZThn70816_N7S2489C2D1Ev,_ZThn39472_N7S2489C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2489C2D0Ev,_ZTv0_n20_N7S2489C2D0Ev)();
extern void ABISELECT(_ZThn70816_N7S2489C2D0Ev,_ZThn39472_N7S2489C2D0Ev)() __attribute__((weak));
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__7S2489C2__7S2489C1[] = {
  0,
  ABISELECT(-70816,-39472),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(-70816,-39472),
  (VTBL_ENTRY)&(_ZTI7S2489C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C2D1Ev,_ZTv0_n20_N7S2489C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C2D0Ev,_ZTv0_n20_N7S2489C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A1__7S2489C2__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-70944,-39556),
  (VTBL_ENTRY)&(_ZTI7S2489C2[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__7S2489C1[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C5[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C67S2489C5__7S2489C1[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C8D1Ev();
extern void _ZN7S2489C8D0Ev();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__7S2489C1[] = {
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C8__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI7S2489C8[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A1__7S2489C1[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C15D1Ev();
extern void _ZN8S2489C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C15__7S2489C1[] = {
  ABISELECT(69600,38888),
  ABISELECT(63280,35352),
  ABISELECT(60672,33896),
  ABISELECT(-13968,-7716),
  ABISELECT(8464,4772),
  ABISELECT(5008,2864),
  ABISELECT(-14352,-7920),
  ABISELECT(-14480,-8004),
  ABISELECT(-14608,-8076),
  ABISELECT(-16176,-8944),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&_ZN8S2489C15D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C15D0Ev,
};
extern void _ZN8S2489C14D1Ev();
extern void _ZN8S2489C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C148S2489C15__7S2489C1[] = {
  ABISELECT(-14352,-7920),
  ABISELECT(-14480,-8004),
  ABISELECT(-14608,-8076),
  ABISELECT(-16176,-8944),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C14[0]),
  (VTBL_ENTRY)&_ZN8S2489C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C14D0Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C148S2489C15__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(16176,8944),
  (VTBL_ENTRY)&(_ZTI8S2489C14[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C14D1Ev,_ZTv0_n20_N8S2489C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C14D0Ev,_ZTv0_n20_N8S2489C14D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C148S2489C15__7S2489C1[] = {
  0,
  ABISELECT(14480,8004),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(14480,8004),
  (VTBL_ENTRY)&(_ZTI8S2489C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C14D1Ev,_ZTv0_n20_N8S2489C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C14D0Ev,_ZTv0_n20_N8S2489C14D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A1__8S2489C148S2489C15__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(14352,7920),
  (VTBL_ENTRY)&(_ZTI8S2489C14[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C16D1Ev();
extern void _ZN8S2489C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C168S2489C15__7S2489C1[] = {
  ABISELECT(60576,33852),
  ABISELECT(-14064,-7760),
  ABISELECT(8368,4728),
  ABISELECT(-16272,-8988),
  ABISELECT(-14448,-7964),
  ABISELECT(-14704,-8120),
  ABISELECT(-14576,-8048),
  ABISELECT(4912,2820),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&_ZN8S2489C16D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C16D0Ev,
};
extern void ABISELECT(_ZTv0_n80_N8S2489C16D1Ev,_ZTv0_n40_N8S2489C16D1Ev)();
extern void ABISELECT(_ZThn4912_N8S2489C16D1Ev,_ZThn2820_N8S2489C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S2489C16D0Ev,_ZTv0_n40_N8S2489C16D0Ev)();
extern void ABISELECT(_ZThn4912_N8S2489C16D0Ev,_ZThn2820_N8S2489C16D0Ev)() __attribute__((weak));
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C17__8S2489C168S2489C15__7S2489C1[] = {
  ABISELECT(512,308),
  ABISELECT(512,308),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-4912,-2820),
  ABISELECT(55664,31032),
  ABISELECT(-18976,-10580),
  ABISELECT(3456,1908),
  ABISELECT(-21184,-11808),
  ABISELECT(-19360,-10784),
  ABISELECT(-19616,-10940),
  ABISELECT(-19488,-10868),
  ABISELECT(-4912,-2820),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2489C16D1Ev,_ZTv0_n40_N8S2489C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2489C16D0Ev,_ZTv0_n40_N8S2489C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
};
extern void ABISELECT(_ZTvn96_n80_N8S2489C16D1Ev,_ZTvn44_n40_N8S2489C16D1Ev)();
extern void ABISELECT(_ZTvn96_n80_N8S2489C16D0Ev,_ZTvn44_n40_N8S2489C16D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C198S2489C17__8S2489C168S2489C15__7S2489C1[] = {
  ABISELECT(-21280,-11852),
  ABISELECT(-19584,-10912),
  ABISELECT(-19712,-10984),
  ABISELECT(-19456,-10828),
  ABISELECT(-5008,-2864),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2489C16D1Ev,_ZTvn44_n40_N8S2489C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2489C16D0Ev,_ZTvn44_n40_N8S2489C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C16D1Ev,_ZTv0_n20_N8S2489C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C16D0Ev,_ZTv0_n20_N8S2489C16D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C168S2489C15__7S2489C1[] = {
  0,
  ABISELECT(14576,8048),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(14576,8048),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C16D1Ev,_ZTv0_n20_N8S2489C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C16D0Ev,_ZTv0_n20_N8S2489C16D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C168S2489C15__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(14448,7964),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C168S2489C15__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(16272,8988),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C198S2489C17__A2__8S2489C168S2489C15__7S2489C1[] = {
  ABISELECT(-20128,-11248),
  ABISELECT(-5424,-3128),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2489C16D1Ev,_ZTv0_n32_N8S2489C16D1Ev)();
extern void ABISELECT(_ZThn8368_N8S2489C16D1Ev,_ZThn4728_N8S2489C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2489C16D0Ev,_ZTv0_n32_N8S2489C16D0Ev)();
extern void ABISELECT(_ZThn8368_N8S2489C16D0Ev,_ZThn4728_N8S2489C16D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C168S2489C15__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(-8368,-4728),
  ABISELECT(-22432,-12488),
  ABISELECT(-24640,-13716),
  ABISELECT(-22944,-12776),
  ABISELECT(-23072,-12848),
  ABISELECT(-22816,-12692),
  ABISELECT(-8368,-4728),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C16D1Ev,_ZTv0_n32_N8S2489C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C16D0Ev,_ZTv0_n32_N8S2489C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C168S2489C15__7S2489C1[] = {
  0,
  ABISELECT(14064,7760),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void ABISELECT(_ZTvn2704_n80_N8S2489C16D1Ev,_ZTvn1500_n40_N8S2489C16D1Ev)();
extern void ABISELECT(_ZTvn2704_n80_N8S2489C16D0Ev,_ZTvn1500_n40_N8S2489C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2489C218S2489C17__8S2489C168S2489C15__7S2489C1[] = {
  ABISELECT(52960,29532),
  ABISELECT(-23888,-13308),
  ABISELECT(-22192,-12368),
  ABISELECT(-22320,-12440),
  ABISELECT(-22064,-12284),
  ABISELECT(-7616,-4320),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2489C16D1Ev,_ZTvn1500_n40_N8S2489C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2489C16D0Ev,_ZTvn1500_n40_N8S2489C16D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2489C16D1Ev,_ZTv0_n28_N8S2489C16D1Ev)();
extern void ABISELECT(_ZThn60576_N8S2489C16D1Ev,_ZThn33852_N8S2489C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C16D0Ev,_ZTv0_n28_N8S2489C16D0Ev)();
extern void ABISELECT(_ZThn60576_N8S2489C16D0Ev,_ZThn33852_N8S2489C16D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C168S2489C15__7S2489C1[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-60576,-33852),
  ABISELECT(-76848,-42840),
  ABISELECT(-75152,-41900),
  ABISELECT(-75280,-41972),
  ABISELECT(-75024,-41816),
  ABISELECT(-60576,-33852),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C16D1Ev,_ZTv0_n28_N8S2489C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C16D0Ev,_ZTv0_n28_N8S2489C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C168S2489C15__7S2489C1[] = {
  ABISELECT(-75696,-42236),
  ABISELECT(-60992,-34116),
  (VTBL_ENTRY)&(_ZTI8S2489C16[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
extern void _ZN8S2489C223v14Ev();
extern void _ZN8S2489C223v15Ev();
extern void _ZN8S2489C22D1Ev();
extern void _ZN8S2489C22D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C228S2489C15__7S2489C1[] = {
  ABISELECT(57792,32244),
  ABISELECT(5584,3120),
  ABISELECT(-16848,-9368),
  ABISELECT(-19056,-10596),
  ABISELECT(-17360,-9656),
  ABISELECT(-17232,-9572),
  ABISELECT(66720,37236),
  ABISELECT(60400,33700),
  ABISELECT(-17488,-9728),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
  (VTBL_ENTRY)&_ZN8S2489C223v14Ev,
  (VTBL_ENTRY)&_ZN8S2489C223v15Ev,
  (VTBL_ENTRY)&_ZN8S2489C22D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C22D0Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C58S2489C228S2489C15__A1__7S2489C1[] = {
  ABISELECT(-17488,-9728),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C5[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C67S2489C58S2489C228S2489C15__A5__7S2489C1[] = {
  ABISELECT(-17488,-9728),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n88_N8S2489C22D1Ev,_ZTv0_n44_N8S2489C22D1Ev)();
extern void ABISELECT(_ZThn60400_N8S2489C22D1Ev,_ZThn33700_N8S2489C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S2489C22D0Ev,_ZTv0_n44_N8S2489C22D0Ev)();
extern void ABISELECT(_ZThn60400_N8S2489C22D0Ev,_ZThn33700_N8S2489C22D0Ev)() __attribute__((weak));
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C23__8S2489C228S2489C15__7S2489C1[] = {
  ABISELECT(512,308),
  ABISELECT(512,308),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-60400,-33700),
  ABISELECT(6320,3536),
  ABISELECT(-2608,-1456),
  ABISELECT(-77248,-43068),
  ABISELECT(-54816,-30580),
  ABISELECT(-79456,-44296),
  ABISELECT(-77632,-43272),
  ABISELECT(-77888,-43428),
  ABISELECT(-77760,-43356),
  ABISELECT(-60400,-33700),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2489C22D1Ev,_ZTv0_n44_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2489C22D0Ev,_ZTv0_n44_N8S2489C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2489C22D1Ev,_ZTv0_n28_N8S2489C22D1Ev)();
extern void ABISELECT(_ZThn66720_N8S2489C22D1Ev,_ZThn37236_N8S2489C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C22D0Ev,_ZTv0_n28_N8S2489C22D0Ev)();
extern void ABISELECT(_ZThn66720_N8S2489C22D0Ev,_ZThn37236_N8S2489C22D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C10__8S2489C228S2489C15__7S2489C1[] = {
  0,
  ABISELECT(-66720,-37236),
  ABISELECT(-85776,-47832),
  ABISELECT(-84080,-46892),
  ABISELECT(-84208,-46964),
  ABISELECT(-83952,-46808),
  ABISELECT(-66720,-37236),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C22D1Ev,_ZTv0_n28_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C22D0Ev,_ZTv0_n28_N8S2489C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C228S2489C15__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(17232,9572),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C22D1Ev,_ZTv0_n20_N8S2489C22D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C22D0Ev,_ZTv0_n20_N8S2489C22D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C228S2489C15__7S2489C1[] = {
  0,
  ABISELECT(17360,9656),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(17360,9656),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C22D1Ev,_ZTv0_n20_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C22D0Ev,_ZTv0_n20_N8S2489C22D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C228S2489C15__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(19056,10596),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C228S2489C15__7S2489C1[] = {
  0,
  ABISELECT(16848,9368),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void ABISELECT(_ZTvn96_n88_N8S2489C22D1Ev,_ZTvn44_n44_N8S2489C22D1Ev)();
extern void ABISELECT(_ZTvn96_n88_N8S2489C22D0Ev,_ZTvn44_n44_N8S2489C22D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C198S2489C178S2489C23__8S2489C228S2489C15__7S2489C1[] = {
  ABISELECT(-79552,-44340),
  ABISELECT(-77856,-43400),
  ABISELECT(-77984,-43472),
  ABISELECT(-77728,-43316),
  ABISELECT(-60496,-33744),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2489C22D1Ev,_ZTvn44_n44_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2489C22D0Ev,_ZTvn44_n44_N8S2489C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C198S2489C178S2489C23__A2__8S2489C228S2489C15__7S2489C1[] = {
  ABISELECT(-78400,-43736),
  ABISELECT(-60912,-34008),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2489C22D1Ev,_ZTv0_n32_N8S2489C22D1Ev)();
extern void ABISELECT(_ZThn5584_N8S2489C22D1Ev,_ZThn3120_N8S2489C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2489C22D0Ev,_ZTv0_n32_N8S2489C22D0Ev)();
extern void ABISELECT(_ZThn5584_N8S2489C22D0Ev,_ZThn3120_N8S2489C22D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C228S2489C15__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(-5584,-3120),
  ABISELECT(-22432,-12488),
  ABISELECT(-24640,-13716),
  ABISELECT(-22944,-12776),
  ABISELECT(-23072,-12848),
  ABISELECT(-22816,-12692),
  ABISELECT(-5584,-3120),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C22D1Ev,_ZTv0_n32_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C22D0Ev,_ZTv0_n32_N8S2489C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void ABISELECT(_ZTvn2704_n88_N8S2489C22D1Ev,_ZTvn1500_n44_N8S2489C22D1Ev)();
extern void ABISELECT(_ZTvn2704_n88_N8S2489C22D0Ev,_ZTvn1500_n44_N8S2489C22D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2489C218S2489C178S2489C23__8S2489C228S2489C15__7S2489C1[] = {
  ABISELECT(-5312,-2956),
  ABISELECT(-82160,-45796),
  ABISELECT(-80464,-44856),
  ABISELECT(-80592,-44928),
  ABISELECT(-80336,-44772),
  ABISELECT(-63104,-35200),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2489C22D1Ev,_ZTvn1500_n44_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2489C22D0Ev,_ZTvn1500_n44_N8S2489C22D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2489C22D1Ev,_ZTv0_n28_N8S2489C22D1Ev)();
extern void ABISELECT(_ZThn57792_N8S2489C22D1Ev,_ZThn32244_N8S2489C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C22D0Ev,_ZTv0_n28_N8S2489C22D0Ev)();
extern void ABISELECT(_ZThn57792_N8S2489C22D0Ev,_ZThn32244_N8S2489C22D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C228S2489C15__7S2489C1[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-57792,-32244),
  ABISELECT(-76848,-42840),
  ABISELECT(-75152,-41900),
  ABISELECT(-75280,-41972),
  ABISELECT(-75024,-41816),
  ABISELECT(-57792,-32244),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C22D1Ev,_ZTv0_n28_N8S2489C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C22D0Ev,_ZTv0_n28_N8S2489C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C228S2489C15__7S2489C1[] = {
  ABISELECT(-75696,-42236),
  ABISELECT(-58208,-32508),
  (VTBL_ENTRY)&(_ZTI8S2489C22[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C21D1Ev();
extern void _ZN8S2489C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C218S2489C15__A2__7S2489C1[] = {
  ABISELECT(55984,31212),
  ABISELECT(-20864,-11628),
  ABISELECT(-19168,-10688),
  ABISELECT(-19296,-10760),
  ABISELECT(-19040,-10604),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN8S2489C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C21D0Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C218S2489C15__A2__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(19040,10604),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C218S2489C15__A2__7S2489C1[] = {
  0,
  ABISELECT(19168,10688),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(19168,10688),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C218S2489C15__A2__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(20864,11628),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev)();
extern void ABISELECT(_ZThn55984_N8S2489C21D1Ev,_ZThn31212_N8S2489C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev)();
extern void ABISELECT(_ZThn55984_N8S2489C21D0Ev,_ZThn31212_N8S2489C21D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__8S2489C218S2489C15__A2__7S2489C1[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-55984,-31212),
  ABISELECT(-76848,-42840),
  ABISELECT(-75152,-41900),
  ABISELECT(-75280,-41972),
  ABISELECT(-75024,-41816),
  ABISELECT(-55984,-31212),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A2__8S2489C218S2489C15__A2__7S2489C1[] = {
  ABISELECT(-75696,-42236),
  ABISELECT(-56400,-31476),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C15__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(16176,8944),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C15D1Ev,_ZTv0_n20_N8S2489C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C15D0Ev,_ZTv0_n20_N8S2489C15D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C15__7S2489C1[] = {
  0,
  ABISELECT(14480,8004),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(14480,8004),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C15D1Ev,_ZTv0_n20_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C15D0Ev,_ZTv0_n20_N8S2489C15D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A1__8S2489C15__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(14352,7920),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZThn96_N8S2489C15D1Ev,_ZThn44_N8S2489C15D1Ev)();
extern void ABISELECT(_ZThn96_N8S2489C15D0Ev,_ZThn44_N8S2489C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2489C16__8S2489C15__7S2489C1[] = {
  ABISELECT(60576,33852),
  ABISELECT(-14064,-7760),
  ABISELECT(8368,4728),
  ABISELECT(-16272,-8988),
  ABISELECT(-14448,-7964),
  ABISELECT(-14704,-8120),
  ABISELECT(-14576,-8048),
  ABISELECT(4912,2820),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C15D1Ev,_ZThn44_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C15D0Ev,_ZThn44_N8S2489C15D0Ev),
};
extern void ABISELECT(_ZTv0_n80_N8S2489C15D1Ev,_ZTv0_n40_N8S2489C15D1Ev)();
extern void ABISELECT(_ZThn5008_N8S2489C15D1Ev,_ZThn2864_N8S2489C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S2489C15D0Ev,_ZTv0_n40_N8S2489C15D0Ev)();
extern void ABISELECT(_ZThn5008_N8S2489C15D0Ev,_ZThn2864_N8S2489C15D0Ev)() __attribute__((weak));
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C17__8S2489C15__7S2489C1[] = {
  ABISELECT(512,308),
  ABISELECT(512,308),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-5008,-2864),
  ABISELECT(55664,31032),
  ABISELECT(-18976,-10580),
  ABISELECT(3456,1908),
  ABISELECT(-21184,-11808),
  ABISELECT(-19360,-10784),
  ABISELECT(-19616,-10940),
  ABISELECT(-19488,-10868),
  ABISELECT(-5008,-2864),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2489C15D1Ev,_ZTv0_n40_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2489C15D0Ev,_ZTv0_n40_N8S2489C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
};
extern void ABISELECT(_ZTvn96_n80_N8S2489C15D1Ev,_ZTvn44_n40_N8S2489C15D1Ev)();
extern void ABISELECT(_ZTvn96_n80_N8S2489C15D0Ev,_ZTvn44_n40_N8S2489C15D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C198S2489C17__8S2489C15__7S2489C1[] = {
  ABISELECT(-21280,-11852),
  ABISELECT(-19584,-10912),
  ABISELECT(-19712,-10984),
  ABISELECT(-19456,-10828),
  ABISELECT(-5104,-2908),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2489C15D1Ev,_ZTvn44_n40_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2489C15D0Ev,_ZTvn44_n40_N8S2489C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C198S2489C17__A2__8S2489C15__7S2489C1[] = {
  ABISELECT(-20128,-11248),
  ABISELECT(-5520,-3172),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2489C15D1Ev,_ZTv0_n32_N8S2489C15D1Ev)();
extern void ABISELECT(_ZThn8464_N8S2489C15D1Ev,_ZThn4772_N8S2489C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2489C15D0Ev,_ZTv0_n32_N8S2489C15D0Ev)();
extern void ABISELECT(_ZThn8464_N8S2489C15D0Ev,_ZThn4772_N8S2489C15D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C15__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(-8464,-4772),
  ABISELECT(-22432,-12488),
  ABISELECT(-24640,-13716),
  ABISELECT(-22944,-12776),
  ABISELECT(-23072,-12848),
  ABISELECT(-22816,-12692),
  ABISELECT(-8464,-4772),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C15D1Ev,_ZTv0_n32_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C15D0Ev,_ZTv0_n32_N8S2489C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C15__7S2489C1[] = {
  0,
  ABISELECT(13968,7716),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void ABISELECT(_ZTvn2704_n80_N8S2489C15D1Ev,_ZTvn1500_n40_N8S2489C15D1Ev)();
extern void ABISELECT(_ZTvn2704_n80_N8S2489C15D0Ev,_ZTvn1500_n40_N8S2489C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2489C218S2489C17__8S2489C15__7S2489C1[] = {
  ABISELECT(52960,29532),
  ABISELECT(-23888,-13308),
  ABISELECT(-22192,-12368),
  ABISELECT(-22320,-12440),
  ABISELECT(-22064,-12284),
  ABISELECT(-7712,-4364),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2489C15D1Ev,_ZTvn1500_n40_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2489C15D0Ev,_ZTvn1500_n40_N8S2489C15D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2489C15D1Ev,_ZTv0_n28_N8S2489C15D1Ev)();
extern void ABISELECT(_ZThn60672_N8S2489C15D1Ev,_ZThn33896_N8S2489C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C15D0Ev,_ZTv0_n28_N8S2489C15D0Ev)();
extern void ABISELECT(_ZThn60672_N8S2489C15D0Ev,_ZThn33896_N8S2489C15D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C15__7S2489C1[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-60672,-33896),
  ABISELECT(-76848,-42840),
  ABISELECT(-75152,-41900),
  ABISELECT(-75280,-41972),
  ABISELECT(-75024,-41816),
  ABISELECT(-60672,-33896),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C15D1Ev,_ZTv0_n28_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C15D0Ev,_ZTv0_n28_N8S2489C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C15__7S2489C1[] = {
  ABISELECT(-75696,-42236),
  ABISELECT(-61088,-34160),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
extern void _ZN8S2489C223v14Ev();
extern void _ZN8S2489C223v15Ev();
extern void ABISELECT(_ZThn2880_N8S2489C15D1Ev,_ZThn1652_N8S2489C15D1Ev)();
extern void ABISELECT(_ZThn2880_N8S2489C15D0Ev,_ZThn1652_N8S2489C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2489C22__8S2489C15__7S2489C1[] = {
  ABISELECT(57792,32244),
  ABISELECT(5584,3120),
  ABISELECT(-16848,-9368),
  ABISELECT(-19056,-10596),
  ABISELECT(-17360,-9656),
  ABISELECT(-17232,-9572),
  ABISELECT(66720,37236),
  ABISELECT(60400,33700),
  ABISELECT(-17488,-9728),
  ABISELECT(-2880,-1652),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
  (VTBL_ENTRY)&_ZN8S2489C223v14Ev,
  (VTBL_ENTRY)&_ZN8S2489C223v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2880_N8S2489C15D1Ev,_ZThn1652_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2880_N8S2489C15D0Ev,_ZThn1652_N8S2489C15D0Ev),
};
extern void ABISELECT(_ZTv0_n88_N8S2489C15D1Ev,_ZTv0_n44_N8S2489C15D1Ev)();
extern void ABISELECT(_ZThn63280_N8S2489C15D1Ev,_ZThn35352_N8S2489C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S2489C15D0Ev,_ZTv0_n44_N8S2489C15D0Ev)();
extern void ABISELECT(_ZThn63280_N8S2489C15D0Ev,_ZThn35352_N8S2489C15D0Ev)() __attribute__((weak));
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C23__8S2489C15__7S2489C1[] = {
  ABISELECT(512,308),
  ABISELECT(512,308),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-63280,-35352),
  ABISELECT(6320,3536),
  ABISELECT(-2608,-1456),
  ABISELECT(-77248,-43068),
  ABISELECT(-54816,-30580),
  ABISELECT(-79456,-44296),
  ABISELECT(-77632,-43272),
  ABISELECT(-77888,-43428),
  ABISELECT(-77760,-43356),
  ABISELECT(-63280,-35352),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2489C15D1Ev,_ZTv0_n44_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2489C15D0Ev,_ZTv0_n44_N8S2489C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2489C15D1Ev,_ZTv0_n28_N8S2489C15D1Ev)();
extern void ABISELECT(_ZThn69600_N8S2489C15D1Ev,_ZThn38888_N8S2489C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C15D0Ev,_ZTv0_n28_N8S2489C15D0Ev)();
extern void ABISELECT(_ZThn69600_N8S2489C15D0Ev,_ZThn38888_N8S2489C15D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C10__A3__8S2489C15__7S2489C1[] = {
  0,
  ABISELECT(-69600,-38888),
  ABISELECT(-85776,-47832),
  ABISELECT(-84080,-46892),
  ABISELECT(-84208,-46964),
  ABISELECT(-83952,-46808),
  ABISELECT(-69600,-38888),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C15D1Ev,_ZTv0_n28_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C15D0Ev,_ZTv0_n28_N8S2489C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void ABISELECT(_ZTvn96_n88_N8S2489C15D1Ev,_ZTvn44_n44_N8S2489C15D1Ev)();
extern void ABISELECT(_ZTvn96_n88_N8S2489C15D0Ev,_ZTvn44_n44_N8S2489C15D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C198S2489C178S2489C23__A2__8S2489C15__7S2489C1[] = {
  ABISELECT(-79552,-44340),
  ABISELECT(-77856,-43400),
  ABISELECT(-77984,-43472),
  ABISELECT(-77728,-43316),
  ABISELECT(-63376,-35396),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2489C15D1Ev,_ZTvn44_n44_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2489C15D0Ev,_ZTvn44_n44_N8S2489C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C198S2489C178S2489C23__A4__8S2489C15__7S2489C1[] = {
  ABISELECT(-78400,-43736),
  ABISELECT(-63792,-35660),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTvn2704_n88_N8S2489C15D1Ev,_ZTvn1500_n44_N8S2489C15D1Ev)();
extern void ABISELECT(_ZTvn2704_n88_N8S2489C15D0Ev,_ZTvn1500_n44_N8S2489C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2489C218S2489C178S2489C23__A1__8S2489C15__7S2489C1[] = {
  ABISELECT(-5312,-2956),
  ABISELECT(-82160,-45796),
  ABISELECT(-80464,-44856),
  ABISELECT(-80592,-44928),
  ABISELECT(-80336,-44772),
  ABISELECT(-65984,-36852),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2489C15D1Ev,_ZTvn1500_n44_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2489C15D0Ev,_ZTvn1500_n44_N8S2489C15D0Ev),
};
extern void ABISELECT(_ZThn4688_N8S2489C15D1Ev,_ZThn2684_N8S2489C15D1Ev)();
extern void ABISELECT(_ZThn4688_N8S2489C15D0Ev,_ZThn2684_N8S2489C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2489C21__A2__8S2489C15__7S2489C1[] = {
  ABISELECT(55984,31212),
  ABISELECT(-20864,-11628),
  ABISELECT(-19168,-10688),
  ABISELECT(-19296,-10760),
  ABISELECT(-19040,-10604),
  ABISELECT(-4688,-2684),
  (VTBL_ENTRY)&(_ZTI8S2489C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4688_N8S2489C15D1Ev,_ZThn2684_N8S2489C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4688_N8S2489C15D0Ev,_ZThn2684_N8S2489C15D0Ev),
};
extern void _ZN8S2489C17D1Ev();
extern void _ZN8S2489C17D0Ev();
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C17__7S2489C1[] = {
  ABISELECT(55664,31032),
  ABISELECT(-18976,-10580),
  ABISELECT(3456,1908),
  ABISELECT(-21184,-11808),
  ABISELECT(-19360,-10784),
  ABISELECT(-19616,-10940),
  ABISELECT(-19488,-10868),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN8S2489C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C17D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
};
extern void _ZN8S2489C19D1Ev();
extern void _ZN8S2489C19D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C198S2489C17__7S2489C1[] = {
  ABISELECT(-21280,-11852),
  ABISELECT(-19584,-10912),
  ABISELECT(-19712,-10984),
  ABISELECT(-19456,-10828),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN8S2489C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C108S2489C198S2489C17__A1__7S2489C1[] = {
  ABISELECT(-21280,-11852),
  ABISELECT(-19584,-10912),
  ABISELECT(-19712,-10984),
  ABISELECT(-19456,-10828),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C108S2489C198S2489C17__A1__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(19456,10828),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C108S2489C198S2489C17__A1__7S2489C1[] = {
  0,
  ABISELECT(19584,10912),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(19584,10912),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C108S2489C198S2489C17__A1__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(21280,11852),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C198S2489C17__A2__7S2489C1[] = {
  ABISELECT(-20128,-11248),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C198S2489C17__7S2489C1[] = {
  0,
  ABISELECT(19584,10912),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(19584,10912),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C198S2489C17__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(19456,10828),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C198S2489C17__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(21280,11852),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A__8S2489C198S2489C17__7S2489C1[] = {
  ABISELECT(-20128,-11248),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C21D1Ev();
extern void _ZN8S2489C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C218S2489C17__7S2489C1[] = {
  ABISELECT(52960,29532),
  ABISELECT(-23888,-13308),
  ABISELECT(-22192,-12368),
  ABISELECT(-22320,-12440),
  ABISELECT(-22064,-12284),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN8S2489C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C21D0Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C218S2489C17__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(22064,12284),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C218S2489C17__7S2489C1[] = {
  0,
  ABISELECT(22192,12368),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(22192,12368),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C218S2489C17__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(23888,13308),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev)();
extern void ABISELECT(_ZThn52960_N8S2489C21D1Ev,_ZThn29532_N8S2489C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev)();
extern void ABISELECT(_ZThn52960_N8S2489C21D0Ev,_ZThn29532_N8S2489C21D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__8S2489C218S2489C17__7S2489C1[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-52960,-29532),
  ABISELECT(-76848,-42840),
  ABISELECT(-75152,-41900),
  ABISELECT(-75280,-41972),
  ABISELECT(-75024,-41816),
  ABISELECT(-52960,-29532),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A2__8S2489C218S2489C17__7S2489C1[] = {
  ABISELECT(-75696,-42236),
  ABISELECT(-53376,-29796),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZThn96_N8S2489C17D1Ev,_ZThn44_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S2489C17D0Ev,_ZThn44_N8S2489C17D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A__8S2489C17__7S2489C1[] = {
  ABISELECT(-21280,-11852),
  ABISELECT(-19584,-10912),
  ABISELECT(-19712,-10984),
  ABISELECT(-19456,-10828),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C17D1Ev,_ZThn44_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C17D0Ev,_ZThn44_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C17__7S2489C1[] = {
  0,
  ABISELECT(19488,10868),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(19488,10868),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C17__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(19360,10784),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C17__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(21184,11808),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A2__8S2489C17__7S2489C1[] = {
  ABISELECT(-20128,-11248),
  ABISELECT(-512,-308),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn3456_N8S2489C17D1Ev,_ZThn1908_N8S2489C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev)();
extern void ABISELECT(_ZThn3456_N8S2489C17D0Ev,_ZThn1908_N8S2489C17D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C17__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(-3456,-1908),
  ABISELECT(-22432,-12488),
  ABISELECT(-24640,-13716),
  ABISELECT(-22944,-12776),
  ABISELECT(-23072,-12848),
  ABISELECT(-22816,-12692),
  ABISELECT(-3456,-1908),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C17__7S2489C1[] = {
  0,
  ABISELECT(18976,10580),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void ABISELECT(_ZThn2704_N8S2489C17D1Ev,_ZThn1500_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2489C17D0Ev,_ZThn1500_N8S2489C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2489C21__8S2489C17__7S2489C1[] = {
  ABISELECT(52960,29532),
  ABISELECT(-23888,-13308),
  ABISELECT(-22192,-12368),
  ABISELECT(-22320,-12440),
  ABISELECT(-22064,-12284),
  ABISELECT(-2704,-1500),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C17D1Ev,_ZThn1500_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C17D0Ev,_ZThn1500_N8S2489C17D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn55664_N8S2489C17D1Ev,_ZThn31032_N8S2489C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev)();
extern void ABISELECT(_ZThn55664_N8S2489C17D0Ev,_ZThn31032_N8S2489C17D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C17__7S2489C1[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-55664,-31032),
  ABISELECT(-76848,-42840),
  ABISELECT(-75152,-41900),
  ABISELECT(-75280,-41972),
  ABISELECT(-75024,-41816),
  ABISELECT(-55664,-31032),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C17__7S2489C1[] = {
  ABISELECT(-75696,-42236),
  ABISELECT(-56080,-31296),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C20D1Ev();
extern void _ZN8S2489C20D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__7S2489C1[] = {
  ABISELECT(-22432,-12488),
  ABISELECT(-24640,-13716),
  ABISELECT(-22944,-12776),
  ABISELECT(-23072,-12848),
  ABISELECT(-22816,-12692),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN8S2489C20D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C20D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN7S2489C9D1Ev();
extern void _ZN7S2489C9D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C98S2489C20__A1__7S2489C1[] = {
  ABISELECT(-24640,-13716),
  ABISELECT(-22944,-12776),
  ABISELECT(-23072,-12848),
  ABISELECT(-22816,-12692),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2489C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C107S2489C98S2489C20__A2__7S2489C1[] = {
  ABISELECT(-24640,-13716),
  ABISELECT(-22944,-12776),
  ABISELECT(-23072,-12848),
  ABISELECT(-22816,-12692),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C107S2489C98S2489C20__A2__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(22816,12692),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C107S2489C98S2489C20__A2__7S2489C1[] = {
  0,
  ABISELECT(22944,12776),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(22944,12776),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C107S2489C98S2489C20__A2__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(24640,13716),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__7S2489C98S2489C20__A1__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(22816,12692),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__7S2489C98S2489C20__A1__7S2489C1[] = {
  0,
  ABISELECT(22944,12776),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(22944,12776),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__7S2489C98S2489C20__A1__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(24640,13716),
  (VTBL_ENTRY)&(_ZTI7S2489C9[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C20__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(24640,13716),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A1__8S2489C20__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(22816,12692),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C20D1Ev,_ZTv0_n20_N8S2489C20D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C20D0Ev,_ZTv0_n20_N8S2489C20D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C20__7S2489C1[] = {
  0,
  ABISELECT(22944,12776),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(22944,12776),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C20D1Ev,_ZTv0_n20_N8S2489C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C20D0Ev,_ZTv0_n20_N8S2489C20D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C20__7S2489C1[] = {
  0,
  ABISELECT(22432,12488),
  (VTBL_ENTRY)&(_ZTI8S2489C20[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void _ZN8S2489C19D1Ev();
extern void _ZN8S2489C19D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__7S2489C1[] = {
  ABISELECT(-76848,-42840),
  ABISELECT(-75152,-41900),
  ABISELECT(-75280,-41972),
  ABISELECT(-75024,-41816),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN8S2489C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C108S2489C19__A3__7S2489C1[] = {
  ABISELECT(-76848,-42840),
  ABISELECT(-75152,-41900),
  ABISELECT(-75280,-41972),
  ABISELECT(-75024,-41816),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C108S2489C19__A3__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(75024,41816),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C108S2489C19__A3__7S2489C1[] = {
  0,
  ABISELECT(75152,41900),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(75152,41900),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C108S2489C19__A3__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(76848,42840),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__7S2489C1[] = {
  ABISELECT(-75696,-42236),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C19__A1__7S2489C1[] = {
  0,
  ABISELECT(75152,41900),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(75152,41900),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C19__A1__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(75024,41816),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C19__A1__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(76848,42840),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A__8S2489C19__A1__7S2489C1[] = {
  ABISELECT(-75696,-42236),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C23D1Ev();
extern void _ZN8S2489C23D0Ev();
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C23__7S2489C1[] = {
  ABISELECT(6320,3536),
  ABISELECT(-2608,-1456),
  ABISELECT(-77248,-43068),
  ABISELECT(-54816,-30580),
  ABISELECT(-79456,-44296),
  ABISELECT(-77632,-43272),
  ABISELECT(-77888,-43428),
  ABISELECT(-77760,-43356),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN8S2489C23D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C23D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
};
extern void _ZN8S2489C17D1Ev();
extern void _ZN8S2489C17D0Ev();
extern void _ZN8S2489C173v12Ev();
extern void _ZN8S2489C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C178S2489C23__A1__7S2489C1[] = {
  ABISELECT(-2608,-1456),
  ABISELECT(-77248,-43068),
  ABISELECT(-54816,-30580),
  ABISELECT(-79456,-44296),
  ABISELECT(-77632,-43272),
  ABISELECT(-77888,-43428),
  ABISELECT(-77760,-43356),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN8S2489C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C17D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2489C173v13Ev,
};
extern void _ZN8S2489C19D1Ev();
extern void _ZN8S2489C19D0Ev();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C198S2489C178S2489C23__A2__7S2489C1[] = {
  ABISELECT(-79552,-44340),
  ABISELECT(-77856,-43400),
  ABISELECT(-77984,-43472),
  ABISELECT(-77728,-43316),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN8S2489C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C108S2489C198S2489C178S2489C23__A5__7S2489C1[] = {
  ABISELECT(-79552,-44340),
  ABISELECT(-77856,-43400),
  ABISELECT(-77984,-43472),
  ABISELECT(-77728,-43316),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C108S2489C198S2489C178S2489C23__A5__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(77728,43316),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C108S2489C198S2489C178S2489C23__A5__7S2489C1[] = {
  0,
  ABISELECT(77856,43400),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(77856,43400),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C108S2489C198S2489C178S2489C23__A5__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(79552,44340),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C198S2489C178S2489C23__A4__7S2489C1[] = {
  ABISELECT(-78400,-43736),
  0,
  (VTBL_ENTRY)&(_ZTI7S2489C6[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C198S2489C178S2489C23__A2__7S2489C1[] = {
  0,
  ABISELECT(77856,43400),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(77856,43400),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D1Ev,_ZTv0_n20_N8S2489C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C19D0Ev,_ZTv0_n20_N8S2489C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C198S2489C178S2489C23__A2__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(77728,43316),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C198S2489C178S2489C23__A2__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(79552,44340),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__A__8S2489C198S2489C178S2489C23__A2__7S2489C1[] = {
  ABISELECT(-78400,-43736),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S2489C19[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C21D1Ev();
extern void _ZN8S2489C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C218S2489C178S2489C23__A1__7S2489C1[] = {
  ABISELECT(-5312,-2956),
  ABISELECT(-82160,-45796),
  ABISELECT(-80464,-44856),
  ABISELECT(-80592,-44928),
  ABISELECT(-80336,-44772),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN8S2489C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C21D0Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C218S2489C178S2489C23__A1__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(80336,44772),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C218S2489C178S2489C23__A1__7S2489C1[] = {
  0,
  ABISELECT(80464,44856),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(80464,44856),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D1Ev,_ZTv0_n20_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C21D0Ev,_ZTv0_n20_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C218S2489C178S2489C23__A1__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(82160,45796),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__8S2489C218S2489C178S2489C23__A1__7S2489C1[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(5312,2956),
  ABISELECT(-76848,-42840),
  ABISELECT(-75152,-41900),
  ABISELECT(-75280,-41972),
  ABISELECT(-75024,-41816),
  ABISELECT(5312,2956),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A2__8S2489C218S2489C178S2489C23__A1__7S2489C1[] = {
  ABISELECT(-75696,-42236),
  ABISELECT(4896,2692),
  (VTBL_ENTRY)&(_ZTI8S2489C21[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZThn96_N8S2489C17D1Ev,_ZThn44_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S2489C17D0Ev,_ZThn44_N8S2489C17D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A__8S2489C178S2489C23__A1__7S2489C1[] = {
  ABISELECT(-79552,-44340),
  ABISELECT(-77856,-43400),
  ABISELECT(-77984,-43472),
  ABISELECT(-77728,-43316),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C17D1Ev,_ZThn44_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C17D0Ev,_ZThn44_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C178S2489C23__A1__7S2489C1[] = {
  0,
  ABISELECT(77760,43356),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(77760,43356),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C17D1Ev,_ZTv0_n20_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C17D0Ev,_ZTv0_n20_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C178S2489C23__A1__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(77632,43272),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C178S2489C23__A1__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(79456,44296),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A2__8S2489C178S2489C23__A1__7S2489C1[] = {
  ABISELECT(-78400,-43736),
  ABISELECT(-512,-308),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C178S2489C23__A1__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(54816,30580),
  ABISELECT(-22432,-12488),
  ABISELECT(-24640,-13716),
  ABISELECT(-22944,-12776),
  ABISELECT(-23072,-12848),
  ABISELECT(-22816,-12692),
  ABISELECT(54816,30580),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C178S2489C23__A1__7S2489C1[] = {
  0,
  ABISELECT(77248,43068),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void ABISELECT(_ZThn2704_N8S2489C17D1Ev,_ZThn1500_N8S2489C17D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2489C17D0Ev,_ZThn1500_N8S2489C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2489C21__8S2489C178S2489C23__A1__7S2489C1[] = {
  ABISELECT(-5312,-2956),
  ABISELECT(-82160,-45796),
  ABISELECT(-80464,-44856),
  ABISELECT(-80592,-44928),
  ABISELECT(-80336,-44772),
  ABISELECT(-2704,-1500),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C17D1Ev,_ZThn1500_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C17D0Ev,_ZThn1500_N8S2489C17D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C178S2489C23__A1__7S2489C1[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(2608,1456),
  ABISELECT(-76848,-42840),
  ABISELECT(-75152,-41900),
  ABISELECT(-75280,-41972),
  ABISELECT(-75024,-41816),
  ABISELECT(2608,1456),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C178S2489C23__A1__7S2489C1[] = {
  ABISELECT(-75696,-42236),
  ABISELECT(2192,1192),
  (VTBL_ENTRY)&(_ZTI8S2489C17[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev)();
extern void ABISELECT(_ZThn6320_N8S2489C23D1Ev,_ZThn3536_N8S2489C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev)();
extern void ABISELECT(_ZThn6320_N8S2489C23D0Ev,_ZThn3536_N8S2489C23D0Ev)() __attribute__((weak));
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C10__8S2489C23__7S2489C1[] = {
  0,
  ABISELECT(-6320,-3536),
  ABISELECT(-85776,-47832),
  ABISELECT(-84080,-46892),
  ABISELECT(-84208,-46964),
  ABISELECT(-83952,-46808),
  ABISELECT(-6320,-3536),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C23__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(77632,43272),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C23D1Ev,_ZTv0_n20_N8S2489C23D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C23D0Ev,_ZTv0_n20_N8S2489C23D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C23__7S2489C1[] = {
  0,
  ABISELECT(77760,43356),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(77760,43356),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C23D1Ev,_ZTv0_n20_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C23D0Ev,_ZTv0_n20_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C23__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(79456,44296),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
extern void _ZN8S2489C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C13__8S2489C23__7S2489C1[] = {
  0,
  ABISELECT(77248,43068),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN8S2489C133v11Ev,
};
extern void ABISELECT(_ZThn96_N8S2489C23D1Ev,_ZThn44_N8S2489C23D1Ev)();
extern void ABISELECT(_ZThn96_N8S2489C23D0Ev,_ZThn44_N8S2489C23D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C198S2489C17__8S2489C23__7S2489C1[] = {
  ABISELECT(-79552,-44340),
  ABISELECT(-77856,-43400),
  ABISELECT(-77984,-43472),
  ABISELECT(-77728,-43316),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C23D1Ev,_ZThn44_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2489C23D0Ev,_ZThn44_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C198S2489C17__A2__8S2489C23__7S2489C1[] = {
  ABISELECT(-78400,-43736),
  ABISELECT(-512,-308),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2489C23D1Ev,_ZTv0_n32_N8S2489C23D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S2489C23D0Ev,_ZTv0_n32_N8S2489C23D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN7S2489C92v6Ev();
extern void _ZN7S2489C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C20__8S2489C23__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(54816,30580),
  ABISELECT(-22432,-12488),
  ABISELECT(-24640,-13716),
  ABISELECT(-22944,-12776),
  ABISELECT(-23072,-12848),
  ABISELECT(-22816,-12692),
  ABISELECT(54816,30580),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C23D1Ev,_ZTv0_n32_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2489C23D0Ev,_ZTv0_n32_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2489C92v7Ev,
};
extern void ABISELECT(_ZThn2704_N8S2489C23D1Ev,_ZThn1500_N8S2489C23D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2489C23D0Ev,_ZThn1500_N8S2489C23D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2489C218S2489C17__8S2489C23__7S2489C1[] = {
  ABISELECT(-5312,-2956),
  ABISELECT(-82160,-45796),
  ABISELECT(-80464,-44856),
  ABISELECT(-80592,-44928),
  ABISELECT(-80336,-44772),
  ABISELECT(-2704,-1500),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C23D1Ev,_ZThn1500_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2489C23D0Ev,_ZThn1500_N8S2489C23D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev)();
extern void _ZN8S2489C102v5Ev();
extern void _ZN8S2489C192v8Ev();
extern void _ZN8S2489C192v9Ev();
extern void _ZN8S2489C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C19__A1__8S2489C23__7S2489C1[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(2608,1456),
  ABISELECT(-76848,-42840),
  ABISELECT(-75152,-41900),
  ABISELECT(-75280,-41972),
  ABISELECT(-75024,-41816),
  ABISELECT(2608,1456),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2489C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2489C193v10Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C68S2489C19__A3__8S2489C23__7S2489C1[] = {
  ABISELECT(-75696,-42236),
  ABISELECT(2192,1192),
  (VTBL_ENTRY)&(_ZTI8S2489C23[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void _ZN8S2489C10D1Ev();
extern void _ZN8S2489C10D0Ev();
extern void _ZN8S2489C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2489C10__A4__7S2489C1[] = {
  ABISELECT(-85776,-47832),
  ABISELECT(-84080,-46892),
  ABISELECT(-84208,-46964),
  ABISELECT(-83952,-46808),
  0,
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN8S2489C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2489C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2489C102v5Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C6__8S2489C10__A4__7S2489C1[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(83952,46808),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev)();
extern void _ZN7S2489C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C8__8S2489C10__A4__7S2489C1[] = {
  0,
  ABISELECT(84080,46892),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(84080,46892),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2489C82v4Ev,
};
extern void _ZN7S2489C62v1Ev();
extern void _ZN7S2489C62v2Ev();
extern void _ZN7S2489C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2489C5__8S2489C10__A4__7S2489C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(85776,47832),
  (VTBL_ENTRY)&(_ZTI8S2489C10[0]),
  (VTBL_ENTRY)&_ZN7S2489C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2489C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2489C52v3Ev,
};
static  VTT_ENTRY vtt_S2489C1[] = {
  {&(_ZTV7S2489C1[13]),  13,254},
  {&(_tg__ZTV7S2489C2__7S2489C1[6]),  6,11},
  {&(_tg__ZTV7S2489C97S2489C2__7S2489C1[6]),  6,11},
  {&(_tg__ZTV8S2489C107S2489C97S2489C2__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C107S2489C97S2489C2__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C107S2489C97S2489C2__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C107S2489C97S2489C2__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__7S2489C97S2489C2__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C8__7S2489C97S2489C2__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C5__7S2489C97S2489C2__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C5__7S2489C2__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C8__7S2489C2__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A1__7S2489C2__7S2489C1[5]),  5,7},
  {&(_ZTV7S2489C1[24]),  24,254},
  {&(_ZTV7S2489C1[33]),  33,254},
  {&(_ZTV7S2489C1[41]),  41,254},
  {&(_ZTV7S2489C1[46]),  46,254},
  {&(_ZTV7S2489C1[65]),  65,254},
  {&(_ZTV7S2489C1[77]),  77,254},
  {&(_ZTV7S2489C1[124]),  124,254},
  {&(_ZTV7S2489C1[134]),  134,254},
  {&(_ZTV7S2489C1[143]),  143,254},
  {&(_ZTV7S2489C1[165]),  165,254},
  {&(_ZTV7S2489C1[152]),  152,254},
  {&(_ZTV7S2489C1[183]),  183,254},
  {&(_ZTV7S2489C1[192]),  192,254},
  {&(_ZTV7S2489C1[90]),  90,254},
  {&(_ZTV7S2489C1[213]),  213,254},
  {&(_ZTV7S2489C1[251]),  251,254},
  {&(_ZTV7S2489C1[223]),  223,254},
  {&(_ZTV7S2489C1[232]),  232,254},
  {&(_ZTV7S2489C1[241]),  241,254},
  {&(_ZTV7S2489C1[104]),  104,254},
  {&(_tg__ZTV7S2489C5__7S2489C1[3]),  3,6},
  {&(_tg__ZTV7S2489C67S2489C5__7S2489C1[3]),  3,5},
  {&(_tg__ZTV7S2489C8__7S2489C1[4]),  4,7},
  {&(_tg__ZTV7S2489C6__7S2489C8__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C6__A1__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C15__7S2489C1[12]),  12,14},
  {&(_tg__ZTV8S2489C148S2489C15__7S2489C1[6]),  6,8},
  {&(_tg__ZTV7S2489C5__8S2489C148S2489C15__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C8__8S2489C148S2489C15__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A1__8S2489C148S2489C15__7S2489C1[5]),  5,7},
  {&(_tg__ZTV8S2489C168S2489C15__7S2489C1[10]),  10,12},
  {&(_tg__ZTV8S2489C17__8S2489C168S2489C15__7S2489C1[18]),  18,22},
  {&(_tg__ZTV8S2489C198S2489C17__8S2489C168S2489C15__7S2489C1[6]),  6,12},
  {&(_tg__ZTV7S2489C8__8S2489C168S2489C15__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C168S2489C15__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C168S2489C15__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C198S2489C17__A2__8S2489C168S2489C15__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C168S2489C15__7S2489C1[11]),  11,16},
  {&(_tg__ZTV8S2489C13__8S2489C168S2489C15__7S2489C1[3]),  3,4},
  {&(_tg__ZTV8S2489C218S2489C17__8S2489C168S2489C15__7S2489C1[7]),  7,9},
  {&(_tg__ZTV8S2489C19__A1__8S2489C168S2489C15__7S2489C1[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C168S2489C15__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C228S2489C15__7S2489C1[11]),  11,18},
  {&(_tg__ZTV7S2489C58S2489C228S2489C15__A1__7S2489C1[3]),  3,6},
  {&(_tg__ZTV7S2489C67S2489C58S2489C228S2489C15__A5__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C23__8S2489C228S2489C15__7S2489C1[19]),  19,23},
  {&(_tg__ZTV8S2489C10__8S2489C228S2489C15__7S2489C1[8]),  8,11},
  {&(_tg__ZTV7S2489C6__8S2489C228S2489C15__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C228S2489C15__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C228S2489C15__7S2489C1[6]),  6,9},
  {&(_tg__ZTV8S2489C13__8S2489C228S2489C15__7S2489C1[3]),  3,4},
  {&(_tg__ZTV8S2489C198S2489C178S2489C23__8S2489C228S2489C15__7S2489C1[6]),  6,12},
  {&(_tg__ZTV7S2489C68S2489C198S2489C178S2489C23__A2__8S2489C228S2489C15__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C228S2489C15__7S2489C1[11]),  11,16},
  {&(_tg__ZTV8S2489C218S2489C178S2489C23__8S2489C228S2489C15__7S2489C1[7]),  7,9},
  {&(_tg__ZTV8S2489C19__A1__8S2489C228S2489C15__7S2489C1[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C228S2489C15__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C218S2489C15__A2__7S2489C1[7]),  7,9},
  {&(_tg__ZTV7S2489C6__8S2489C218S2489C15__A2__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C218S2489C15__A2__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C218S2489C15__A2__7S2489C1[6]),  6,9},
  {&(_tg__ZTV8S2489C19__8S2489C218S2489C15__A2__7S2489C1[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A2__8S2489C218S2489C15__A2__7S2489C1[3]),  3,5},
  {&(_tg__ZTV7S2489C5__8S2489C15__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C8__8S2489C15__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A1__8S2489C15__7S2489C1[5]),  5,7},
  {&(_tg__ZTV8S2489C16__8S2489C15__7S2489C1[10]),  10,12},
  {&(_tg__ZTV8S2489C17__8S2489C15__7S2489C1[18]),  18,22},
  {&(_tg__ZTV8S2489C198S2489C17__8S2489C15__7S2489C1[6]),  6,12},
  {&(_tg__ZTV7S2489C68S2489C198S2489C17__A2__8S2489C15__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C15__7S2489C1[11]),  11,16},
  {&(_tg__ZTV8S2489C13__8S2489C15__7S2489C1[3]),  3,4},
  {&(_tg__ZTV8S2489C218S2489C17__8S2489C15__7S2489C1[7]),  7,9},
  {&(_tg__ZTV8S2489C19__A1__8S2489C15__7S2489C1[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C15__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C22__8S2489C15__7S2489C1[11]),  11,18},
  {&(_tg__ZTV8S2489C23__8S2489C15__7S2489C1[19]),  19,23},
  {&(_tg__ZTV8S2489C10__A3__8S2489C15__7S2489C1[8]),  8,11},
  {&(_tg__ZTV8S2489C198S2489C178S2489C23__A2__8S2489C15__7S2489C1[6]),  6,12},
  {&(_tg__ZTV7S2489C68S2489C198S2489C178S2489C23__A4__8S2489C15__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C218S2489C178S2489C23__A1__8S2489C15__7S2489C1[7]),  7,9},
  {&(_tg__ZTV8S2489C21__A2__8S2489C15__7S2489C1[7]),  7,9},
  {&(_tg__ZTV8S2489C17__7S2489C1[9]),  9,13},
  {&(_tg__ZTV8S2489C198S2489C17__7S2489C1[6]),  6,12},
  {&(_tg__ZTV8S2489C108S2489C198S2489C17__A1__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C108S2489C198S2489C17__A1__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C108S2489C198S2489C17__A1__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C108S2489C198S2489C17__A1__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C198S2489C17__A2__7S2489C1[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C198S2489C17__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C198S2489C17__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C198S2489C17__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A__8S2489C198S2489C17__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C218S2489C17__7S2489C1[7]),  7,9},
  {&(_tg__ZTV7S2489C6__8S2489C218S2489C17__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C218S2489C17__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C218S2489C17__7S2489C1[6]),  6,9},
  {&(_tg__ZTV8S2489C19__8S2489C218S2489C17__7S2489C1[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A2__8S2489C218S2489C17__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C19__A__8S2489C17__7S2489C1[6]),  6,12},
  {&(_tg__ZTV7S2489C8__8S2489C17__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C17__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C17__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C19__A2__8S2489C17__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C17__7S2489C1[11]),  11,16},
  {&(_tg__ZTV8S2489C13__8S2489C17__7S2489C1[3]),  3,4},
  {&(_tg__ZTV8S2489C21__8S2489C17__7S2489C1[7]),  7,9},
  {&(_tg__ZTV8S2489C19__A1__8S2489C17__7S2489C1[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C17__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C20__7S2489C1[7]),  7,12},
  {&(_tg__ZTV7S2489C98S2489C20__A1__7S2489C1[6]),  6,11},
  {&(_tg__ZTV8S2489C107S2489C98S2489C20__A2__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C107S2489C98S2489C20__A2__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C107S2489C98S2489C20__A2__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C107S2489C98S2489C20__A2__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__7S2489C98S2489C20__A1__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C8__7S2489C98S2489C20__A1__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C5__7S2489C98S2489C20__A1__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C20__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A1__8S2489C20__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C20__7S2489C1[6]),  6,9},
  {&(_tg__ZTV8S2489C13__8S2489C20__7S2489C1[3]),  3,4},
  {&(_tg__ZTV8S2489C19__A1__7S2489C1[6]),  6,12},
  {&(_tg__ZTV8S2489C108S2489C19__A3__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C108S2489C19__A3__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C108S2489C19__A3__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C108S2489C19__A3__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C19__A3__7S2489C1[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C19__A1__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C19__A1__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C19__A1__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A__8S2489C19__A1__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C23__7S2489C1[10]),  10,14},
  {&(_tg__ZTV8S2489C178S2489C23__A1__7S2489C1[9]),  9,13},
  {&(_tg__ZTV8S2489C198S2489C178S2489C23__A2__7S2489C1[6]),  6,12},
  {&(_tg__ZTV8S2489C108S2489C198S2489C178S2489C23__A5__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C108S2489C198S2489C178S2489C23__A5__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C108S2489C198S2489C178S2489C23__A5__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C108S2489C198S2489C178S2489C23__A5__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C198S2489C178S2489C23__A4__7S2489C1[3]),  3,5},
  {&(_tg__ZTV7S2489C8__8S2489C198S2489C178S2489C23__A2__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C198S2489C178S2489C23__A2__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C198S2489C178S2489C23__A2__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__A__8S2489C198S2489C178S2489C23__A2__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C218S2489C178S2489C23__A1__7S2489C1[7]),  7,9},
  {&(_tg__ZTV7S2489C6__8S2489C218S2489C178S2489C23__A1__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C218S2489C178S2489C23__A1__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C218S2489C178S2489C23__A1__7S2489C1[6]),  6,9},
  {&(_tg__ZTV8S2489C19__8S2489C218S2489C178S2489C23__A1__7S2489C1[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A2__8S2489C218S2489C178S2489C23__A1__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C19__A__8S2489C178S2489C23__A1__7S2489C1[6]),  6,12},
  {&(_tg__ZTV7S2489C8__8S2489C178S2489C23__A1__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C178S2489C23__A1__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C5__8S2489C178S2489C23__A1__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C68S2489C19__A2__8S2489C178S2489C23__A1__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C178S2489C23__A1__7S2489C1[11]),  11,16},
  {&(_tg__ZTV8S2489C13__8S2489C178S2489C23__A1__7S2489C1[3]),  3,4},
  {&(_tg__ZTV8S2489C21__8S2489C178S2489C23__A1__7S2489C1[7]),  7,9},
  {&(_tg__ZTV8S2489C19__A1__8S2489C178S2489C23__A1__7S2489C1[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C178S2489C23__A1__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C10__8S2489C23__7S2489C1[8]),  8,11},
  {&(_tg__ZTV7S2489C6__8S2489C23__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C23__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C23__7S2489C1[6]),  6,9},
  {&(_tg__ZTV8S2489C13__8S2489C23__7S2489C1[3]),  3,4},
  {&(_tg__ZTV8S2489C198S2489C17__8S2489C23__7S2489C1[6]),  6,12},
  {&(_tg__ZTV7S2489C68S2489C198S2489C17__A2__8S2489C23__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C20__8S2489C23__7S2489C1[11]),  11,16},
  {&(_tg__ZTV8S2489C218S2489C17__8S2489C23__7S2489C1[7]),  7,9},
  {&(_tg__ZTV8S2489C19__A1__8S2489C23__7S2489C1[13]),  13,19},
  {&(_tg__ZTV7S2489C68S2489C19__A3__8S2489C23__7S2489C1[3]),  3,5},
  {&(_tg__ZTV8S2489C10__A4__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C6__8S2489C10__A4__7S2489C1[5]),  5,7},
  {&(_tg__ZTV7S2489C8__8S2489C10__A4__7S2489C1[6]),  6,9},
  {&(_tg__ZTV7S2489C5__8S2489C10__A4__7S2489C1[6]),  6,9},
};
extern VTBL_ENTRY _ZTI7S2489C1[];
extern  VTBL_ENTRY _ZTV7S2489C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2489C1[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C23D0Ev,_ZTv0_n28_N8S2489C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N8S2489C23D0Ev,_ZThn3536_N8S2489C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C23D1Ev,_ZTv0_n28_N8S2489C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N8S2489C23D1Ev,_ZThn3536_N8S2489C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C17D0Ev,_ZTv0_n28_N8S2489C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn55664_N8S2489C17D0Ev,_ZThn31032_N8S2489C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C17D1Ev,_ZTv0_n28_N8S2489C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn55664_N8S2489C17D1Ev,_ZThn31032_N8S2489C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C17D0Ev,_ZTv0_n32_N8S2489C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N8S2489C17D0Ev,_ZThn1908_N8S2489C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C17D1Ev,_ZTv0_n32_N8S2489C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N8S2489C17D1Ev,_ZThn1908_N8S2489C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2489C15D0Ev,_ZTv0_n44_N8S2489C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn63280_N8S2489C15D0Ev,_ZThn35352_N8S2489C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2489C15D1Ev,_ZTv0_n44_N8S2489C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn63280_N8S2489C15D1Ev,_ZThn35352_N8S2489C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C15D0Ev,_ZTv0_n28_N8S2489C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn69600_N8S2489C15D0Ev,_ZThn38888_N8S2489C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn60672_N8S2489C15D0Ev,_ZThn33896_N8S2489C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C15D1Ev,_ZTv0_n28_N8S2489C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn69600_N8S2489C15D1Ev,_ZThn38888_N8S2489C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn60672_N8S2489C15D1Ev,_ZThn33896_N8S2489C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C15D0Ev,_ZTv0_n32_N8S2489C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8464_N8S2489C15D0Ev,_ZThn4772_N8S2489C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C15D1Ev,_ZTv0_n32_N8S2489C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8464_N8S2489C15D1Ev,_ZThn4772_N8S2489C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2489C15D0Ev,_ZTv0_n40_N8S2489C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5008_N8S2489C15D0Ev,_ZThn2864_N8S2489C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2489C15D1Ev,_ZTv0_n40_N8S2489C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5008_N8S2489C15D1Ev,_ZThn2864_N8S2489C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C21D0Ev,_ZTv0_n28_N8S2489C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N8S2489C21D0Ev,_ZThn29532_N8S2489C21D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn55984_N8S2489C21D0Ev,_ZThn31212_N8S2489C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C21D1Ev,_ZTv0_n28_N8S2489C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N8S2489C21D1Ev,_ZThn29532_N8S2489C21D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn55984_N8S2489C21D1Ev,_ZThn31212_N8S2489C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C22D0Ev,_ZTv0_n32_N8S2489C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5584_N8S2489C22D0Ev,_ZThn3120_N8S2489C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C22D1Ev,_ZTv0_n32_N8S2489C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5584_N8S2489C22D1Ev,_ZThn3120_N8S2489C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C22D0Ev,_ZTv0_n28_N8S2489C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn57792_N8S2489C22D0Ev,_ZThn32244_N8S2489C22D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn66720_N8S2489C22D0Ev,_ZThn37236_N8S2489C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C22D1Ev,_ZTv0_n28_N8S2489C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn57792_N8S2489C22D1Ev,_ZThn32244_N8S2489C22D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn66720_N8S2489C22D1Ev,_ZThn37236_N8S2489C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2489C22D0Ev,_ZTv0_n44_N8S2489C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn60400_N8S2489C22D0Ev,_ZThn33700_N8S2489C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2489C22D1Ev,_ZTv0_n44_N8S2489C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn60400_N8S2489C22D1Ev,_ZThn33700_N8S2489C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C16D0Ev,_ZTv0_n28_N8S2489C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn60576_N8S2489C16D0Ev,_ZThn33852_N8S2489C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2489C16D1Ev,_ZTv0_n28_N8S2489C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn60576_N8S2489C16D1Ev,_ZThn33852_N8S2489C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C16D0Ev,_ZTv0_n32_N8S2489C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8368_N8S2489C16D0Ev,_ZThn4728_N8S2489C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2489C16D1Ev,_ZTv0_n32_N8S2489C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8368_N8S2489C16D1Ev,_ZThn4728_N8S2489C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2489C16D0Ev,_ZTv0_n40_N8S2489C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4912_N8S2489C16D0Ev,_ZThn2820_N8S2489C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2489C16D1Ev,_ZTv0_n40_N8S2489C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4912_N8S2489C16D1Ev,_ZThn2820_N8S2489C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2489C2D0Ev,_ZTv0_n20_N7S2489C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn70816_N7S2489C2D0Ev,_ZThn39472_N7S2489C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2489C2D1Ev,_ZTv0_n20_N7S2489C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn70816_N7S2489C2D1Ev,_ZThn39472_N7S2489C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2489C9D0Ev,_ZTv0_n20_N7S2489C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn70816_N7S2489C9D0Ev,_ZThn39472_N7S2489C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2489C9D1Ev,_ZTv0_n20_N7S2489C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn70816_N7S2489C9D1Ev,_ZThn39472_N7S2489C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D0Ev,_ZTv0_n20_N8S2489C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn70816_N8S2489C10D0Ev,_ZThn39472_N8S2489C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2489C10D1Ev,_ZTv0_n20_N8S2489C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn70816_N8S2489C10D1Ev,_ZThn39472_N8S2489C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S2489C1D0Ev,_ZTv0_n44_N7S2489C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn148576_N7S2489C1D0Ev,_ZThn82828_N7S2489C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S2489C1D1Ev,_ZTv0_n44_N7S2489C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn148576_N7S2489C1D1Ev,_ZThn82828_N7S2489C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2489C1D0Ev,_ZTv0_n28_N7S2489C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn154896_N7S2489C1D0Ev,_ZThn86364_N7S2489C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn145968_N7S2489C1D0Ev,_ZThn81372_N7S2489C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2489C1D1Ev,_ZTv0_n28_N7S2489C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn154896_N7S2489C1D1Ev,_ZThn86364_N7S2489C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn145968_N7S2489C1D1Ev,_ZThn81372_N7S2489C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2489C1D0Ev,_ZTv0_n32_N7S2489C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn93760_N7S2489C1D0Ev,_ZThn52248_N7S2489C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2489C1D1Ev,_ZTv0_n32_N7S2489C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn93760_N7S2489C1D1Ev,_ZThn52248_N7S2489C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S2489C1D0Ev,_ZTv0_n40_N7S2489C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn90304_N7S2489C1D0Ev,_ZThn50340_N7S2489C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S2489C1D1Ev,_ZTv0_n40_N7S2489C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn90304_N7S2489C1D1Ev,_ZThn50340_N7S2489C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S2489C1D0Ev,_ZTv0_n52_N7S2489C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn85296_N7S2489C1D0Ev,_ZThn47476_N7S2489C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S2489C1D1Ev,_ZTv0_n52_N7S2489C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn85296_N7S2489C1D1Ev,_ZThn47476_N7S2489C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2489C1D0Ev,_ZTv0_n20_N7S2489C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn70816_N7S2489C1D0Ev,_ZThn39472_N7S2489C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2489C1D1Ev,_ZTv0_n20_N7S2489C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn70816_N7S2489C1D1Ev,_ZThn39472_N7S2489C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2489C1 = {  "S2489C1", // class name
  bases_S2489C1, 51,
  &(vtc_S2489C1[0]), // expected_vtbl_contents
  &(vtt_S2489C1[0]), // expected_vtt_contents
  ABISELECT(155184,86556), // object size
  NSPAIRA(_ZTI7S2489C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2489C1),254, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2489C1),188, //virtual table table var
  35, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2488C6  : virtual S2489C3 {
  void *s2488c6f0;
  void *s2488c6f1;
  int s2488c6f2;
  int s2488c6f3;
  ::S2489C7 s2488c6f4;
  __tsi64  :0;
  long double s2488c6f6;
  ::S2489C7 s2488c6f7;
  void *s2488c6f8;
  __tsi64 s2488c6f9:3;
  ::S2489C3 s2488c6f10;
  long s2488c6f11;
  ::S2489C7 s2488c6f12;
  virtual void  v1(); // _ZN7S2488C62v1Ev
  virtual void  v2(); // _ZN7S2488C62v2Ev
  ~S2488C6(); // tgen
  S2488C6(); // tgen
};
//SIG(-1 S2488C6) C1{ VBC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} v1 v2 Fp Fp Fi Fi FU4{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU4 Fp FL:3 FC2 Fl FU4}


void  S2488C6 ::v1(){vfunc_called(this, "_ZN7S2488C62v1Ev");}
void  S2488C6 ::v2(){vfunc_called(this, "_ZN7S2488C62v2Ev");}
S2488C6 ::~S2488C6(){ note_dtor("S2488C6", this);} // tgen
S2488C6 ::S2488C6(){ note_ctor("S2488C6", this);} // tgen

static void Test_S2488C6()
{
  extern Class_Descriptor cd_S2488C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,69)];
    init_test(&cd_S2488C6, buf);
    S2488C6 *dp, &lv = *(dp=new (buf) S2488C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,272), "sizeof(S2488C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2488C6)");
    check_base_class_offset(lv, (S2489C3*), ABISELECT(384,200), "S2488C6");
    check_field_offset(lv, s2488c6f0, ABISELECT(8,4), "S2488C6.s2488c6f0");
    check_field_offset(lv, s2488c6f1, ABISELECT(16,8), "S2488C6.s2488c6f1");
    check_field_offset(lv, s2488c6f2, ABISELECT(24,12), "S2488C6.s2488c6f2");
    check_field_offset(lv, s2488c6f3, ABISELECT(28,16), "S2488C6.s2488c6f3");
    check_field_offset(lv, s2488c6f4, ABISELECT(32,20), "S2488C6.s2488c6f4");
    check_field_offset(lv, s2488c6f6, ABISELECT(96,48), "S2488C6.s2488c6f6");
    check_field_offset(lv, s2488c6f7, ABISELECT(112,60), "S2488C6.s2488c6f7");
    check_field_offset(lv, s2488c6f8, ABISELECT(168,88), "S2488C6.s2488c6f8");
    set_bf_and_test(lv, s2488c6f9, ABISELECT(176,92), 0, 3, 1, "S2488C6");
    set_bf_and_test(lv, s2488c6f9, ABISELECT(176,92), 0, 3, hide_sll(1LL<<2), "S2488C6");
    check_field_offset(lv, s2488c6f10, ABISELECT(192,96), "S2488C6.s2488c6f10");
    check_field_offset(lv, s2488c6f11, ABISELECT(320,168), "S2488C6.s2488c6f11");
    check_field_offset(lv, s2488c6f12, ABISELECT(328,172), "S2488C6.s2488c6f12");
    test_class_info(&lv, &cd_S2488C6);
    dp->~S2488C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2488C6(Test_S2488C6, "S2488C6", ABISELECT(512,272));

#else // __cplusplus

extern void _ZN7S2488C6C1Ev();
extern void _ZN7S2488C6D1Ev();
Name_Map name_map_S2488C6[] = {
  NSPAIR(_ZN7S2488C6C1Ev),
  NSPAIR(_ZN7S2488C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
static Base_Class bases_S2488C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(384,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2488C6[];
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY vtc_S2488C6[] = {
  ABISELECT(384,200),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S2488C6[];
static  VTT_ENTRY vtt_S2488C6[] = {
  {&(_ZTV7S2488C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
Class_Descriptor cd_S2488C6 = {  "S2488C6", // class name
  bases_S2488C6, 1,
  &(vtc_S2488C6[0]), // expected_vtbl_contents
  &(vtt_S2488C6[0]), // expected_vtt_contents
  ABISELECT(512,272), // object size
  NSPAIRA(_ZTI7S2488C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S2488C6),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2488C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2488C5  : S2489C3 , S2488C6 {
  void *s2488c5f0;
  long double s2488c5f1;
  ::S2489C3 s2488c5f2[7];
  long double s2488c5f3;
  ::S2489C4 s2488c5f4;
  short s2488c5f5;
  long s2488c5f6;
  long s2488c5f7;
  virtual void  v3(); // _ZN7S2488C52v3Ev
  ~S2488C5(); // tgen
  S2488C5(); // tgen
};
//SIG(-1 S2488C5) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 Fl FU5} v1 Fp FD FC2[7] FD FU3 Fs Fl Fl}


void  S2488C5 ::v3(){vfunc_called(this, "_ZN7S2488C52v3Ev");}
S2488C5 ::~S2488C5(){ note_dtor("S2488C5", this);} // tgen
S2488C5 ::S2488C5(){ note_ctor("S2488C5", this);} // tgen

static void Test_S2488C5()
{
  extern Class_Descriptor cd_S2488C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(107,233)];
    init_test(&cd_S2488C5, buf);
    S2488C5 *dp, &lv = *(dp=new (buf) S2488C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1696,928), "sizeof(S2488C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2488C5)");
    /*is_ambiguous_... S2488C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(384,200), "S2488C5");
    check_base_class_offset(lv, (S2489C3*)(S2488C6*), ABISELECT(1568,856), "S2488C5");
    check_base_class_offset(lv, (S2488C6*), 0, "S2488C5");
    check_field_offset(lv, s2488c5f0, ABISELECT(512,272), "S2488C5.s2488c5f0");
    check_field_offset(lv, s2488c5f1, ABISELECT(528,276), "S2488C5.s2488c5f1");
    check_field_offset(lv, s2488c5f2, ABISELECT(544,288), "S2488C5.s2488c5f2");
    check_field_offset(lv, s2488c5f3, ABISELECT(1440,792), "S2488C5.s2488c5f3");
    check_field_offset(lv, s2488c5f4, ABISELECT(1456,804), "S2488C5.s2488c5f4");
    check_field_offset(lv, s2488c5f5, ABISELECT(1536,844), "S2488C5.s2488c5f5");
    check_field_offset(lv, s2488c5f6, ABISELECT(1544,848), "S2488C5.s2488c5f6");
    check_field_offset(lv, s2488c5f7, ABISELECT(1552,852), "S2488C5.s2488c5f7");
    test_class_info(&lv, &cd_S2488C5);
    dp->~S2488C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2488C5(Test_S2488C5, "S2488C5", ABISELECT(1696,928));

#else // __cplusplus

extern void _ZN7S2488C5C1Ev();
extern void _ZN7S2488C5D1Ev();
Name_Map name_map_S2488C5[] = {
  NSPAIR(_ZN7S2488C5C1Ev),
  NSPAIR(_ZN7S2488C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
static Base_Class bases_S2488C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(384,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(1568,856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2488C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2488C5[];
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY vtc_S2488C5[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C5[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern VTBL_ENTRY _ZTV7S2488C5[];
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C5[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
static  VTT_ENTRY vtt_S2488C5[] = {
  {&(_ZTV7S2488C5[3]),  3,6},
  {&(_tg__ZTV7S2488C6__7S2488C5[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S2488C5[];
extern  VTBL_ENTRY _ZTV7S2488C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C5[];
Class_Descriptor cd_S2488C5 = {  "S2488C5", // class name
  bases_S2488C5, 3,
  &(vtc_S2488C5[0]), // expected_vtbl_contents
  &(vtt_S2488C5[0]), // expected_vtt_contents
  ABISELECT(1696,928), // object size
  NSPAIRA(_ZTI7S2488C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2488C5),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2488C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2488C8  : virtual S2489C3 , virtual S2488C6 {
  __tsi64 s2488c8f0;
  __tsi64 s2488c8f1;
  __tsi64 s2488c8f2;
  long s2488c8f3;
  int s2488c8f4;
  ::S2489C7 s2488c8f5;
  char s2488c8f6[10];
  int s2488c8f7;
  virtual  ~S2488C8(); // _ZN7S2488C8D2Ev
  virtual void  v4(); // _ZN7S2488C82v4Ev
  S2488C8(); // tgen
};
//SIG(-1 S2488C8) C1{ VBC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 Fl FU5} vd v1 FL FL FL Fl Fi FU5 Fc[10] Fi}


 S2488C8 ::~S2488C8(){ note_dtor("S2488C8", this);}
void  S2488C8 ::v4(){vfunc_called(this, "_ZN7S2488C82v4Ev");}
S2488C8 ::S2488C8(){ note_ctor("S2488C8", this);} // tgen

static void Test_S2488C8()
{
  extern Class_Descriptor cd_S2488C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,89)];
    init_test(&cd_S2488C8, buf);
    S2488C8 *dp, &lv = *(dp=new (buf) S2488C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,352), "sizeof(S2488C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2488C8)");
    check_base_class_offset(lv, (S2489C3*), ABISELECT(128,80), "S2488C8");
    check_base_class_offset(lv, (S2489C3*)(S2488C6*), ABISELECT(128,80), "S2488C8");
    check_base_class_offset(lv, (S2488C6*), ABISELECT(256,152), "S2488C8");
    check_field_offset(lv, s2488c8f0, ABISELECT(8,4), "S2488C8.s2488c8f0");
    check_field_offset(lv, s2488c8f1, ABISELECT(16,12), "S2488C8.s2488c8f1");
    check_field_offset(lv, s2488c8f2, ABISELECT(24,20), "S2488C8.s2488c8f2");
    check_field_offset(lv, s2488c8f3, ABISELECT(32,28), "S2488C8.s2488c8f3");
    check_field_offset(lv, s2488c8f4, ABISELECT(40,32), "S2488C8.s2488c8f4");
    check_field_offset(lv, s2488c8f5, ABISELECT(48,36), "S2488C8.s2488c8f5");
    check_field_offset(lv, s2488c8f6, ABISELECT(104,64), "S2488C8.s2488c8f6");
    check_field_offset(lv, s2488c8f7, ABISELECT(116,76), "S2488C8.s2488c8f7");
    test_class_info(&lv, &cd_S2488C8);
    dp->~S2488C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2488C8(Test_S2488C8, "S2488C8", ABISELECT(640,352));

#else // __cplusplus

extern void _ZN7S2488C8C1Ev();
extern void _ZN7S2488C8D2Ev();
Name_Map name_map_S2488C8[] = {
  NSPAIR(_ZN7S2488C8C1Ev),
  NSPAIR(_ZN7S2488C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
static Base_Class bases_S2488C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2488C6,    ABISELECT(256,152), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2488C8[];
extern void _ZN7S2488C8D1Ev();
extern void _ZN7S2488C8D0Ev();
extern void _ZN7S2488C82v4Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY vtc_S2488C8[] = {
  ABISELECT(256,152),
  ABISELECT(128,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S2488C8[];
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C8[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
static  VTT_ENTRY vtt_S2488C8[] = {
  {&(_ZTV7S2488C8[4]),  4,14},
  {&(_ZTV7S2488C8[12]),  12,14},
  {&(_tg__ZTV7S2488C6__7S2488C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S2488C8[];
extern  VTBL_ENTRY _ZTV7S2488C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C8[];
Class_Descriptor cd_S2488C8 = {  "S2488C8", // class name
  bases_S2488C8, 2,
  &(vtc_S2488C8[0]), // expected_vtbl_contents
  &(vtt_S2488C8[0]), // expected_vtt_contents
  ABISELECT(640,352), // object size
  NSPAIRA(_ZTI7S2488C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2488C8),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2488C8),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S2488C11  {
  void *s2488c11f0;
  int s2488c11f1;
  void *s2488c11f2;
  char s2488c11f3;
  char s2488c11f4;
  long s2488c11f5[5];
  void *s2488c11f6;
  void *s2488c11f7;
  void *s2488c11f8;
  void  mf2488c11(); // _ZN8S2488C119mf2488c11Ev
};
//SIG(1 S2488C11) U1{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S2488C10  : S2489C3 , virtual S2488C6 , virtual S2488C8 , virtual S2488C5 {
  char s2488c10f0;
  int s2488c10f1[7];
  long s2488c10f2[5];
  long s2488c10f3;
  __tsi64 s2488c10f4;
  __tsi64 s2488c10f5;
  ::S2488C11 s2488c10f6;
  virtual  ~S2488C10(); // _ZN8S2488C10D2Ev
  virtual void  v5(); // _ZN8S2488C102v5Ev
  S2488C10(); // tgen
};
//SIG(-1 S2488C10) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 Fl FU5} VBC6{ VBC2 VBC4 vd v4 FL FL FL Fl Fi FU5 Fc[10] Fi} VBC7{ BC2 BC4 v5 Fp FD FC2[7] FD FU3 Fs Fl Fl} vd v1 Fc Fi[7] Fl[5] Fl FL FL FU8{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}}


 S2488C10 ::~S2488C10(){ note_dtor("S2488C10", this);}
void  S2488C10 ::v5(){vfunc_called(this, "_ZN8S2488C102v5Ev");}
S2488C10 ::S2488C10(){ note_ctor("S2488C10", this);} // tgen

static void Test_S2488C10()
{
  extern Class_Descriptor cd_S2488C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(157,345)];
    init_test(&cd_S2488C10, buf);
    S2488C10 *dp, &lv = *(dp=new (buf) S2488C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2496,1376), "sizeof(S2488C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2488C10)");
    /*is_ambiguous_... S2488C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(16,4), "S2488C10");
    /*is_ambiguous_... S2488C10::S2488C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*), ABISELECT(672,368), "S2488C10");
    check_base_class_offset(lv, (S2489C3*)(S2488C8*), ABISELECT(672,368), "S2488C10");
    check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C5*), ABISELECT(672,368), "S2488C10");
    /*is_ambiguous_... S2488C10::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*), ABISELECT(288,168), "S2488C10");
    check_base_class_offset(lv, (S2488C6*)(S2488C8*), ABISELECT(288,168), "S2488C10");
    check_base_class_offset(lv, (S2488C8*), ABISELECT(800,440), "S2488C10");
    /*is_ambiguous_... S2488C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C5*), ABISELECT(1312,720), "S2488C10");
    check_base_class_offset(lv, (S2488C6*)(S2488C5*), ABISELECT(928,520), "S2488C10");
    check_base_class_offset(lv, (S2488C5*), ABISELECT(928,520), "S2488C10");
    check_field_offset(lv, s2488c10f0, ABISELECT(144,76), "S2488C10.s2488c10f0");
    check_field_offset(lv, s2488c10f1, ABISELECT(148,80), "S2488C10.s2488c10f1");
    check_field_offset(lv, s2488c10f2, ABISELECT(176,108), "S2488C10.s2488c10f2");
    check_field_offset(lv, s2488c10f3, ABISELECT(216,128), "S2488C10.s2488c10f3");
    check_field_offset(lv, s2488c10f4, ABISELECT(224,132), "S2488C10.s2488c10f4");
    check_field_offset(lv, s2488c10f5, ABISELECT(232,140), "S2488C10.s2488c10f5");
    check_field_offset(lv, s2488c10f6, ABISELECT(240,148), "S2488C10.s2488c10f6");
    test_class_info(&lv, &cd_S2488C10);
    dp->~S2488C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2488C10(Test_S2488C10, "S2488C10", ABISELECT(2496,1376));

#else // __cplusplus

extern void _ZN8S2488C10C1Ev();
extern void _ZN8S2488C10D2Ev();
Name_Map name_map_S2488C10[] = {
  NSPAIR(_ZN8S2488C10C1Ev),
  NSPAIR(_ZN8S2488C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C8;
extern VTBL_ENTRY _ZTI7S2488C8[];
extern  VTBL_ENTRY _ZTV7S2488C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C5;
extern VTBL_ENTRY _ZTI7S2488C5[];
extern  VTBL_ENTRY _ZTV7S2488C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C5[];
static Base_Class bases_S2488C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(672,368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2488C6,    ABISELECT(288,168), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2488C8,    ABISELECT(800,440), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(1312,720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(928,520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2488C5,    ABISELECT(928,520), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2488C10[];
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZThn800_N8S2488C10D1Ev,_ZThn440_N8S2488C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void ABISELECT(_ZThn800_N8S2488C10D0Ev,_ZThn440_N8S2488C10D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY vtc_S2488C10[] = {
  ABISELECT(928,520),
  ABISELECT(800,440),
  ABISELECT(672,368),
  ABISELECT(288,168),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  0,
  ABISELECT(-800,-440),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-800,-440),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-928,-520),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern VTBL_ENTRY _ZTV8S2488C10[];
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C10[] = {
  ABISELECT(384,200),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C8D1Ev();
extern void _ZN7S2488C8D0Ev();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C10[] = {
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C8__8S2488C10[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(512,272),
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C10[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C5[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C67S2488C5__A1__8S2488C10[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
static  VTT_ENTRY vtt_S2488C10[] = {
  {&(_ZTV8S2488C10[6]),  6,34},
  {&(_ZTV8S2488C10[14]),  14,34},
  {&(_ZTV8S2488C10[22]),  22,34},
  {&(_ZTV8S2488C10[31]),  31,34},
  {&(_tg__ZTV7S2488C6__8S2488C10[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C10[4]),  4,7},
  {&(_tg__ZTV7S2488C6__7S2488C8__8S2488C10[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C10[3]),  3,6},
  {&(_tg__ZTV7S2488C67S2488C5__A1__8S2488C10[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S2488C10D0Ev,_ZThn440_N8S2488C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S2488C10D1Ev,_ZThn440_N8S2488C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2488C10 = {  "S2488C10", // class name
  bases_S2488C10, 7,
  &(vtc_S2488C10[0]), // expected_vtbl_contents
  &(vtt_S2488C10[0]), // expected_vtt_contents
  ABISELECT(2496,1376), // object size
  NSPAIRA(_ZTI8S2488C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S2488C10),34, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2488C10),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2488C9  : S2488C10 {
  void *s2488c9f0;
  void *s2488c9f1;
  void *s2488c9f2;
  int s2488c9f3;
  ::S2489C12_nt s2488c9f4;
  long s2488c9f5;
  long s2488c9f6;
  virtual  ~S2488C9(); // _ZN7S2488C9D2Ev
  virtual void  v6(); // _ZN7S2488C92v6Ev
  virtual void  v7(); // _ZN7S2488C92v7Ev
  S2488C9(); // tgen
};
//SIG(-1 S2488C9) C1{ BC2{ BC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC5{ VBC3 v3 v4 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 Fl FU6} VBC7{ VBC3 VBC5 vd v5 FL FL FL Fl Fi FU6 Fc[10] Fi} VBC8{ BC3 BC5 v6 Fp FD FC3[7] FD FU4 Fs Fl Fl} vd v7 Fc Fi[7] Fl[5] Fl FL FL FU9{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} vd v1 v2 Fp Fp Fp Fi FC10{} Fl Fl}


 S2488C9 ::~S2488C9(){ note_dtor("S2488C9", this);}
void  S2488C9 ::v6(){vfunc_called(this, "_ZN7S2488C92v6Ev");}
void  S2488C9 ::v7(){vfunc_called(this, "_ZN7S2488C92v7Ev");}
S2488C9 ::S2488C9(){ note_ctor("S2488C9", this);} // tgen

static void Test_S2488C9()
{
  extern Class_Descriptor cd_S2488C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(160,352)];
    init_test(&cd_S2488C9, buf);
    S2488C9 *dp, &lv = *(dp=new (buf) S2488C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2544,1404), "sizeof(S2488C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2488C9)");
    /*is_ambiguous_... S2488C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*), ABISELECT(16,4), "S2488C9");
    /*is_ambiguous_... S2488C9::S2488C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*), ABISELECT(720,396), "S2488C9");
    check_base_class_offset(lv, (S2489C3*)(S2488C8*), ABISELECT(720,396), "S2488C9");
    check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C5*), ABISELECT(720,396), "S2488C9");
    /*is_ambiguous_... S2488C10::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*), ABISELECT(336,196), "S2488C9");
    check_base_class_offset(lv, (S2488C6*)(S2488C8*), ABISELECT(336,196), "S2488C9");
    check_base_class_offset(lv, (S2488C8*)(S2488C10*), ABISELECT(848,468), "S2488C9");
    /*is_ambiguous_... S2488C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C5*), ABISELECT(1360,748), "S2488C9");
    check_base_class_offset(lv, (S2488C6*)(S2488C5*), ABISELECT(976,548), "S2488C9");
    check_base_class_offset(lv, (S2488C5*)(S2488C10*), ABISELECT(976,548), "S2488C9");
    check_base_class_offset(lv, (S2488C10*), 0, "S2488C9");
    check_field_offset(lv, s2488c9f0, ABISELECT(280,168), "S2488C9.s2488c9f0");
    check_field_offset(lv, s2488c9f1, ABISELECT(288,172), "S2488C9.s2488c9f1");
    check_field_offset(lv, s2488c9f2, ABISELECT(296,176), "S2488C9.s2488c9f2");
    check_field_offset(lv, s2488c9f3, ABISELECT(304,180), "S2488C9.s2488c9f3");
    check_field_offset(lv, s2488c9f4, ABISELECT(308,184), "S2488C9.s2488c9f4");
    check_field_offset(lv, s2488c9f5, ABISELECT(312,188), "S2488C9.s2488c9f5");
    check_field_offset(lv, s2488c9f6, ABISELECT(320,192), "S2488C9.s2488c9f6");
    test_class_info(&lv, &cd_S2488C9);
    dp->~S2488C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2488C9(Test_S2488C9, "S2488C9", ABISELECT(2544,1404));

#else // __cplusplus

extern void _ZN7S2488C9C1Ev();
extern void _ZN7S2488C9D2Ev();
Name_Map name_map_S2488C9[] = {
  NSPAIR(_ZN7S2488C9C1Ev),
  NSPAIR(_ZN7S2488C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C8;
extern VTBL_ENTRY _ZTI7S2488C8[];
extern  VTBL_ENTRY _ZTV7S2488C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C5;
extern VTBL_ENTRY _ZTI7S2488C5[];
extern  VTBL_ENTRY _ZTV7S2488C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C5[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
static Base_Class bases_S2488C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(720,396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2488C6,    ABISELECT(336,196), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2488C8,    ABISELECT(848,468), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(1360,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(976,548), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2488C5,    ABISELECT(976,548), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2488C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2488C9[];
extern void _ZN7S2488C9D1Ev();
extern void _ZN7S2488C9D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev)();
extern void ABISELECT(_ZThn848_N7S2488C9D1Ev,_ZThn468_N7S2488C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev)();
extern void ABISELECT(_ZThn848_N7S2488C9D0Ev,_ZThn468_N7S2488C9D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY vtc_S2488C9[] = {
  ABISELECT(976,548),
  ABISELECT(848,468),
  ABISELECT(720,396),
  ABISELECT(336,196),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-336,-196),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  0,
  ABISELECT(-848,-468),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-848,-468),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-976,-548),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern VTBL_ENTRY _ZTV7S2488C9[];
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C10__7S2488C9[] = {
  ABISELECT(976,548),
  ABISELECT(848,468),
  ABISELECT(720,396),
  ABISELECT(336,196),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C10__7S2488C9[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-336,-196),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZThn848_N8S2488C10D1Ev,_ZThn468_N8S2488C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void ABISELECT(_ZThn848_N8S2488C10D0Ev,_ZThn468_N8S2488C10D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C10__7S2488C9[] = {
  0,
  ABISELECT(-848,-468),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-848,-468),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C10__7S2488C9[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-976,-548),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C9[] = {
  ABISELECT(384,200),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C8D1Ev();
extern void _ZN7S2488C8D0Ev();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__7S2488C9[] = {
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C8__7S2488C9[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(512,272),
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__7S2488C9[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C5[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C67S2488C5__A1__7S2488C9[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
static  VTT_ENTRY vtt_S2488C9[] = {
  {&(_ZTV7S2488C9[6]),  6,36},
  {&(_tg__ZTV8S2488C10__7S2488C9[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C10__7S2488C9[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C10__7S2488C9[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C10__7S2488C9[6]),  6,9},
  {&(_ZTV7S2488C9[16]),  16,36},
  {&(_ZTV7S2488C9[24]),  24,36},
  {&(_ZTV7S2488C9[33]),  33,36},
  {&(_tg__ZTV7S2488C6__7S2488C9[3]),  3,5},
  {&(_tg__ZTV7S2488C8__7S2488C9[4]),  4,7},
  {&(_tg__ZTV7S2488C6__7S2488C8__7S2488C9[5]),  5,7},
  {&(_tg__ZTV7S2488C5__7S2488C9[3]),  3,6},
  {&(_tg__ZTV7S2488C67S2488C5__A1__7S2488C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S2488C9[];
extern  VTBL_ENTRY _ZTV7S2488C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C9[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S2488C10D0Ev,_ZThn468_N8S2488C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S2488C10D1Ev,_ZThn468_N8S2488C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S2488C9D0Ev,_ZThn468_N7S2488C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S2488C9D1Ev,_ZThn468_N7S2488C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2488C9 = {  "S2488C9", // class name
  bases_S2488C9, 8,
  &(vtc_S2488C9[0]), // expected_vtbl_contents
  &(vtt_S2488C9[0]), // expected_vtt_contents
  ABISELECT(2544,1404), // object size
  NSPAIRA(_ZTI7S2488C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2488C9),36, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2488C9),13, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2488C2  : S2489C3 , virtual S2488C5 , virtual S2488C8 , S2488C9 {
  long double s2488c2f0;
  virtual  ~S2488C2(); // _ZN7S2488C2D2Ev
  S2488C2(); // tgen
};
//SIG(-1 S2488C2) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ BC2 BC5{ VBC2 v1 v2 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC2 Fl FU6} v3 Fp FD FC2[7] FD FU3 Fs Fl Fl} VBC7{ VBC2 VBC5 vd v4 FL FL FL Fl Fi FU6 Fc[10] Fi} BC8{ BC9{ BC2 VBC5 VBC7 VBC4 vd v5 Fc Fi[7] Fl[5] Fl FL FL FU10{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} vd v6 v7 Fp Fp Fp Fi FC11{} Fl Fl} vd FD}


 S2488C2 ::~S2488C2(){ note_dtor("S2488C2", this);}
S2488C2 ::S2488C2(){ note_ctor("S2488C2", this);} // tgen

static void Test_S2488C2()
{
  extern Class_Descriptor cd_S2488C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(169,373)];
    init_test(&cd_S2488C2, buf);
    S2488C2 *dp, &lv = *(dp=new (buf) S2488C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2688,1488), "sizeof(S2488C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2488C2)");
    /*is_ambiguous_... S2488C2::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(336,196), "S2488C2");
    /*is_ambiguous_... S2488C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C5*), ABISELECT(864,480), "S2488C2");
    check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C5*), ABISELECT(2048,1136), "S2488C2");
    check_base_class_offset(lv, (S2489C3*)(S2488C8*), ABISELECT(2048,1136), "S2488C2");
    /*is_ambiguous_... S2488C2::S2488C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*), ABISELECT(2048,1136), "S2488C2");
    check_base_class_offset(lv, (S2488C6*)(S2488C5*), ABISELECT(480,280), "S2488C2");
    check_base_class_offset(lv, (S2488C5*), ABISELECT(480,280), "S2488C2");
    check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C9*), ABISELECT(480,280), "S2488C2");
    check_base_class_offset(lv, (S2488C6*)(S2488C8*), ABISELECT(2304,1288), "S2488C2");
    /*is_ambiguous_... S2488C10::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C9*), ABISELECT(2304,1288), "S2488C2");
    check_base_class_offset(lv, (S2488C8*), ABISELECT(2176,1208), "S2488C2");
    check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C9*), ABISELECT(2176,1208), "S2488C2");
    /*is_ambiguous_... S2488C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C9*), ABISELECT(16,4), "S2488C2");
    check_base_class_offset(lv, (S2488C10*)(S2488C9*), 0, "S2488C2");
    check_base_class_offset(lv, (S2488C9*), 0, "S2488C2");
    check_field_offset(lv, s2488c2f0, ABISELECT(464,268), "S2488C2.s2488c2f0");
    test_class_info(&lv, &cd_S2488C2);
    dp->~S2488C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2488C2(Test_S2488C2, "S2488C2", ABISELECT(2688,1488));

#else // __cplusplus

extern void _ZN7S2488C2C1Ev();
extern void _ZN7S2488C2D2Ev();
Name_Map name_map_S2488C2[] = {
  NSPAIR(_ZN7S2488C2C1Ev),
  NSPAIR(_ZN7S2488C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C5;
extern VTBL_ENTRY _ZTI7S2488C5[];
extern  VTBL_ENTRY _ZTV7S2488C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C5[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C8;
extern VTBL_ENTRY _ZTI7S2488C8[];
extern  VTBL_ENTRY _ZTV7S2488C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2488C9;
extern VTBL_ENTRY _ZTI7S2488C9[];
extern  VTBL_ENTRY _ZTV7S2488C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C9[];
static Base_Class bases_S2488C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(336,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(864,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(2048,1136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2488C6,    ABISELECT(480,280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2488C5,    ABISELECT(480,280), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2488C6,    ABISELECT(2304,1288), //bcp->offset
    29, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2488C8,    ABISELECT(2176,1208), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2488C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2488C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2488C2[];
extern void _ZN7S2488C2D1Ev();
extern void _ZN7S2488C2D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S2488C2D1Ev,_ZTv0_n20_N7S2488C2D1Ev)();
extern void ABISELECT(_ZThn2176_N7S2488C2D1Ev,_ZThn1208_N7S2488C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2488C2D0Ev,_ZTv0_n20_N7S2488C2D0Ev)();
extern void ABISELECT(_ZThn2176_N7S2488C2D0Ev,_ZThn1208_N7S2488C2D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY vtc_S2488C2[] = {
  ABISELECT(480,280),
  ABISELECT(2176,1208),
  ABISELECT(2048,1136),
  ABISELECT(2304,1288),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C2[0]),
  (VTBL_ENTRY)&_ZN7S2488C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C2D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-480,-280),
  (VTBL_ENTRY)&(_ZTI7S2488C2[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
  0,
  ABISELECT(-2176,-1208),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(-2176,-1208),
  (VTBL_ENTRY)&(_ZTI7S2488C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C2D1Ev,_ZTv0_n20_N7S2488C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C2D0Ev,_ZTv0_n20_N7S2488C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-2304,-1288),
  (VTBL_ENTRY)&(_ZTI7S2488C2[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S2488C2[];
extern void _ZN7S2488C9D1Ev();
extern void _ZN7S2488C9D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C9__7S2488C2[] = {
  ABISELECT(480,280),
  ABISELECT(2176,1208),
  ABISELECT(2048,1136),
  ABISELECT(2304,1288),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C107S2488C9__7S2488C2[] = {
  ABISELECT(480,280),
  ABISELECT(2176,1208),
  ABISELECT(2048,1136),
  ABISELECT(2304,1288),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C107S2488C9__7S2488C2[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-2304,-1288),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZThn2176_N8S2488C10D1Ev,_ZThn1208_N8S2488C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void ABISELECT(_ZThn2176_N8S2488C10D0Ev,_ZThn1208_N8S2488C10D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C107S2488C9__7S2488C2[] = {
  0,
  ABISELECT(-2176,-1208),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(-2176,-1208),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C107S2488C9__7S2488C2[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-480,-280),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C9__7S2488C2[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-2304,-1288),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev)();
extern void ABISELECT(_ZThn2176_N7S2488C9D1Ev,_ZThn1208_N7S2488C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev)();
extern void ABISELECT(_ZThn2176_N7S2488C9D0Ev,_ZThn1208_N7S2488C9D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__7S2488C9__7S2488C2[] = {
  0,
  ABISELECT(-2176,-1208),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(-2176,-1208),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__7S2488C9__7S2488C2[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-480,-280),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__7S2488C2[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C5[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C67S2488C5__7S2488C2[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C8D1Ev();
extern void _ZN7S2488C8D0Ev();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__7S2488C2[] = {
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C8__7S2488C2[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A1__7S2488C2[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
static  VTT_ENTRY vtt_S2488C2[] = {
  {&(_ZTV7S2488C2[6]),  6,36},
  {&(_tg__ZTV7S2488C9__7S2488C2[6]),  6,11},
  {&(_tg__ZTV8S2488C107S2488C9__7S2488C2[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C107S2488C9__7S2488C2[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C107S2488C9__7S2488C2[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C107S2488C9__7S2488C2[6]),  6,9},
  {&(_tg__ZTV7S2488C6__7S2488C9__7S2488C2[5]),  5,7},
  {&(_tg__ZTV7S2488C8__7S2488C9__7S2488C2[6]),  6,9},
  {&(_tg__ZTV7S2488C5__7S2488C9__7S2488C2[6]),  6,9},
  {&(_ZTV7S2488C2[17]),  17,36},
  {&(_ZTV7S2488C2[26]),  26,36},
  {&(_ZTV7S2488C2[34]),  34,36},
  {&(_tg__ZTV7S2488C5__7S2488C2[3]),  3,6},
  {&(_tg__ZTV7S2488C67S2488C5__7S2488C2[3]),  3,5},
  {&(_tg__ZTV7S2488C8__7S2488C2[4]),  4,7},
  {&(_tg__ZTV7S2488C6__7S2488C8__7S2488C2[5]),  5,7},
  {&(_tg__ZTV7S2488C6__A1__7S2488C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S2488C2[];
extern  VTBL_ENTRY _ZTV7S2488C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C2[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N7S2488C9D0Ev,_ZThn1208_N7S2488C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N7S2488C9D1Ev,_ZThn1208_N7S2488C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N8S2488C10D0Ev,_ZThn1208_N8S2488C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N8S2488C10D1Ev,_ZThn1208_N8S2488C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2488C2D0Ev,_ZTv0_n20_N7S2488C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N7S2488C2D0Ev,_ZThn1208_N7S2488C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2488C2D1Ev,_ZTv0_n20_N7S2488C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N7S2488C2D1Ev,_ZThn1208_N7S2488C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2488C2 = {  "S2488C2", // class name
  bases_S2488C2, 10,
  &(vtc_S2488C2[0]), // expected_vtbl_contents
  &(vtt_S2488C2[0]), // expected_vtt_contents
  ABISELECT(2688,1488), // object size
  NSPAIRA(_ZTI7S2488C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2488C2),36, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2488C2),17, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2488C14  : virtual S2488C5 , virtual S2488C8 {
  int s2488c14f0;
  void *s2488c14f1;
  int s2488c14f2;
  ::S2489C7 s2488c14f3;
  ~S2488C14(); // tgen
  S2488C14(); // tgen
};
//SIG(-1 S2488C14) C1{ VBC2{ BC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC5{ VBC3 v1 v2 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 Fl FU6} v3 Fp FD FC3[7] FD FU4 Fs Fl Fl} VBC7{ VBC3 VBC5 vd v4 FL FL FL Fl Fi FU6 Fc[10] Fi} Fi Fp Fi FU6}


S2488C14 ::~S2488C14(){ note_dtor("S2488C14", this);} // tgen
S2488C14 ::S2488C14(){ note_ctor("S2488C14", this);} // tgen

static void Test_S2488C14()
{
  extern Class_Descriptor cd_S2488C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(145,314)];
    init_test(&cd_S2488C14, buf);
    S2488C14 *dp, &lv = *(dp=new (buf) S2488C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2304,1252), "sizeof(S2488C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2488C14)");
    /*is_ambiguous_... S2488C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C5*), ABISELECT(480,244), "S2488C14");
    check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C5*), ABISELECT(1664,900), "S2488C14");
    check_base_class_offset(lv, (S2489C3*)(S2488C8*), ABISELECT(1664,900), "S2488C14");
    /*is_ambiguous_... S2488C14::S2488C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*), ABISELECT(1664,900), "S2488C14");
    check_base_class_offset(lv, (S2488C6*)(S2488C5*), ABISELECT(96,44), "S2488C14");
    check_base_class_offset(lv, (S2488C5*), ABISELECT(96,44), "S2488C14");
    check_base_class_offset(lv, (S2488C6*)(S2488C8*), ABISELECT(1920,1052), "S2488C14");
    check_base_class_offset(lv, (S2488C8*), ABISELECT(1792,972), "S2488C14");
    check_field_offset(lv, s2488c14f0, ABISELECT(8,4), "S2488C14.s2488c14f0");
    check_field_offset(lv, s2488c14f1, ABISELECT(16,8), "S2488C14.s2488c14f1");
    check_field_offset(lv, s2488c14f2, ABISELECT(24,12), "S2488C14.s2488c14f2");
    check_field_offset(lv, s2488c14f3, ABISELECT(32,16), "S2488C14.s2488c14f3");
    test_class_info(&lv, &cd_S2488C14);
    dp->~S2488C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2488C14(Test_S2488C14, "S2488C14", ABISELECT(2304,1252));

#else // __cplusplus

extern void _ZN8S2488C14C1Ev();
extern void _ZN8S2488C14D1Ev();
Name_Map name_map_S2488C14[] = {
  NSPAIR(_ZN8S2488C14C1Ev),
  NSPAIR(_ZN8S2488C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C5;
extern VTBL_ENTRY _ZTI7S2488C5[];
extern  VTBL_ENTRY _ZTV7S2488C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C5[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C8;
extern VTBL_ENTRY _ZTI7S2488C8[];
extern  VTBL_ENTRY _ZTV7S2488C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C8[];
static Base_Class bases_S2488C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(480,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(1664,900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2488C6,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2488C5,    ABISELECT(96,44), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2488C6,    ABISELECT(1920,1052), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2488C8,    ABISELECT(1792,972), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2488C14[];
extern void _ZN8S2488C14D1Ev();
extern void _ZN8S2488C14D0Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S2488C14D1Ev,_ZTv0_n20_N8S2488C14D1Ev)();
extern void ABISELECT(_ZThn1792_N8S2488C14D1Ev,_ZThn972_N8S2488C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C14D0Ev,_ZTv0_n20_N8S2488C14D0Ev)();
extern void ABISELECT(_ZThn1792_N8S2488C14D0Ev,_ZThn972_N8S2488C14D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY vtc_S2488C14[] = {
  ABISELECT(1920,1052),
  ABISELECT(1792,972),
  ABISELECT(1664,900),
  ABISELECT(96,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C14[0]),
  (VTBL_ENTRY)&_ZN8S2488C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C14D0Ev,
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2488C14[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
  0,
  ABISELECT(-1792,-972),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(-1792,-972),
  (VTBL_ENTRY)&(_ZTI8S2488C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C14D1Ev,_ZTv0_n20_N8S2488C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C14D0Ev,_ZTv0_n20_N8S2488C14D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-1920,-1052),
  (VTBL_ENTRY)&(_ZTI8S2488C14[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S2488C14[];
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C14[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C5[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C67S2488C5__8S2488C14[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C8D1Ev();
extern void _ZN7S2488C8D0Ev();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C14[] = {
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C8__8S2488C14[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A1__8S2488C14[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
static  VTT_ENTRY vtt_S2488C14[] = {
  {&(_ZTV8S2488C14[6]),  6,33},
  {&(_ZTV8S2488C14[14]),  14,33},
  {&(_ZTV8S2488C14[23]),  23,33},
  {&(_ZTV8S2488C14[31]),  31,33},
  {&(_tg__ZTV7S2488C5__8S2488C14[3]),  3,6},
  {&(_tg__ZTV7S2488C67S2488C5__8S2488C14[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C14[4]),  4,7},
  {&(_tg__ZTV7S2488C6__7S2488C8__8S2488C14[5]),  5,7},
  {&(_tg__ZTV7S2488C6__A1__8S2488C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2488C14[];
extern  VTBL_ENTRY _ZTV8S2488C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C14[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C14D0Ev,_ZTv0_n20_N8S2488C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1792_N8S2488C14D0Ev,_ZThn972_N8S2488C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C14D1Ev,_ZTv0_n20_N8S2488C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1792_N8S2488C14D1Ev,_ZThn972_N8S2488C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2488C14 = {  "S2488C14", // class name
  bases_S2488C14, 6,
  &(vtc_S2488C14[0]), // expected_vtbl_contents
  &(vtt_S2488C14[0]), // expected_vtt_contents
  ABISELECT(2304,1252), // object size
  NSPAIRA(_ZTI8S2488C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S2488C14),33, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2488C14),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2488C13  {
  long double s2488c13f0;
  ::S2488C14 s2488c13f1[6];
  char s2488c13f2;
  void *s2488c13f3;
  void *s2488c13f4;
  int s2488c13f5[6];
  int s2488c13f6;
  void *s2488c13f7;
  long s2488c13f8;
  void *s2488c13f9;
  int s2488c13f10;
  void *s2488c13f11;
  void *s2488c13f12;
  virtual void  v11(); // _ZN8S2488C133v11Ev
  ~S2488C13(); // tgen
  S2488C13(); // tgen
};
//SIG(-1 S2488C13) C1{ v1 FD FC2{ VBC3{ BC4{ m Fc Fi FL FU5{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC6{ VBC4 v2 v3 Fp Fp Fi Fi FU7{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU7 Fp FL:3 FC4 Fl FU7} v4 Fp FD FC4[7] FD FU5 Fs Fl Fl} VBC8{ VBC4 VBC6 vd v5 FL FL FL Fl Fi FU7 Fc[10] Fi} Fi Fp Fi FU7}[6] Fc Fp Fp Fi[6] Fi Fp Fl Fp Fi Fp Fp}


void  S2488C13 ::v11(){vfunc_called(this, "_ZN8S2488C133v11Ev");}
S2488C13 ::~S2488C13(){ note_dtor("S2488C13", this);} // tgen
S2488C13 ::S2488C13(){ note_ctor("S2488C13", this);} // tgen

static void Test_S2488C13()
{
  extern Class_Descriptor cd_S2488C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(874,1899)];
    init_test(&cd_S2488C13, buf);
    S2488C13 *dp, &lv = *(dp=new (buf) S2488C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13968,7592), "sizeof(S2488C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2488C13)");
    check_field_offset(lv, s2488c13f0, ABISELECT(16,4), "S2488C13.s2488c13f0");
    check_field_offset(lv, s2488c13f1, ABISELECT(32,16), "S2488C13.s2488c13f1");
    check_field_offset(lv, s2488c13f2, ABISELECT(13856,7528), "S2488C13.s2488c13f2");
    check_field_offset(lv, s2488c13f3, ABISELECT(13864,7532), "S2488C13.s2488c13f3");
    check_field_offset(lv, s2488c13f4, ABISELECT(13872,7536), "S2488C13.s2488c13f4");
    check_field_offset(lv, s2488c13f5, ABISELECT(13880,7540), "S2488C13.s2488c13f5");
    check_field_offset(lv, s2488c13f6, ABISELECT(13904,7564), "S2488C13.s2488c13f6");
    check_field_offset(lv, s2488c13f7, ABISELECT(13912,7568), "S2488C13.s2488c13f7");
    check_field_offset(lv, s2488c13f8, ABISELECT(13920,7572), "S2488C13.s2488c13f8");
    check_field_offset(lv, s2488c13f9, ABISELECT(13928,7576), "S2488C13.s2488c13f9");
    check_field_offset(lv, s2488c13f10, ABISELECT(13936,7580), "S2488C13.s2488c13f10");
    check_field_offset(lv, s2488c13f11, ABISELECT(13944,7584), "S2488C13.s2488c13f11");
    check_field_offset(lv, s2488c13f12, ABISELECT(13952,7588), "S2488C13.s2488c13f12");
    test_class_info(&lv, &cd_S2488C13);
    dp->~S2488C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2488C13(Test_S2488C13, "S2488C13", ABISELECT(13968,7592));

#else // __cplusplus

extern void _ZN8S2488C13C1Ev();
extern void _ZN8S2488C13D1Ev();
Name_Map name_map_S2488C13[] = {
  NSPAIR(_ZN8S2488C13C1Ev),
  NSPAIR(_ZN8S2488C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2488C13[];
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY vtc_S2488C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C13[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern VTBL_ENTRY _ZTI8S2488C13[];
extern  VTBL_ENTRY _ZTV8S2488C13[];
Class_Descriptor cd_S2488C13 = {  "S2488C13", // class name
  0,0,//no base classes
  &(vtc_S2488C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13968,7592), // object size
  NSPAIRA(_ZTI8S2488C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2488C13),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2488C19  : virtual S2488C8 , S2488C10 , S2489C3 , S2488C6 {
  ::S2489C7 s2488c19f0;
  int s2488c19f1;
  long s2488c19f2;
  char s2488c19f3;
  void *s2488c19f4;
  ::S2488C5 s2488c19f5;
  short s2488c19f6;
  virtual  ~S2488C19(); // _ZN8S2488C19D2Ev
  virtual void  v8(); // _ZN8S2488C192v8Ev
  virtual void  v9(); // _ZN8S2488C192v9Ev
  virtual void  v10(); // _ZN8S2488C193v10Ev
  S2488C19(); // tgen
};
//SIG(-1 S2488C19) C1{ VBC2{ VBC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC5{ VBC3 v4 v5 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 Fl FU6} vd v6 FL FL FL Fl Fi FU6 Fc[10] Fi} BC7{ BC3 VBC5 VBC2 VBC8{ BC3 BC5 v7 Fp FD FC3[7] FD FU4 Fs Fl Fl} vd v8 Fc Fi[7] Fl[5] Fl FL FL FU9{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} BC3 BC5 vd v1 v2 v3 FU6 Fi Fl Fc Fp FC8 Fs}


 S2488C19 ::~S2488C19(){ note_dtor("S2488C19", this);}
void  S2488C19 ::v8(){vfunc_called(this, "_ZN8S2488C192v8Ev");}
void  S2488C19 ::v9(){vfunc_called(this, "_ZN8S2488C192v9Ev");}
void  S2488C19 ::v10(){vfunc_called(this, "_ZN8S2488C193v10Ev");}
S2488C19 ::S2488C19(){ note_ctor("S2488C19", this);} // tgen

static void Test_S2488C19()
{
  extern Class_Descriptor cd_S2488C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(301,657)];
    init_test(&cd_S2488C19, buf);
    S2488C19 *dp, &lv = *(dp=new (buf) S2488C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4800,2624), "sizeof(S2488C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2488C19)");
    check_base_class_offset(lv, (S2489C3*)(S2488C8*), ABISELECT(2720,1496), "S2488C19");
    /*is_ambiguous_... S2488C19::S2488C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*), ABISELECT(2720,1496), "S2488C19");
    check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C5*), ABISELECT(2720,1496), "S2488C19");
    /*is_ambiguous_... S2488C19::S2488C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*), ABISELECT(2720,1496), "S2488C19");
    check_base_class_offset(lv, (S2488C6*)(S2488C8*), ABISELECT(2848,1568), "S2488C19");
    /*is_ambiguous_... S2488C10::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*), ABISELECT(2848,1568), "S2488C19");
    check_base_class_offset(lv, (S2488C8*), ABISELECT(2600,1416), "S2488C19");
    check_base_class_offset(lv, (S2488C8*)(S2488C10*), ABISELECT(2600,1416), "S2488C19");
    /*is_ambiguous_... S2488C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*), ABISELECT(16,4), "S2488C19");
    /*is_ambiguous_... S2488C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C5*), ABISELECT(3616,1968), "S2488C19");
    check_base_class_offset(lv, (S2488C6*)(S2488C5*), ABISELECT(3232,1768), "S2488C19");
    check_base_class_offset(lv, (S2488C5*)(S2488C10*), ABISELECT(3232,1768), "S2488C19");
    check_base_class_offset(lv, (S2488C10*), 0, "S2488C19");
    /*is_ambiguous_... S2488C19::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(288,168), "S2488C19");
    /*is_ambiguous_... S2488C19::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*), ABISELECT(416,240), "S2488C19");
    check_field_offset(lv, s2488c19f0, ABISELECT(800,440), "S2488C19.s2488c19f0");
    check_field_offset(lv, s2488c19f1, ABISELECT(856,468), "S2488C19.s2488c19f1");
    check_field_offset(lv, s2488c19f2, ABISELECT(864,472), "S2488C19.s2488c19f2");
    check_field_offset(lv, s2488c19f3, ABISELECT(872,476), "S2488C19.s2488c19f3");
    check_field_offset(lv, s2488c19f4, ABISELECT(880,480), "S2488C19.s2488c19f4");
    check_field_offset(lv, s2488c19f5, ABISELECT(896,484), "S2488C19.s2488c19f5");
    check_field_offset(lv, s2488c19f6, ABISELECT(2592,1412), "S2488C19.s2488c19f6");
    test_class_info(&lv, &cd_S2488C19);
    dp->~S2488C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2488C19(Test_S2488C19, "S2488C19", ABISELECT(4800,2624));

#else // __cplusplus

extern void _ZN8S2488C19C1Ev();
extern void _ZN8S2488C19D2Ev();
Name_Map name_map_S2488C19[] = {
  NSPAIR(_ZN8S2488C19C1Ev),
  NSPAIR(_ZN8S2488C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C8;
extern VTBL_ENTRY _ZTI7S2488C8[];
extern  VTBL_ENTRY _ZTV7S2488C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C5;
extern VTBL_ENTRY _ZTI7S2488C5[];
extern  VTBL_ENTRY _ZTV7S2488C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C5[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
static Base_Class bases_S2488C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(2720,1496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S2488C6,    ABISELECT(2848,1568), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2488C8,    ABISELECT(2600,1416), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(3616,1968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(3232,1768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2488C5,    ABISELECT(3232,1768), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2488C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(288,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2488C6,    ABISELECT(416,240), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2488C19[];
extern void _ZN8S2488C19D1Ev();
extern void _ZN8S2488C19D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev)();
extern void ABISELECT(_ZThn2600_N8S2488C19D1Ev,_ZThn1416_N8S2488C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev)();
extern void ABISELECT(_ZThn2600_N8S2488C19D0Ev,_ZThn1416_N8S2488C19D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY vtc_S2488C19[] = {
  ABISELECT(3232,1768),
  ABISELECT(2600,1416),
  ABISELECT(2720,1496),
  ABISELECT(2848,1568),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN8S2488C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
  ABISELECT(2304,1256),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  0,
  ABISELECT(-2600,-1416),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-2600,-1416),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2848,-1568),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-3232,-1768),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern VTBL_ENTRY _ZTV8S2488C19[];
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C10__8S2488C19[] = {
  ABISELECT(3232,1768),
  ABISELECT(2600,1416),
  ABISELECT(2720,1496),
  ABISELECT(2848,1568),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C10__8S2488C19[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2848,-1568),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZThn2600_N8S2488C10D1Ev,_ZThn1416_N8S2488C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void ABISELECT(_ZThn2600_N8S2488C10D0Ev,_ZThn1416_N8S2488C10D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C10__8S2488C19[] = {
  0,
  ABISELECT(-2600,-1416),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-2600,-1416),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C10__8S2488C19[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-3232,-1768),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A__8S2488C19[] = {
  ABISELECT(2304,1256),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C8D1Ev();
extern void _ZN7S2488C8D0Ev();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C19[] = {
  ABISELECT(248,152),
  ABISELECT(120,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C8__8S2488C19[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-248,-152),
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C19[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C19[] = {
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C5[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C67S2488C5__A1__8S2488C19[] = {
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
static  VTT_ENTRY vtt_S2488C19[] = {
  {&(_ZTV8S2488C19[6]),  6,42},
  {&(_tg__ZTV8S2488C10__8S2488C19[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C10__8S2488C19[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C10__8S2488C19[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C10__8S2488C19[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A__8S2488C19[3]),  3,5},
  {&(_ZTV8S2488C19[23]),  23,42},
  {&(_ZTV8S2488C19[31]),  31,42},
  {&(_ZTV8S2488C19[39]),  39,42},
  {&(_ZTV8S2488C19[15]),  15,42},
  {&(_tg__ZTV7S2488C8__8S2488C19[4]),  4,7},
  {&(_tg__ZTV7S2488C6__7S2488C8__8S2488C19[5]),  5,7},
  {&(_tg__ZTV7S2488C6__8S2488C19[3]),  3,5},
  {&(_tg__ZTV7S2488C5__8S2488C19[3]),  3,6},
  {&(_tg__ZTV7S2488C67S2488C5__A1__8S2488C19[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2488C19[];
extern  VTBL_ENTRY _ZTV8S2488C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C19[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N8S2488C10D0Ev,_ZThn1416_N8S2488C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N8S2488C10D1Ev,_ZThn1416_N8S2488C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N8S2488C19D0Ev,_ZThn1416_N8S2488C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N8S2488C19D1Ev,_ZThn1416_N8S2488C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2488C19 = {  "S2488C19", // class name
  bases_S2488C19, 10,
  &(vtc_S2488C19[0]), // expected_vtbl_contents
  &(vtt_S2488C19[0]), // expected_vtt_contents
  ABISELECT(4800,2624), // object size
  NSPAIRA(_ZTI8S2488C19),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S2488C19),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2488C19),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2488C21  : S2489C3 , virtual S2488C6 , virtual S2488C8 , virtual S2488C5 , virtual S2488C19 {
  __tsi64 s2488c21f0;
  int s2488c21f1;
  void *s2488c21f2;
  void *s2488c21f3;
  long s2488c21f4;
  virtual  ~S2488C21(); // _ZN8S2488C21D2Ev
  S2488C21(); // tgen
};
//SIG(-1 S2488C21) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ VBC2 v1 v2 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 Fl FU5} VBC6{ VBC2 VBC4 vd v3 FL FL FL Fl Fi FU5 Fc[10] Fi} VBC7{ BC2 BC4 v4 Fp FD FC2[7] FD FU3 Fs Fl Fl} VBC8{ VBC6 BC9{ BC2 VBC4 VBC6 VBC7 vd v5 Fc Fi[7] Fl[5] Fl FL FL FU10{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} BC2 BC4 vd v6 v7 v8 FU5 Fi Fl Fc Fp FC7 Fs} vd FL Fi Fp Fp Fl}


 S2488C21 ::~S2488C21(){ note_dtor("S2488C21", this);}
S2488C21 ::S2488C21(){ note_ctor("S2488C21", this);} // tgen

static void Test_S2488C21()
{
  extern Class_Descriptor cd_S2488C21;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(314,682)];
    init_test(&cd_S2488C21, buf);
    S2488C21 *dp, &lv = *(dp=new (buf) S2488C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5008,2724), "sizeof(S2488C21)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2488C21)");
    /*is_ambiguous_... S2488C21::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(16,4), "S2488C21");
    /*is_ambiguous_... S2488C21::S2488C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*), ABISELECT(576,300), "S2488C21");
    check_base_class_offset(lv, (S2489C3*)(S2488C8*), ABISELECT(576,300), "S2488C21");
    check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C5*), ABISELECT(576,300), "S2488C21");
    /*is_ambiguous_... S2488C19::S2488C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C19*), ABISELECT(576,300), "S2488C21");
    /*is_ambiguous_... S2488C21::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*), ABISELECT(192,100), "S2488C21");
    check_base_class_offset(lv, (S2488C6*)(S2488C8*), ABISELECT(192,100), "S2488C21");
    /*is_ambiguous_... S2488C10::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C19*), ABISELECT(192,100), "S2488C21");
    check_base_class_offset(lv, (S2488C8*), ABISELECT(704,372), "S2488C21");
    check_base_class_offset(lv, (S2488C8*)(S2488C19*), ABISELECT(704,372), "S2488C21");
    check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C19*), ABISELECT(704,372), "S2488C21");
    /*is_ambiguous_... S2488C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C5*), ABISELECT(1216,652), "S2488C21");
    check_base_class_offset(lv, (S2488C6*)(S2488C5*), ABISELECT(832,452), "S2488C21");
    check_base_class_offset(lv, (S2488C5*), ABISELECT(832,452), "S2488C21");
    check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C19*), ABISELECT(832,452), "S2488C21");
    /*is_ambiguous_... S2488C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C19*), ABISELECT(2416,1312), "S2488C21");
    check_base_class_offset(lv, (S2488C10*)(S2488C19*), ABISELECT(2400,1308), "S2488C21");
    /*is_ambiguous_... S2488C19::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C19*), ABISELECT(2688,1476), "S2488C21");
    /*is_ambiguous_... S2488C19::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C19*), ABISELECT(2816,1548), "S2488C21");
    check_base_class_offset(lv, (S2488C19*), ABISELECT(2400,1308), "S2488C21");
    check_field_offset(lv, s2488c21f0, ABISELECT(144,76), "S2488C21.s2488c21f0");
    check_field_offset(lv, s2488c21f1, ABISELECT(152,84), "S2488C21.s2488c21f1");
    check_field_offset(lv, s2488c21f2, ABISELECT(160,88), "S2488C21.s2488c21f2");
    check_field_offset(lv, s2488c21f3, ABISELECT(168,92), "S2488C21.s2488c21f3");
    check_field_offset(lv, s2488c21f4, ABISELECT(176,96), "S2488C21.s2488c21f4");
    test_class_info(&lv, &cd_S2488C21);
    dp->~S2488C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2488C21(Test_S2488C21, "S2488C21", ABISELECT(5008,2724));

#else // __cplusplus

extern void _ZN8S2488C21C1Ev();
extern void _ZN8S2488C21D2Ev();
Name_Map name_map_S2488C21[] = {
  NSPAIR(_ZN8S2488C21C1Ev),
  NSPAIR(_ZN8S2488C21D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C8;
extern VTBL_ENTRY _ZTI7S2488C8[];
extern  VTBL_ENTRY _ZTV7S2488C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C5;
extern VTBL_ENTRY _ZTI7S2488C5[];
extern  VTBL_ENTRY _ZTV7S2488C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C5[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C19;
extern VTBL_ENTRY _ZTI8S2488C19[];
extern  VTBL_ENTRY _ZTV8S2488C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C19[];
static Base_Class bases_S2488C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(576,300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2488C6,    ABISELECT(192,100), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2488C8,    ABISELECT(704,372), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(1216,652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(832,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2488C5,    ABISELECT(832,452), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(2416,1312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(2400,1308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(2688,1476), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(2816,1548), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2488C19,    ABISELECT(2400,1308), //bcp->offset
    34, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2488C21[];
extern void _ZN8S2488C21D1Ev();
extern void _ZN8S2488C21D0Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev)();
extern void ABISELECT(_ZThn704_N8S2488C21D1Ev,_ZThn372_N8S2488C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev)();
extern void ABISELECT(_ZThn704_N8S2488C21D0Ev,_ZThn372_N8S2488C21D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
extern void ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev)();
extern void ABISELECT(_ZThn2400_N8S2488C21D1Ev,_ZThn1308_N8S2488C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev)();
extern void ABISELECT(_ZThn2400_N8S2488C21D0Ev,_ZThn1308_N8S2488C21D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY vtc_S2488C21[] = {
  ABISELECT(2400,1308),
  ABISELECT(832,452),
  ABISELECT(704,372),
  ABISELECT(576,300),
  ABISELECT(192,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN8S2488C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C21D0Ev,
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-192,-100),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  0,
  ABISELECT(-704,-372),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-704,-372),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-832,-452),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-2400,-1308),
  ABISELECT(-1568,-856),
  ABISELECT(-1696,-936),
  ABISELECT(-1824,-1008),
  ABISELECT(-2208,-1208),
  ABISELECT(-2400,-1308),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
  ABISELECT(-2240,-1248),
  ABISELECT(-2816,-1548),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S2488C21[];
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C21[] = {
  ABISELECT(384,200),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C8D1Ev();
extern void _ZN7S2488C8D0Ev();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C21[] = {
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C8__8S2488C21[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(512,272),
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C21[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C5[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C67S2488C5__A1__8S2488C21[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C19D1Ev();
extern void _ZN8S2488C19D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__8S2488C21[] = {
  ABISELECT(-1568,-856),
  ABISELECT(-1696,-936),
  ABISELECT(-1824,-1008),
  ABISELECT(-2208,-1208),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN8S2488C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C108S2488C19__8S2488C21[] = {
  ABISELECT(-1568,-856),
  ABISELECT(-1696,-936),
  ABISELECT(-1824,-1008),
  ABISELECT(-2208,-1208),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C108S2488C19__8S2488C21[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(2208,1208),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C108S2488C19__8S2488C21[] = {
  0,
  ABISELECT(1696,936),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(1696,936),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C108S2488C19__8S2488C21[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(1568,856),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A2__8S2488C21[] = {
  ABISELECT(-2240,-1248),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C19__8S2488C21[] = {
  0,
  ABISELECT(1696,936),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(1696,936),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C19__8S2488C21[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(2208,1208),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C19__8S2488C21[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(1568,856),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A__8S2488C19__8S2488C21[] = {
  ABISELECT(-2240,-1248),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
static  VTT_ENTRY vtt_S2488C21[] = {
  {&(_ZTV8S2488C21[7]),  7,58},
  {&(_ZTV8S2488C21[14]),  14,58},
  {&(_ZTV8S2488C21[22]),  22,58},
  {&(_ZTV8S2488C21[31]),  31,58},
  {&(_ZTV8S2488C21[47]),  47,58},
  {&(_ZTV8S2488C21[56]),  56,58},
  {&(_tg__ZTV7S2488C6__8S2488C21[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C21[4]),  4,7},
  {&(_tg__ZTV7S2488C6__7S2488C8__8S2488C21[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C21[3]),  3,6},
  {&(_tg__ZTV7S2488C67S2488C5__A1__8S2488C21[3]),  3,5},
  {&(_tg__ZTV8S2488C19__8S2488C21[6]),  6,12},
  {&(_tg__ZTV8S2488C108S2488C19__8S2488C21[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C108S2488C19__8S2488C21[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C108S2488C19__8S2488C21[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C108S2488C19__8S2488C21[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C19__A2__8S2488C21[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C19__8S2488C21[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C19__8S2488C21[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C19__8S2488C21[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A__8S2488C19__8S2488C21[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2488C21[];
extern  VTBL_ENTRY _ZTV8S2488C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C21[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2400_N8S2488C21D0Ev,_ZThn1308_N8S2488C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2400_N8S2488C21D1Ev,_ZThn1308_N8S2488C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S2488C21D0Ev,_ZThn372_N8S2488C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S2488C21D1Ev,_ZThn372_N8S2488C21D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2488C21 = {  "S2488C21", // class name
  bases_S2488C21, 12,
  &(vtc_S2488C21[0]), // expected_vtbl_contents
  &(vtt_S2488C21[0]), // expected_vtt_contents
  ABISELECT(5008,2724), // object size
  NSPAIRA(_ZTI8S2488C21),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S2488C21),58, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2488C21),21, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2488C20  : virtual S2488C5 , virtual S2488C6 , virtual S2488C8 , S2488C9 , virtual S2488C13 {
  char s2488c20f0;
  short s2488c20f1[3];
  ::S2488C21 s2488c20f2[10];
  ::S2488C5 s2488c20f3;
  __tsi64 s2488c20f4;
  __tsi64 s2488c20f5:5;
  int s2488c20f6;
  void *s2488c20f7[6];
  long s2488c20f8[2];
  __tsi64 s2488c20f9;
  int s2488c20f10;
  virtual  ~S2488C20(); // _ZN8S2488C20D2Ev
  S2488C20(); // tgen
};
//SIG(-1 S2488C20) C1{ VBC2{ BC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC5{ VBC3 v1 v2 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 Fl FU6} v3 Fp FD FC3[7] FD FU4 Fs Fl Fl} VBC5 VBC7{ VBC3 VBC5 vd v4 FL FL FL Fl Fi FU6 Fc[10] Fi} BC8{ BC9{ BC3 VBC5 VBC7 VBC2 vd v5 Fc Fi[7] Fl[5] Fl FL FL FU10{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} vd v6 v7 Fp Fp Fp Fi FC11{} Fl Fl} VBC12{ v8 FD FC13{ VBC2 VBC7 Fi Fp Fi FU6}[6] Fc Fp Fp Fi[6] Fi Fp Fl Fp Fi Fp Fp} vd Fc Fs[3] FC14{ BC3 VBC5 VBC7 VBC2 VBC15{ VBC7 BC9 BC3 BC5 vd v9 v10 v11 FU6 Fi Fl Fc Fp FC2 Fs} vd FL Fi Fp Fp Fl}[10] FC2 FL FL:5 Fi Fp[6] Fl[2] FL Fi}


 S2488C20 ::~S2488C20(){ note_dtor("S2488C20", this);}
S2488C20 ::S2488C20(){ note_ctor("S2488C20", this);} // tgen

static void Test_S2488C20()
{
  extern Class_Descriptor cd_S2488C20;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4275,9309)];
    init_test(&cd_S2488C20, buf);
    S2488C20 *dp, &lv = *(dp=new (buf) S2488C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(68384,37232), "sizeof(S2488C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2488C20)");
    /*is_ambiguous_... S2488C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C5*), ABISELECT(52592,28632), "S2488C20");
    check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C5*), ABISELECT(53776,29288), "S2488C20");
    /*is_ambiguous_... S2488C20::S2488C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*), ABISELECT(53776,29288), "S2488C20");
    check_base_class_offset(lv, (S2489C3*)(S2488C8*), ABISELECT(53776,29288), "S2488C20");
    check_base_class_offset(lv, (S2488C6*)(S2488C5*), ABISELECT(52208,28432), "S2488C20");
    check_base_class_offset(lv, (S2488C5*), ABISELECT(52208,28432), "S2488C20");
    check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C9*), ABISELECT(52208,28432), "S2488C20");
    /*is_ambiguous_... S2488C20::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*), ABISELECT(53904,29360), "S2488C20");
    check_base_class_offset(lv, (S2488C6*)(S2488C8*), ABISELECT(53904,29360), "S2488C20");
    /*is_ambiguous_... S2488C10::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C9*), ABISELECT(53904,29360), "S2488C20");
    check_base_class_offset(lv, (S2488C8*), ABISELECT(54288,29560), "S2488C20");
    check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C9*), ABISELECT(54288,29560), "S2488C20");
    /*is_ambiguous_... S2488C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C9*), ABISELECT(16,4), "S2488C20");
    check_base_class_offset(lv, (S2488C10*)(S2488C9*), 0, "S2488C20");
    check_base_class_offset(lv, (S2488C9*), 0, "S2488C20");
    check_base_class_offset(lv, (S2488C13*), ABISELECT(54416,29640), "S2488C20");
    check_field_offset(lv, s2488c20f0, ABISELECT(328,196), "S2488C20.s2488c20f0");
    check_field_offset(lv, s2488c20f1, ABISELECT(330,198), "S2488C20.s2488c20f1");
    check_field_offset(lv, s2488c20f2, ABISELECT(336,204), "S2488C20.s2488c20f2");
    check_field_offset(lv, s2488c20f3, ABISELECT(50416,27444), "S2488C20.s2488c20f3");
    check_field_offset(lv, s2488c20f4, ABISELECT(52112,28372), "S2488C20.s2488c20f4");
    set_bf_and_test(lv, s2488c20f5, ABISELECT(52120,28380), 0, 5, 1, "S2488C20");
    set_bf_and_test(lv, s2488c20f5, ABISELECT(52120,28380), 0, 5, hide_sll(1LL<<4), "S2488C20");
    check_field_offset(lv, s2488c20f6, ABISELECT(52124,28384), "S2488C20.s2488c20f6");
    check_field_offset(lv, s2488c20f7, ABISELECT(52128,28388), "S2488C20.s2488c20f7");
    check_field_offset(lv, s2488c20f8, ABISELECT(52176,28412), "S2488C20.s2488c20f8");
    check_field_offset(lv, s2488c20f9, ABISELECT(52192,28420), "S2488C20.s2488c20f9");
    check_field_offset(lv, s2488c20f10, ABISELECT(52200,28428), "S2488C20.s2488c20f10");
    test_class_info(&lv, &cd_S2488C20);
    dp->~S2488C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2488C20(Test_S2488C20, "S2488C20", ABISELECT(68384,37232));

#else // __cplusplus

extern void _ZN8S2488C20C1Ev();
extern void _ZN8S2488C20D2Ev();
Name_Map name_map_S2488C20[] = {
  NSPAIR(_ZN8S2488C20C1Ev),
  NSPAIR(_ZN8S2488C20D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C5;
extern VTBL_ENTRY _ZTI7S2488C5[];
extern  VTBL_ENTRY _ZTV7S2488C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C5[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C8;
extern VTBL_ENTRY _ZTI7S2488C8[];
extern  VTBL_ENTRY _ZTV7S2488C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2488C9;
extern VTBL_ENTRY _ZTI7S2488C9[];
extern  VTBL_ENTRY _ZTV7S2488C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C9[];
extern Class_Descriptor cd_S2488C13;
extern VTBL_ENTRY _ZTI8S2488C13[];
extern  VTBL_ENTRY _ZTV8S2488C13[];
static Base_Class bases_S2488C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(52592,28632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(53776,29288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2488C6,    ABISELECT(52208,28432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2488C5,    ABISELECT(52208,28432), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2488C6,    ABISELECT(53904,29360), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2488C8,    ABISELECT(54288,29560), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2488C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2488C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2488C13,    ABISELECT(54416,29640), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2488C20[];
extern void _ZN8S2488C20D1Ev();
extern void _ZN8S2488C20D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S2488C20D1Ev,_ZTv0_n20_N8S2488C20D1Ev)();
extern void ABISELECT(_ZThn54288_N8S2488C20D1Ev,_ZThn29560_N8S2488C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C20D0Ev,_ZTv0_n20_N8S2488C20D0Ev)();
extern void ABISELECT(_ZThn54288_N8S2488C20D0Ev,_ZThn29560_N8S2488C20D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY vtc_S2488C20[] = {
  ABISELECT(54416,29640),
  ABISELECT(52208,28432),
  ABISELECT(54288,29560),
  ABISELECT(53776,29288),
  ABISELECT(53904,29360),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN8S2488C20D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C20D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-52208,-28432),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-53904,-29360),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  0,
  ABISELECT(-54288,-29560),
  ABISELECT(-384,-200),
  ABISELECT(-512,-272),
  ABISELECT(-54288,-29560),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C20D1Ev,_ZTv0_n20_N8S2488C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C20D0Ev,_ZTv0_n20_N8S2488C20D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
  0,
  ABISELECT(-54416,-29640),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern VTBL_ENTRY _ZTV8S2488C20[];
extern void _ZN7S2488C9D1Ev();
extern void _ZN7S2488C9D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C9__8S2488C20[] = {
  ABISELECT(52208,28432),
  ABISELECT(54288,29560),
  ABISELECT(53776,29288),
  ABISELECT(53904,29360),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C107S2488C9__8S2488C20[] = {
  ABISELECT(52208,28432),
  ABISELECT(54288,29560),
  ABISELECT(53776,29288),
  ABISELECT(53904,29360),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C107S2488C9__8S2488C20[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-53904,-29360),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZThn54288_N8S2488C10D1Ev,_ZThn29560_N8S2488C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void ABISELECT(_ZThn54288_N8S2488C10D0Ev,_ZThn29560_N8S2488C10D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C107S2488C9__8S2488C20[] = {
  0,
  ABISELECT(-54288,-29560),
  ABISELECT(-384,-200),
  ABISELECT(-512,-272),
  ABISELECT(-54288,-29560),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C107S2488C9__8S2488C20[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-52208,-28432),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C9__8S2488C20[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-53904,-29360),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev)();
extern void ABISELECT(_ZThn54288_N7S2488C9D1Ev,_ZThn29560_N7S2488C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev)();
extern void ABISELECT(_ZThn54288_N7S2488C9D0Ev,_ZThn29560_N7S2488C9D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__7S2488C9__8S2488C20[] = {
  0,
  ABISELECT(-54288,-29560),
  ABISELECT(-384,-200),
  ABISELECT(-512,-272),
  ABISELECT(-54288,-29560),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__7S2488C9__8S2488C20[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-52208,-28432),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C20[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C5[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C67S2488C5__8S2488C20[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A1__8S2488C20[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C8D1Ev();
extern void _ZN7S2488C8D0Ev();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C20[] = {
  ABISELECT(-384,-200),
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C8__8S2488C20[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(384,200),
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
static  VTT_ENTRY vtt_S2488C20[] = {
  {&(_ZTV8S2488C20[7]),  7,41},
  {&(_tg__ZTV7S2488C9__8S2488C20[6]),  6,11},
  {&(_tg__ZTV8S2488C107S2488C9__8S2488C20[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C107S2488C9__8S2488C20[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C107S2488C9__8S2488C20[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C107S2488C9__8S2488C20[6]),  6,9},
  {&(_tg__ZTV7S2488C6__7S2488C9__8S2488C20[5]),  5,7},
  {&(_tg__ZTV7S2488C8__7S2488C9__8S2488C20[6]),  6,9},
  {&(_tg__ZTV7S2488C5__7S2488C9__8S2488C20[6]),  6,9},
  {&(_ZTV8S2488C20[18]),  18,41},
  {&(_ZTV8S2488C20[26]),  26,41},
  {&(_ZTV8S2488C20[34]),  34,41},
  {&(_ZTV8S2488C20[40]),  40,41},
  {&(_tg__ZTV7S2488C5__8S2488C20[3]),  3,6},
  {&(_tg__ZTV7S2488C67S2488C5__8S2488C20[3]),  3,5},
  {&(_tg__ZTV7S2488C6__A1__8S2488C20[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C20[4]),  4,7},
  {&(_tg__ZTV7S2488C6__7S2488C8__8S2488C20[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S2488C20[];
extern  VTBL_ENTRY _ZTV8S2488C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C20[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N7S2488C9D0Ev,_ZThn29560_N7S2488C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N7S2488C9D1Ev,_ZThn29560_N7S2488C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N8S2488C10D0Ev,_ZThn29560_N8S2488C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N8S2488C10D1Ev,_ZThn29560_N8S2488C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C20D0Ev,_ZTv0_n20_N8S2488C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N8S2488C20D0Ev,_ZThn29560_N8S2488C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C20D1Ev,_ZTv0_n20_N8S2488C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N8S2488C20D1Ev,_ZThn29560_N8S2488C20D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2488C20 = {  "S2488C20", // class name
  bases_S2488C20, 10,
  &(vtc_S2488C20[0]), // expected_vtbl_contents
  &(vtt_S2488C20[0]), // expected_vtt_contents
  ABISELECT(68384,37232), // object size
  NSPAIRA(_ZTI8S2488C20),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S2488C20),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2488C20),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2488C17  : S2489C18 , S2488C19 , virtual S2488C20 , S2488C21 {
  int s2488c17f0;
  long double s2488c17f1;
  long s2488c17f2;
  char s2488c17f3:3;
  void *s2488c17f4;
  ::S2488C6 s2488c17f5;
  virtual  ~S2488C17(); // _ZN8S2488C17D2Ev
  virtual void  v12(); // _ZN8S2488C173v12Ev
  virtual void  v13(); // _ZN8S2488C173v13Ev
  S2488C17(); // tgen
};
//SIG(-1 S2488C17) C1{ BC2{ vd m FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi}} BC4{ VBC5{ VBC6{ m Fc Fi FL FU3 Fs FL:12 FL Fi} VBC7{ VBC6 v3 v4 Fp Fp Fi Fi FU8{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU8 Fp FL:3 FC6 Fl FU8} vd v5 FL FL FL Fl Fi FU8 Fc[10] Fi} BC9{ BC6 VBC7 VBC5 VBC10{ BC6 BC7 v6 Fp FD FC6[7] FD FU3 Fs Fl Fl} vd v7 Fc Fi[7] Fl[5] Fl FL FL FU11{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} BC6 BC7 vd v8 v9 v10 FU8 Fi Fl Fc Fp FC10 Fs} VBC12{ VBC10 VBC7 VBC5 BC13{ BC9 vd v11 v12 Fp Fp Fp Fi FC14{} Fl Fl} VBC15{ v13 FD FC16{ VBC10 VBC5 Fi Fp Fi FU8}[6] Fc Fp Fp Fi[6] Fi Fp Fl Fp Fi Fp Fp} vd Fc Fs[3] FC17{ BC6 VBC7 VBC5 VBC10 VBC4 vd FL Fi Fp Fp Fl}[10] FC10 FL FL:5 Fi Fp[6] Fl[2] FL Fi} BC17 vd v1 v2 Fi FD Fl Fc:3 Fp FC7}


 S2488C17 ::~S2488C17(){ note_dtor("S2488C17", this);}
void  S2488C17 ::v12(){vfunc_called(this, "_ZN8S2488C173v12Ev");}
void  S2488C17 ::v13(){vfunc_called(this, "_ZN8S2488C173v13Ev");}
S2488C17 ::S2488C17(){ note_ctor("S2488C17", this);} // tgen

static void Test_S2488C17()
{
  extern Class_Descriptor cd_S2488C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4654,10128)];
    init_test(&cd_S2488C17, buf);
    S2488C17 *dp, &lv = *(dp=new (buf) S2488C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(74448,40508), "sizeof(S2488C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2488C17)");
    check_base_class_offset(lv, (S2489C18*), 0, "S2488C17");
    check_base_class_offset(lv, (S2489C3*)(S2488C8*), ABISELECT(3584,1940), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*), ABISELECT(3584,1940), "S2488C17");
    check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C5*), ABISELECT(3584,1940), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C19*), ABISELECT(3584,1940), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C19*), ABISELECT(3584,1940), "S2488C17");
    check_base_class_offset(lv, (S2488C6*)(S2488C8*), ABISELECT(3712,2012), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C19*), ABISELECT(3712,2012), "S2488C17");
    /*is_ambiguous_... S2488C20::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C20*), ABISELECT(3712,2012), "S2488C17");
    /*is_ambiguous_... S2488C10::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(3712,2012), "S2488C17");
    /*is_ambiguous_... S2488C21::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C21*), ABISELECT(3712,2012), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C19*), ABISELECT(3712,2012), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C19*), ABISELECT(3456,1860), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C19*), ABISELECT(3456,1860), "S2488C17");
    check_base_class_offset(lv, (S2488C8*)(S2488C20*), ABISELECT(3456,1860), "S2488C17");
    check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(3456,1860), "S2488C17");
    check_base_class_offset(lv, (S2488C8*)(S2488C21*), ABISELECT(3456,1860), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C19*), ABISELECT(3456,1860), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C19*), ABISELECT(3456,1860), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C19*), ABISELECT(112,48), "S2488C17");
    /*is_ambiguous_... S2488C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C5*), ABISELECT(4480,2412), "S2488C17");
    check_base_class_offset(lv, (S2488C6*)(S2488C5*), ABISELECT(4096,2212), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C19*), ABISELECT(4096,2212), "S2488C17");
    check_base_class_offset(lv, (S2488C5*)(S2488C20*), ABISELECT(4096,2212), "S2488C17");
    check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(4096,2212), "S2488C17");
    check_base_class_offset(lv, (S2488C5*)(S2488C21*), ABISELECT(4096,2212), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C19*), ABISELECT(4096,2212), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C10*)(S2488C19*), ABISELECT(96,44), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C19*), ABISELECT(384,212), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C19*), ABISELECT(512,284), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C19*), ABISELECT(96,44), "S2488C17");
    /*is_ambiguous_... S2488C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(5680,3072), "S2488C17");
    check_base_class_offset(lv, (S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(5664,3068), "S2488C17");
    check_base_class_offset(lv, (S2488C9*)(S2488C20*), ABISELECT(5664,3068), "S2488C17");
    check_base_class_offset(lv, (S2488C13*)(S2488C20*), ABISELECT(57872,31500), "S2488C17");
    check_base_class_offset(lv, (S2488C20*), ABISELECT(5664,3068), "S2488C17");
    /*is_ambiguous_... S2488C21::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C21*), ABISELECT(2720,1464), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C19*), ABISELECT(71856,39096), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C10*)(S2488C19*), ABISELECT(71840,39092), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C19*), ABISELECT(72128,39260), "S2488C17");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C19*), ABISELECT(72256,39332), "S2488C17");
    check_base_class_offset(lv, (S2488C19*)(S2488C21*), ABISELECT(71840,39092), "S2488C17");
    check_base_class_offset(lv, (S2488C21*), ABISELECT(2704,1460), "S2488C17");
    check_field_offset(lv, s2488c17f0, ABISELECT(2888,1560), "S2488C17.s2488c17f0");
    check_field_offset(lv, s2488c17f1, ABISELECT(2896,1564), "S2488C17.s2488c17f1");
    check_field_offset(lv, s2488c17f2, ABISELECT(2912,1576), "S2488C17.s2488c17f2");
    set_bf_and_test(lv, s2488c17f3, ABISELECT(2920,1580), 0, 3, 1, "S2488C17");
    set_bf_and_test(lv, s2488c17f3, ABISELECT(2920,1580), 0, 3, hide_sll(1LL<<2), "S2488C17");
    check_field_offset(lv, s2488c17f4, ABISELECT(2928,1584), "S2488C17.s2488c17f4");
    check_field_offset(lv, s2488c17f5, ABISELECT(2944,1588), "S2488C17.s2488c17f5");
    test_class_info(&lv, &cd_S2488C17);
    dp->~S2488C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2488C17(Test_S2488C17, "S2488C17", ABISELECT(74448,40508));

#else // __cplusplus

extern void _ZN8S2488C17C1Ev();
extern void _ZN8S2488C17D2Ev();
Name_Map name_map_S2488C17[] = {
  NSPAIR(_ZN8S2488C17C1Ev),
  NSPAIR(_ZN8S2488C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C8;
extern VTBL_ENTRY _ZTI7S2488C8[];
extern  VTBL_ENTRY _ZTV7S2488C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C5;
extern VTBL_ENTRY _ZTI7S2488C5[];
extern  VTBL_ENTRY _ZTV7S2488C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C5[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C19;
extern VTBL_ENTRY _ZTI8S2488C19[];
extern  VTBL_ENTRY _ZTV8S2488C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C19[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2488C9;
extern VTBL_ENTRY _ZTI7S2488C9[];
extern  VTBL_ENTRY _ZTV7S2488C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C9[];
extern Class_Descriptor cd_S2488C13;
extern VTBL_ENTRY _ZTI8S2488C13[];
extern  VTBL_ENTRY _ZTV8S2488C13[];
extern Class_Descriptor cd_S2488C20;
extern VTBL_ENTRY _ZTI8S2488C20[];
extern  VTBL_ENTRY _ZTV8S2488C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C20[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C19;
extern VTBL_ENTRY _ZTI8S2488C19[];
extern  VTBL_ENTRY _ZTV8S2488C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C19[];
extern Class_Descriptor cd_S2488C21;
extern VTBL_ENTRY _ZTI8S2488C21[];
extern  VTBL_ENTRY _ZTV8S2488C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C21[];
static Base_Class bases_S2488C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(3584,1940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2488C6,    ABISELECT(3712,2012), //bcp->offset
    48, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2488C8,    ABISELECT(3456,1860), //bcp->offset
    39, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(112,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(4480,2412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(4096,2212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2488C5,    ABISELECT(4096,2212), //bcp->offset
    55, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2488C10,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(384,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(512,284), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2488C19,    ABISELECT(96,44), //bcp->offset
    13, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(5680,3072), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(5664,3068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2488C9,    ABISELECT(5664,3068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2488C13,    ABISELECT(57872,31500), //bcp->offset
    80, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2488C20,    ABISELECT(5664,3068), //bcp->offset
    64, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(2720,1464), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(71856,39096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(71840,39092), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(72128,39260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(72256,39332), //bcp->offset
    103, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2488C19,    ABISELECT(71840,39092), //bcp->offset
    84, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S2488C21,    ABISELECT(2704,1460), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2488C17[];
extern void _ZN8S2488C17D1Ev();
extern void _ZN8S2488C17D0Ev();
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
extern void ABISELECT(_ZThn96_N8S2488C17D1Ev,_ZThn44_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S2488C17D0Ev,_ZThn44_N8S2488C17D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void ABISELECT(_ZThn2704_N8S2488C17D1Ev,_ZThn1460_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2488C17D0Ev,_ZThn1460_N8S2488C17D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn3456_N8S2488C17D1Ev,_ZThn1860_N8S2488C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev)();
extern void ABISELECT(_ZThn3456_N8S2488C17D0Ev,_ZThn1860_N8S2488C17D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn5664_N8S2488C17D1Ev,_ZThn3068_N8S2488C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev)();
extern void ABISELECT(_ZThn5664_N8S2488C17D0Ev,_ZThn3068_N8S2488C17D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
extern void _ZN8S2488C133v11Ev();
extern void ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn71840_N8S2488C17D1Ev,_ZThn39092_N8S2488C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev)();
extern void ABISELECT(_ZThn71840_N8S2488C17D0Ev,_ZThn39092_N8S2488C17D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY vtc_S2488C17[] = {
  ABISELECT(71840,39092),
  ABISELECT(57872,31500),
  ABISELECT(5664,3068),
  ABISELECT(4096,2212),
  ABISELECT(3712,2012),
  ABISELECT(3584,1940),
  ABISELECT(3456,1860),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN8S2488C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C17D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
  ABISELECT(4000,2168),
  ABISELECT(3360,1816),
  ABISELECT(3488,1896),
  ABISELECT(3616,1968),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C17D1Ev,_ZThn44_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C17D0Ev,_ZThn44_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
  ABISELECT(3072,1656),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  ABISELECT(69136,37632),
  ABISELECT(1392,752),
  ABISELECT(752,400),
  ABISELECT(880,480),
  ABISELECT(1008,552),
  ABISELECT(-2704,-1460),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C17D1Ev,_ZThn1460_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C17D0Ev,_ZThn1460_N8S2488C17D0Ev),
  0,
  ABISELECT(-3456,-1860),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(-3456,-1860),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-3712,-2012),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-4096,-2212),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
  0,
  0,
  0,
  ABISELECT(-5664,-3068),
  ABISELECT(52208,28432),
  ABISELECT(-1568,-856),
  ABISELECT(-2208,-1208),
  ABISELECT(-2080,-1128),
  ABISELECT(-1952,-1056),
  ABISELECT(-5664,-3068),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
  0,
  ABISELECT(-57872,-31500),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-71840,-39092),
  ABISELECT(-67744,-36880),
  ABISELECT(-68384,-37232),
  ABISELECT(-68256,-37152),
  ABISELECT(-68128,-37080),
  ABISELECT(-71840,-39092),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
  ABISELECT(-68672,-37392),
  ABISELECT(-72256,-39332),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S2488C17[];
extern void _ZN8S2488C19D1Ev();
extern void _ZN8S2488C19D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A__8S2488C17[] = {
  ABISELECT(4000,2168),
  ABISELECT(3360,1816),
  ABISELECT(3488,1896),
  ABISELECT(3616,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN8S2488C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C108S2488C19__8S2488C17[] = {
  ABISELECT(4000,2168),
  ABISELECT(3360,1816),
  ABISELECT(3488,1896),
  ABISELECT(3616,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C108S2488C19__8S2488C17[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-3616,-1968),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZThn3360_N8S2488C10D1Ev,_ZThn1816_N8S2488C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void ABISELECT(_ZThn3360_N8S2488C10D0Ev,_ZThn1816_N8S2488C10D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C108S2488C19__8S2488C17[] = {
  0,
  ABISELECT(-3360,-1816),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(-3360,-1816),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C108S2488C19__8S2488C17[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-4000,-2168),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A2__8S2488C17[] = {
  ABISELECT(3072,1656),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev)();
extern void ABISELECT(_ZThn3360_N8S2488C19D1Ev,_ZThn1816_N8S2488C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev)();
extern void ABISELECT(_ZThn3360_N8S2488C19D0Ev,_ZThn1816_N8S2488C19D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C19__A__8S2488C17[] = {
  0,
  ABISELECT(-3360,-1816),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(-3360,-1816),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C19__A__8S2488C17[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-3616,-1968),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C19__A__8S2488C17[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-4000,-2168),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A__8S2488C19__A__8S2488C17[] = {
  ABISELECT(3072,1656),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C21D1Ev();
extern void _ZN8S2488C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C21__8S2488C17[] = {
  ABISELECT(69136,37632),
  ABISELECT(1392,752),
  ABISELECT(752,400),
  ABISELECT(880,480),
  ABISELECT(1008,552),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN8S2488C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C21D0Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C21__8S2488C17[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-1008,-552),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev)();
extern void ABISELECT(_ZThn752_N8S2488C21D1Ev,_ZThn400_N8S2488C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev)();
extern void ABISELECT(_ZThn752_N8S2488C21D0Ev,_ZThn400_N8S2488C21D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C21__8S2488C17[] = {
  0,
  ABISELECT(-752,-400),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(-752,-400),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C21__8S2488C17[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-1392,-752),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev)();
extern void ABISELECT(_ZThn69136_N8S2488C21D1Ev,_ZThn37632_N8S2488C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev)();
extern void ABISELECT(_ZThn69136_N8S2488C21D0Ev,_ZThn37632_N8S2488C21D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__8S2488C21__8S2488C17[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-69136,-37632),
  ABISELECT(-67744,-36880),
  ABISELECT(-68384,-37232),
  ABISELECT(-68256,-37152),
  ABISELECT(-68128,-37080),
  ABISELECT(-69136,-37632),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A2__8S2488C21__8S2488C17[] = {
  ABISELECT(-68672,-37392),
  ABISELECT(-69552,-37872),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C8D1Ev();
extern void _ZN7S2488C8D0Ev();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C17[] = {
  ABISELECT(256,152),
  ABISELECT(128,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C8__8S2488C17[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C17[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C17[] = {
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C5[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C67S2488C5__A1__8S2488C17[] = {
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C20D1Ev();
extern void _ZN8S2488C20D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C17[] = {
  ABISELECT(52208,28432),
  ABISELECT(-1568,-856),
  ABISELECT(-2208,-1208),
  ABISELECT(-2080,-1128),
  ABISELECT(-1952,-1056),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN8S2488C20D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C20D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN7S2488C9D1Ev();
extern void _ZN7S2488C9D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C98S2488C20__8S2488C17[] = {
  ABISELECT(-1568,-856),
  ABISELECT(-2208,-1208),
  ABISELECT(-2080,-1128),
  ABISELECT(-1952,-1056),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C107S2488C98S2488C20__A1__8S2488C17[] = {
  ABISELECT(-1568,-856),
  ABISELECT(-2208,-1208),
  ABISELECT(-2080,-1128),
  ABISELECT(-1952,-1056),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C107S2488C98S2488C20__A1__8S2488C17[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(1952,1056),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C107S2488C98S2488C20__A1__8S2488C17[] = {
  0,
  ABISELECT(2208,1208),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(2208,1208),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C107S2488C98S2488C20__A1__8S2488C17[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(1568,856),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C98S2488C20__8S2488C17[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(1952,1056),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__7S2488C98S2488C20__8S2488C17[] = {
  0,
  ABISELECT(2208,1208),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(2208,1208),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__7S2488C98S2488C20__8S2488C17[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(1568,856),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C20__8S2488C17[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(1568,856),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A1__8S2488C20__8S2488C17[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(1952,1056),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C20D1Ev,_ZTv0_n20_N8S2488C20D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C20D0Ev,_ZTv0_n20_N8S2488C20D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C20__8S2488C17[] = {
  0,
  ABISELECT(2208,1208),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(2208,1208),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C20D1Ev,_ZTv0_n20_N8S2488C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C20D0Ev,_ZTv0_n20_N8S2488C20D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C20__8S2488C17[] = {
  0,
  ABISELECT(-52208,-28432),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void _ZN8S2488C19D1Ev();
extern void _ZN8S2488C19D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C17[] = {
  ABISELECT(-67744,-36880),
  ABISELECT(-68384,-37232),
  ABISELECT(-68256,-37152),
  ABISELECT(-68128,-37080),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN8S2488C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C108S2488C19__A2__8S2488C17[] = {
  ABISELECT(-67744,-36880),
  ABISELECT(-68384,-37232),
  ABISELECT(-68256,-37152),
  ABISELECT(-68128,-37080),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C108S2488C19__A2__8S2488C17[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(68128,37080),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C108S2488C19__A2__8S2488C17[] = {
  0,
  ABISELECT(68384,37232),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(68384,37232),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C108S2488C19__A2__8S2488C17[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(67744,36880),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C17[] = {
  ABISELECT(-68672,-37392),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C19__A1__8S2488C17[] = {
  0,
  ABISELECT(68384,37232),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(68384,37232),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C19__A1__8S2488C17[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(68128,37080),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C19__A1__8S2488C17[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(67744,36880),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A__8S2488C19__A1__8S2488C17[] = {
  ABISELECT(-68672,-37392),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
static  VTT_ENTRY vtt_S2488C17[] = {
  {&(_ZTV8S2488C17[9]),  9,108},
  {&(_tg__ZTV8S2488C19__A__8S2488C17[6]),  6,12},
  {&(_tg__ZTV8S2488C108S2488C19__8S2488C17[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C108S2488C19__8S2488C17[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C108S2488C19__8S2488C17[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C108S2488C19__8S2488C17[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C19__A2__8S2488C17[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C19__A__8S2488C17[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C19__A__8S2488C17[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C19__A__8S2488C17[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A__8S2488C19__A__8S2488C17[3]),  3,5},
  {&(_tg__ZTV8S2488C21__8S2488C17[7]),  7,9},
  {&(_tg__ZTV7S2488C6__8S2488C21__8S2488C17[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C21__8S2488C17[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C21__8S2488C17[6]),  6,9},
  {&(_tg__ZTV8S2488C19__8S2488C21__8S2488C17[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A2__8S2488C21__8S2488C17[3]),  3,5},
  {&(_ZTV8S2488C17[19]),  19,108},
  {&(_ZTV8S2488C17[45]),  45,108},
  {&(_ZTV8S2488C17[53]),  53,108},
  {&(_ZTV8S2488C17[61]),  61,108},
  {&(_ZTV8S2488C17[28]),  28,108},
  {&(_ZTV8S2488C17[75]),  75,108},
  {&(_ZTV8S2488C17[83]),  83,108},
  {&(_ZTV8S2488C17[37]),  37,108},
  {&(_ZTV8S2488C17[97]),  97,108},
  {&(_ZTV8S2488C17[106]),  106,108},
  {&(_tg__ZTV7S2488C8__8S2488C17[4]),  4,7},
  {&(_tg__ZTV7S2488C6__7S2488C8__8S2488C17[5]),  5,7},
  {&(_tg__ZTV7S2488C6__8S2488C17[3]),  3,5},
  {&(_tg__ZTV7S2488C5__8S2488C17[3]),  3,6},
  {&(_tg__ZTV7S2488C67S2488C5__A1__8S2488C17[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C17[7]),  7,12},
  {&(_tg__ZTV7S2488C98S2488C20__8S2488C17[6]),  6,11},
  {&(_tg__ZTV8S2488C107S2488C98S2488C20__A1__8S2488C17[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C107S2488C98S2488C20__A1__8S2488C17[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C107S2488C98S2488C20__A1__8S2488C17[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C107S2488C98S2488C20__A1__8S2488C17[6]),  6,9},
  {&(_tg__ZTV7S2488C6__7S2488C98S2488C20__8S2488C17[5]),  5,7},
  {&(_tg__ZTV7S2488C8__7S2488C98S2488C20__8S2488C17[6]),  6,9},
  {&(_tg__ZTV7S2488C5__7S2488C98S2488C20__8S2488C17[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C20__8S2488C17[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A1__8S2488C20__8S2488C17[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C20__8S2488C17[6]),  6,9},
  {&(_tg__ZTV8S2488C13__8S2488C20__8S2488C17[3]),  3,4},
  {&(_tg__ZTV8S2488C19__A1__8S2488C17[6]),  6,12},
  {&(_tg__ZTV8S2488C108S2488C19__A2__8S2488C17[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C108S2488C19__A2__8S2488C17[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C108S2488C19__A2__8S2488C17[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C108S2488C19__A2__8S2488C17[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C17[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C19__A1__8S2488C17[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C19__A1__8S2488C17[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C19__A1__8S2488C17[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A__8S2488C19__A1__8S2488C17[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2488C17[];
extern  VTBL_ENTRY _ZTV8S2488C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C17[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn69136_N8S2488C21D0Ev,_ZThn37632_N8S2488C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn69136_N8S2488C21D1Ev,_ZThn37632_N8S2488C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S2488C21D0Ev,_ZThn400_N8S2488C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S2488C21D1Ev,_ZThn400_N8S2488C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N8S2488C19D0Ev,_ZThn1816_N8S2488C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N8S2488C19D1Ev,_ZThn1816_N8S2488C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N8S2488C10D0Ev,_ZThn1816_N8S2488C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N8S2488C10D1Ev,_ZThn1816_N8S2488C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn71840_N8S2488C17D0Ev,_ZThn39092_N8S2488C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn71840_N8S2488C17D1Ev,_ZThn39092_N8S2488C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5664_N8S2488C17D0Ev,_ZThn3068_N8S2488C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5664_N8S2488C17D1Ev,_ZThn3068_N8S2488C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N8S2488C17D0Ev,_ZThn1860_N8S2488C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N8S2488C17D1Ev,_ZThn1860_N8S2488C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2488C17 = {  "S2488C17", // class name
  bases_S2488C17, 24,
  &(vtc_S2488C17[0]), // expected_vtbl_contents
  &(vtt_S2488C17[0]), // expected_vtt_contents
  ABISELECT(74448,40508), // object size
  NSPAIRA(_ZTI8S2488C17),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S2488C17),108, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2488C17),55, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2488C16  : virtual S2488C17 {
  char s2488c16f0;
  void *s2488c16f1;
  long s2488c16f2;
  int s2488c16f3;
  int s2488c16f4;
  int s2488c16f5;
  void *s2488c16f6;
  long s2488c16f7;
  ::S2488C2 s2488c16f8;
  long double s2488c16f9;
  long s2488c16f10;
  int s2488c16f11;
  ~S2488C16(); // tgen
  S2488C16(); // tgen
};
//SIG(-1 S2488C16) C1{ VBC2{ BC3{ vd m FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi}} BC5{ VBC6{ VBC7{ m Fc Fi FL FU4 Fs FL:12 FL Fi} VBC8{ VBC7 v1 v2 Fp Fp Fi Fi FU9{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU9 Fp FL:3 FC7 Fl FU9} vd v3 FL FL FL Fl Fi FU9 Fc[10] Fi} BC10{ BC7 VBC8 VBC6 VBC11{ BC7 BC8 v4 Fp FD FC7[7] FD FU4 Fs Fl Fl} vd v5 Fc Fi[7] Fl[5] Fl FL FL FU12{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} BC7 BC8 vd v6 v7 v8 FU9 Fi Fl Fc Fp FC11 Fs} VBC13{ VBC11 VBC8 VBC6 BC14{ BC10 vd v9 v10 Fp Fp Fp Fi FC15{} Fl Fl} VBC16{ v11 FD FC17{ VBC11 VBC6 Fi Fp Fi FU9}[6] Fc Fp Fp Fi[6] Fi Fp Fl Fp Fi Fp Fp} vd Fc Fs[3] FC18{ BC7 VBC8 VBC6 VBC11 VBC5 vd FL Fi Fp Fp Fl}[10] FC11 FL FL:5 Fi Fp[6] Fl[2] FL Fi} BC18 vd v12 v13 Fi FD Fl Fc:3 Fp FC8} Fc Fp Fl Fi Fi Fi Fp Fl FC19{ BC7 VBC11 VBC6 BC14 vd FD} FD Fl Fi}


S2488C16 ::~S2488C16(){ note_dtor("S2488C16", this);} // tgen
S2488C16 ::S2488C16(){ note_ctor("S2488C16", this);} // tgen

static void Test_S2488C16()
{
  extern Class_Descriptor cd_S2488C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4828,10514)];
    init_test(&cd_S2488C16, buf);
    S2488C16 *dp, &lv = *(dp=new (buf) S2488C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(77232,42052), "sizeof(S2488C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2488C16)");
    check_base_class_offset(lv, (S2489C18*)(S2488C17*), ABISELECT(2784,1544), "S2488C16");
    check_base_class_offset(lv, (S2489C3*)(S2488C8*), ABISELECT(6368,3484), "S2488C16");
    /*is_ambiguous_... S2488C16::S2488C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*), ABISELECT(6368,3484), "S2488C16");
    check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C5*), ABISELECT(6368,3484), "S2488C16");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C19*)(S2488C17*), ABISELECT(6368,3484), "S2488C16");
    /*is_ambiguous_... S2488C16::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C19*), ABISELECT(6368,3484), "S2488C16");
    check_base_class_offset(lv, (S2488C6*)(S2488C8*), ABISELECT(6496,3556), "S2488C16");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(6496,3556), "S2488C16");
    /*is_ambiguous_... S2488C20::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C20*), ABISELECT(6496,3556), "S2488C16");
    /*is_ambiguous_... S2488C10::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(6496,3556), "S2488C16");
    /*is_ambiguous_... S2488C21::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C21*)(S2488C17*), ABISELECT(6496,3556), "S2488C16");
    /*is_ambiguous_... S2488C16::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C19*), ABISELECT(6496,3556), "S2488C16");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C19*)(S2488C17*), ABISELECT(6240,3404), "S2488C16");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(6240,3404), "S2488C16");
    check_base_class_offset(lv, (S2488C8*)(S2488C20*), ABISELECT(6240,3404), "S2488C16");
    check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(6240,3404), "S2488C16");
    check_base_class_offset(lv, (S2488C8*)(S2488C21*)(S2488C17*), ABISELECT(6240,3404), "S2488C16");
    /*is_ambiguous_... S2488C16::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C19*), ABISELECT(6240,3404), "S2488C16");
    /*is_ambiguous_... S2488C16::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C19*), ABISELECT(6240,3404), "S2488C16");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(2896,1592), "S2488C16");
    /*is_ambiguous_... S2488C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C5*), ABISELECT(7264,3956), "S2488C16");
    check_base_class_offset(lv, (S2488C6*)(S2488C5*), ABISELECT(6880,3756), "S2488C16");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(6880,3756), "S2488C16");
    check_base_class_offset(lv, (S2488C5*)(S2488C20*), ABISELECT(6880,3756), "S2488C16");
    check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(6880,3756), "S2488C16");
    check_base_class_offset(lv, (S2488C5*)(S2488C21*)(S2488C17*), ABISELECT(6880,3756), "S2488C16");
    /*is_ambiguous_... S2488C16::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C19*), ABISELECT(6880,3756), "S2488C16");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(2880,1588), "S2488C16");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C19*)(S2488C17*), ABISELECT(3168,1756), "S2488C16");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C19*)(S2488C17*), ABISELECT(3296,1828), "S2488C16");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C19*)(S2488C17*), ABISELECT(2880,1588), "S2488C16");
    /*is_ambiguous_... S2488C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(8464,4616), "S2488C16");
    check_base_class_offset(lv, (S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(8448,4612), "S2488C16");
    check_base_class_offset(lv, (S2488C9*)(S2488C20*), ABISELECT(8448,4612), "S2488C16");
    check_base_class_offset(lv, (S2488C13*)(S2488C20*), ABISELECT(60656,33044), "S2488C16");
    check_base_class_offset(lv, (S2488C20*)(S2488C17*), ABISELECT(8448,4612), "S2488C16");
    /*is_ambiguous_... S2488C21::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C21*)(S2488C17*), ABISELECT(5504,3008), "S2488C16");
    /*is_ambiguous_... S2488C16::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C19*), ABISELECT(74640,40640), "S2488C16");
    /*is_ambiguous_... S2488C16::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C10*)(S2488C19*), ABISELECT(74624,40636), "S2488C16");
    /*is_ambiguous_... S2488C16::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C19*), ABISELECT(74912,40804), "S2488C16");
    /*is_ambiguous_... S2488C16::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C19*), ABISELECT(75040,40876), "S2488C16");
    check_base_class_offset(lv, (S2488C19*)(S2488C21*)(S2488C17*), ABISELECT(74624,40636), "S2488C16");
    check_base_class_offset(lv, (S2488C21*)(S2488C17*), ABISELECT(5488,3004), "S2488C16");
    check_base_class_offset(lv, (S2488C17*), ABISELECT(2784,1544), "S2488C16");
    check_field_offset(lv, s2488c16f0, ABISELECT(8,4), "S2488C16.s2488c16f0");
    check_field_offset(lv, s2488c16f1, ABISELECT(16,8), "S2488C16.s2488c16f1");
    check_field_offset(lv, s2488c16f2, ABISELECT(24,12), "S2488C16.s2488c16f2");
    check_field_offset(lv, s2488c16f3, ABISELECT(32,16), "S2488C16.s2488c16f3");
    check_field_offset(lv, s2488c16f4, ABISELECT(36,20), "S2488C16.s2488c16f4");
    check_field_offset(lv, s2488c16f5, ABISELECT(40,24), "S2488C16.s2488c16f5");
    check_field_offset(lv, s2488c16f6, ABISELECT(48,28), "S2488C16.s2488c16f6");
    check_field_offset(lv, s2488c16f7, ABISELECT(56,32), "S2488C16.s2488c16f7");
    check_field_offset(lv, s2488c16f8, ABISELECT(64,36), "S2488C16.s2488c16f8");
    check_field_offset(lv, s2488c16f9, ABISELECT(2752,1524), "S2488C16.s2488c16f9");
    check_field_offset(lv, s2488c16f10, ABISELECT(2768,1536), "S2488C16.s2488c16f10");
    check_field_offset(lv, s2488c16f11, ABISELECT(2776,1540), "S2488C16.s2488c16f11");
    test_class_info(&lv, &cd_S2488C16);
    dp->~S2488C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2488C16(Test_S2488C16, "S2488C16", ABISELECT(77232,42052));

#else // __cplusplus

extern void _ZN8S2488C16C1Ev();
extern void _ZN8S2488C16D1Ev();
Name_Map name_map_S2488C16[] = {
  NSPAIR(_ZN8S2488C16C1Ev),
  NSPAIR(_ZN8S2488C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C8;
extern VTBL_ENTRY _ZTI7S2488C8[];
extern  VTBL_ENTRY _ZTV7S2488C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C5;
extern VTBL_ENTRY _ZTI7S2488C5[];
extern  VTBL_ENTRY _ZTV7S2488C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C5[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C19;
extern VTBL_ENTRY _ZTI8S2488C19[];
extern  VTBL_ENTRY _ZTV8S2488C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C19[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2488C9;
extern VTBL_ENTRY _ZTI7S2488C9[];
extern  VTBL_ENTRY _ZTV7S2488C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C9[];
extern Class_Descriptor cd_S2488C13;
extern VTBL_ENTRY _ZTI8S2488C13[];
extern  VTBL_ENTRY _ZTV8S2488C13[];
extern Class_Descriptor cd_S2488C20;
extern VTBL_ENTRY _ZTI8S2488C20[];
extern  VTBL_ENTRY _ZTV8S2488C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C20[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C19;
extern VTBL_ENTRY _ZTI8S2488C19[];
extern  VTBL_ENTRY _ZTV8S2488C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C19[];
extern Class_Descriptor cd_S2488C21;
extern VTBL_ENTRY _ZTI8S2488C21[];
extern  VTBL_ENTRY _ZTV8S2488C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C21[];
extern Class_Descriptor cd_S2488C17;
extern VTBL_ENTRY _ZTI8S2488C17[];
extern  VTBL_ENTRY _ZTV8S2488C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C17[];
static Base_Class bases_S2488C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C18,    ABISELECT(2784,1544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(6368,3484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2488C6,    ABISELECT(6496,3556), //bcp->offset
    69, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2488C8,    ABISELECT(6240,3404), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(2896,1592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(7264,3956), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(6880,3756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2488C5,    ABISELECT(6880,3756), //bcp->offset
    76, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2488C10,    ABISELECT(2880,1588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(3168,1756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(3296,1828), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2488C19,    ABISELECT(2880,1588), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(8464,4616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(8448,4612), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2488C9,    ABISELECT(8448,4612), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2488C13,    ABISELECT(60656,33044), //bcp->offset
    101, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2488C20,    ABISELECT(8448,4612), //bcp->offset
    85, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(5504,3008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(74640,40640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(74624,40636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(74912,40804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(75040,40876), //bcp->offset
    124, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2488C19,    ABISELECT(74624,40636), //bcp->offset
    105, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S2488C21,    ABISELECT(5488,3004), //bcp->offset
    51, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2488C17,    ABISELECT(2784,1544), //bcp->offset
    12, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2488C16[];
extern void _ZN8S2488C16D1Ev();
extern void _ZN8S2488C16D0Ev();
extern void ABISELECT(_ZTv0_n80_N8S2488C16D1Ev,_ZTv0_n40_N8S2488C16D1Ev)();
extern void ABISELECT(_ZThn2784_N8S2488C16D1Ev,_ZThn1544_N8S2488C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S2488C16D0Ev,_ZTv0_n40_N8S2488C16D0Ev)();
extern void ABISELECT(_ZThn2784_N8S2488C16D0Ev,_ZThn1544_N8S2488C16D0Ev)() __attribute__((weak));
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
extern void ABISELECT(_ZTvn96_n80_N8S2488C16D1Ev,_ZTvn44_n40_N8S2488C16D1Ev)();
extern void ABISELECT(_ZTvn96_n80_N8S2488C16D0Ev,_ZTvn44_n40_N8S2488C16D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void ABISELECT(_ZTvn2704_n80_N8S2488C16D1Ev,_ZTvn1460_n40_N8S2488C16D1Ev)();
extern void ABISELECT(_ZTvn2704_n80_N8S2488C16D0Ev,_ZTvn1460_n40_N8S2488C16D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C16D1Ev,_ZTv0_n20_N8S2488C16D1Ev)();
extern void ABISELECT(_ZThn6240_N8S2488C16D1Ev,_ZThn3404_N8S2488C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C16D0Ev,_ZTv0_n20_N8S2488C16D0Ev)();
extern void ABISELECT(_ZThn6240_N8S2488C16D0Ev,_ZThn3404_N8S2488C16D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S2488C16D1Ev,_ZTv0_n32_N8S2488C16D1Ev)();
extern void ABISELECT(_ZThn8448_N8S2488C16D1Ev,_ZThn4612_N8S2488C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2488C16D0Ev,_ZTv0_n32_N8S2488C16D0Ev)();
extern void ABISELECT(_ZThn8448_N8S2488C16D0Ev,_ZThn4612_N8S2488C16D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
extern void _ZN8S2488C133v11Ev();
extern void ABISELECT(_ZTv0_n56_N8S2488C16D1Ev,_ZTv0_n28_N8S2488C16D1Ev)();
extern void ABISELECT(_ZThn74624_N8S2488C16D1Ev,_ZThn40636_N8S2488C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C16D0Ev,_ZTv0_n28_N8S2488C16D0Ev)();
extern void ABISELECT(_ZThn74624_N8S2488C16D0Ev,_ZThn40636_N8S2488C16D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY vtc_S2488C16[] = {
  ABISELECT(74624,40636),
  ABISELECT(60656,33044),
  ABISELECT(8448,4612),
  ABISELECT(6880,3756),
  ABISELECT(6496,3556),
  ABISELECT(6368,3484),
  ABISELECT(6240,3404),
  ABISELECT(2784,1544),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&_ZN8S2488C16D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C16D0Ev,
  ABISELECT(512,284),
  ABISELECT(512,284),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-2784,-1544),
  ABISELECT(71840,39092),
  ABISELECT(57872,31500),
  ABISELECT(5664,3068),
  ABISELECT(4096,2212),
  ABISELECT(3712,2012),
  ABISELECT(3584,1940),
  ABISELECT(3456,1860),
  ABISELECT(-2784,-1544),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2488C16D1Ev,_ZTv0_n40_N8S2488C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2488C16D0Ev,_ZTv0_n40_N8S2488C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
  ABISELECT(4000,2168),
  ABISELECT(3360,1816),
  ABISELECT(3488,1896),
  ABISELECT(3616,1968),
  ABISELECT(-2880,-1588),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2488C16D1Ev,_ZTvn44_n40_N8S2488C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2488C16D0Ev,_ZTvn44_n40_N8S2488C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
  ABISELECT(3072,1656),
  ABISELECT(-3296,-1828),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  ABISELECT(69136,37632),
  ABISELECT(1392,752),
  ABISELECT(752,400),
  ABISELECT(880,480),
  ABISELECT(1008,552),
  ABISELECT(-5488,-3004),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2488C16D1Ev,_ZTvn1460_n40_N8S2488C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2488C16D0Ev,_ZTvn1460_n40_N8S2488C16D0Ev),
  0,
  ABISELECT(-6240,-3404),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(-6240,-3404),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C16D1Ev,_ZTv0_n20_N8S2488C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C16D0Ev,_ZTv0_n20_N8S2488C16D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-6496,-3556),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-6880,-3756),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
  0,
  0,
  0,
  ABISELECT(-8448,-4612),
  ABISELECT(52208,28432),
  ABISELECT(-1568,-856),
  ABISELECT(-2208,-1208),
  ABISELECT(-2080,-1128),
  ABISELECT(-1952,-1056),
  ABISELECT(-8448,-4612),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C16D1Ev,_ZTv0_n32_N8S2488C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C16D0Ev,_ZTv0_n32_N8S2488C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
  0,
  ABISELECT(-60656,-33044),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-74624,-40636),
  ABISELECT(-67744,-36880),
  ABISELECT(-68384,-37232),
  ABISELECT(-68256,-37152),
  ABISELECT(-68128,-37080),
  ABISELECT(-74624,-40636),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C16D1Ev,_ZTv0_n28_N8S2488C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C16D0Ev,_ZTv0_n28_N8S2488C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
  ABISELECT(-68672,-37392),
  ABISELECT(-75040,-40876),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S2488C16[];
extern void _ZN8S2488C17D1Ev();
extern void _ZN8S2488C17D0Ev();
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C17__8S2488C16[] = {
  ABISELECT(71840,39092),
  ABISELECT(57872,31500),
  ABISELECT(5664,3068),
  ABISELECT(4096,2212),
  ABISELECT(3712,2012),
  ABISELECT(3584,1940),
  ABISELECT(3456,1860),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN8S2488C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C17D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
};
extern void _ZN8S2488C19D1Ev();
extern void _ZN8S2488C19D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C198S2488C17__8S2488C16[] = {
  ABISELECT(4000,2168),
  ABISELECT(3360,1816),
  ABISELECT(3488,1896),
  ABISELECT(3616,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN8S2488C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C108S2488C198S2488C17__8S2488C16[] = {
  ABISELECT(4000,2168),
  ABISELECT(3360,1816),
  ABISELECT(3488,1896),
  ABISELECT(3616,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C108S2488C198S2488C17__8S2488C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-3616,-1968),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZThn3360_N8S2488C10D1Ev,_ZThn1816_N8S2488C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void ABISELECT(_ZThn3360_N8S2488C10D0Ev,_ZThn1816_N8S2488C10D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C108S2488C198S2488C17__8S2488C16[] = {
  0,
  ABISELECT(-3360,-1816),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(-3360,-1816),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C108S2488C198S2488C17__8S2488C16[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-4000,-2168),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C198S2488C17__A2__8S2488C16[] = {
  ABISELECT(3072,1656),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev)();
extern void ABISELECT(_ZThn3360_N8S2488C19D1Ev,_ZThn1816_N8S2488C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev)();
extern void ABISELECT(_ZThn3360_N8S2488C19D0Ev,_ZThn1816_N8S2488C19D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C198S2488C17__8S2488C16[] = {
  0,
  ABISELECT(-3360,-1816),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(-3360,-1816),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C198S2488C17__8S2488C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-3616,-1968),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C198S2488C17__8S2488C16[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-4000,-2168),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A__8S2488C198S2488C17__8S2488C16[] = {
  ABISELECT(3072,1656),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C21D1Ev();
extern void _ZN8S2488C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C218S2488C17__8S2488C16[] = {
  ABISELECT(69136,37632),
  ABISELECT(1392,752),
  ABISELECT(752,400),
  ABISELECT(880,480),
  ABISELECT(1008,552),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN8S2488C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C21D0Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C218S2488C17__8S2488C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-1008,-552),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev)();
extern void ABISELECT(_ZThn752_N8S2488C21D1Ev,_ZThn400_N8S2488C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev)();
extern void ABISELECT(_ZThn752_N8S2488C21D0Ev,_ZThn400_N8S2488C21D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C218S2488C17__8S2488C16[] = {
  0,
  ABISELECT(-752,-400),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(-752,-400),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C218S2488C17__8S2488C16[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-1392,-752),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev)();
extern void ABISELECT(_ZThn69136_N8S2488C21D1Ev,_ZThn37632_N8S2488C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev)();
extern void ABISELECT(_ZThn69136_N8S2488C21D0Ev,_ZThn37632_N8S2488C21D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__8S2488C218S2488C17__8S2488C16[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-69136,-37632),
  ABISELECT(-67744,-36880),
  ABISELECT(-68384,-37232),
  ABISELECT(-68256,-37152),
  ABISELECT(-68128,-37080),
  ABISELECT(-69136,-37632),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A2__8S2488C218S2488C17__8S2488C16[] = {
  ABISELECT(-68672,-37392),
  ABISELECT(-69552,-37872),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZThn96_N8S2488C17D1Ev,_ZThn44_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S2488C17D0Ev,_ZThn44_N8S2488C17D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A__8S2488C17__8S2488C16[] = {
  ABISELECT(4000,2168),
  ABISELECT(3360,1816),
  ABISELECT(3488,1896),
  ABISELECT(3616,1968),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C17D1Ev,_ZThn44_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C17D0Ev,_ZThn44_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn3456_N8S2488C17D1Ev,_ZThn1860_N8S2488C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev)();
extern void ABISELECT(_ZThn3456_N8S2488C17D0Ev,_ZThn1860_N8S2488C17D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C17__8S2488C16[] = {
  0,
  ABISELECT(-3456,-1860),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(-3456,-1860),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C17__8S2488C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-3712,-2012),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C17__8S2488C16[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-4096,-2212),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A2__8S2488C17__8S2488C16[] = {
  ABISELECT(3072,1656),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn5664_N8S2488C17D1Ev,_ZThn3068_N8S2488C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev)();
extern void ABISELECT(_ZThn5664_N8S2488C17D0Ev,_ZThn3068_N8S2488C17D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C17__8S2488C16[] = {
  0,
  0,
  0,
  ABISELECT(-5664,-3068),
  ABISELECT(52208,28432),
  ABISELECT(-1568,-856),
  ABISELECT(-2208,-1208),
  ABISELECT(-2080,-1128),
  ABISELECT(-1952,-1056),
  ABISELECT(-5664,-3068),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C17__8S2488C16[] = {
  0,
  ABISELECT(-57872,-31500),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void ABISELECT(_ZThn2704_N8S2488C17D1Ev,_ZThn1460_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2488C17D0Ev,_ZThn1460_N8S2488C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2488C21__8S2488C17__8S2488C16[] = {
  ABISELECT(69136,37632),
  ABISELECT(1392,752),
  ABISELECT(752,400),
  ABISELECT(880,480),
  ABISELECT(1008,552),
  ABISELECT(-2704,-1460),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C17D1Ev,_ZThn1460_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C17D0Ev,_ZThn1460_N8S2488C17D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn71840_N8S2488C17D1Ev,_ZThn39092_N8S2488C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev)();
extern void ABISELECT(_ZThn71840_N8S2488C17D0Ev,_ZThn39092_N8S2488C17D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C17__8S2488C16[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-71840,-39092),
  ABISELECT(-67744,-36880),
  ABISELECT(-68384,-37232),
  ABISELECT(-68256,-37152),
  ABISELECT(-68128,-37080),
  ABISELECT(-71840,-39092),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C17__8S2488C16[] = {
  ABISELECT(-68672,-37392),
  ABISELECT(-72256,-39332),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C8D1Ev();
extern void _ZN7S2488C8D0Ev();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C16[] = {
  ABISELECT(256,152),
  ABISELECT(128,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C8__8S2488C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C16[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C16[] = {
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C5[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C67S2488C5__A1__8S2488C16[] = {
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C20D1Ev();
extern void _ZN8S2488C20D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C16[] = {
  ABISELECT(52208,28432),
  ABISELECT(-1568,-856),
  ABISELECT(-2208,-1208),
  ABISELECT(-2080,-1128),
  ABISELECT(-1952,-1056),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN8S2488C20D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C20D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN7S2488C9D1Ev();
extern void _ZN7S2488C9D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C98S2488C20__8S2488C16[] = {
  ABISELECT(-1568,-856),
  ABISELECT(-2208,-1208),
  ABISELECT(-2080,-1128),
  ABISELECT(-1952,-1056),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C107S2488C98S2488C20__A1__8S2488C16[] = {
  ABISELECT(-1568,-856),
  ABISELECT(-2208,-1208),
  ABISELECT(-2080,-1128),
  ABISELECT(-1952,-1056),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C107S2488C98S2488C20__A1__8S2488C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(1952,1056),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C107S2488C98S2488C20__A1__8S2488C16[] = {
  0,
  ABISELECT(2208,1208),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(2208,1208),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C107S2488C98S2488C20__A1__8S2488C16[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(1568,856),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C98S2488C20__8S2488C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(1952,1056),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__7S2488C98S2488C20__8S2488C16[] = {
  0,
  ABISELECT(2208,1208),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(2208,1208),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__7S2488C98S2488C20__8S2488C16[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(1568,856),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C20__8S2488C16[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(1568,856),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A1__8S2488C20__8S2488C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(1952,1056),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C20D1Ev,_ZTv0_n20_N8S2488C20D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C20D0Ev,_ZTv0_n20_N8S2488C20D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C20__8S2488C16[] = {
  0,
  ABISELECT(2208,1208),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(2208,1208),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C20D1Ev,_ZTv0_n20_N8S2488C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C20D0Ev,_ZTv0_n20_N8S2488C20D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C20__8S2488C16[] = {
  0,
  ABISELECT(-52208,-28432),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void _ZN8S2488C19D1Ev();
extern void _ZN8S2488C19D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C16[] = {
  ABISELECT(-67744,-36880),
  ABISELECT(-68384,-37232),
  ABISELECT(-68256,-37152),
  ABISELECT(-68128,-37080),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN8S2488C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C108S2488C19__A2__8S2488C16[] = {
  ABISELECT(-67744,-36880),
  ABISELECT(-68384,-37232),
  ABISELECT(-68256,-37152),
  ABISELECT(-68128,-37080),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C108S2488C19__A2__8S2488C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(68128,37080),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C108S2488C19__A2__8S2488C16[] = {
  0,
  ABISELECT(68384,37232),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(68384,37232),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C108S2488C19__A2__8S2488C16[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(67744,36880),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C16[] = {
  ABISELECT(-68672,-37392),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C19__A1__8S2488C16[] = {
  0,
  ABISELECT(68384,37232),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(68384,37232),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C19__A1__8S2488C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(68128,37080),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C19__A1__8S2488C16[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(67744,36880),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A__8S2488C19__A1__8S2488C16[] = {
  ABISELECT(-68672,-37392),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
static  VTT_ENTRY vtt_S2488C16[] = {
  {&(_ZTV8S2488C16[10]),  10,129},
  {&(_ZTV8S2488C16[30]),  30,129},
  {&(_ZTV8S2488C16[40]),  40,129},
  {&(_ZTV8S2488C16[66]),  66,129},
  {&(_ZTV8S2488C16[74]),  74,129},
  {&(_ZTV8S2488C16[82]),  82,129},
  {&(_ZTV8S2488C16[49]),  49,129},
  {&(_ZTV8S2488C16[96]),  96,129},
  {&(_ZTV8S2488C16[104]),  104,129},
  {&(_ZTV8S2488C16[58]),  58,129},
  {&(_ZTV8S2488C16[118]),  118,129},
  {&(_ZTV8S2488C16[127]),  127,129},
  {&(_tg__ZTV8S2488C17__8S2488C16[9]),  9,13},
  {&(_tg__ZTV8S2488C198S2488C17__8S2488C16[6]),  6,12},
  {&(_tg__ZTV8S2488C108S2488C198S2488C17__8S2488C16[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C108S2488C198S2488C17__8S2488C16[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C108S2488C198S2488C17__8S2488C16[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C108S2488C198S2488C17__8S2488C16[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C198S2488C17__A2__8S2488C16[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C198S2488C17__8S2488C16[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C198S2488C17__8S2488C16[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C198S2488C17__8S2488C16[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A__8S2488C198S2488C17__8S2488C16[3]),  3,5},
  {&(_tg__ZTV8S2488C218S2488C17__8S2488C16[7]),  7,9},
  {&(_tg__ZTV7S2488C6__8S2488C218S2488C17__8S2488C16[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C218S2488C17__8S2488C16[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C218S2488C17__8S2488C16[6]),  6,9},
  {&(_tg__ZTV8S2488C19__8S2488C218S2488C17__8S2488C16[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A2__8S2488C218S2488C17__8S2488C16[3]),  3,5},
  {&(_tg__ZTV8S2488C19__A__8S2488C17__8S2488C16[6]),  6,12},
  {&(_tg__ZTV7S2488C8__8S2488C17__8S2488C16[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C17__8S2488C16[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C17__8S2488C16[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C19__A2__8S2488C17__8S2488C16[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C17__8S2488C16[11]),  11,16},
  {&(_tg__ZTV8S2488C13__8S2488C17__8S2488C16[3]),  3,4},
  {&(_tg__ZTV8S2488C21__8S2488C17__8S2488C16[7]),  7,9},
  {&(_tg__ZTV8S2488C19__A1__8S2488C17__8S2488C16[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C17__8S2488C16[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C16[4]),  4,7},
  {&(_tg__ZTV7S2488C6__7S2488C8__8S2488C16[5]),  5,7},
  {&(_tg__ZTV7S2488C6__8S2488C16[3]),  3,5},
  {&(_tg__ZTV7S2488C5__8S2488C16[3]),  3,6},
  {&(_tg__ZTV7S2488C67S2488C5__A1__8S2488C16[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C16[7]),  7,12},
  {&(_tg__ZTV7S2488C98S2488C20__8S2488C16[6]),  6,11},
  {&(_tg__ZTV8S2488C107S2488C98S2488C20__A1__8S2488C16[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C107S2488C98S2488C20__A1__8S2488C16[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C107S2488C98S2488C20__A1__8S2488C16[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C107S2488C98S2488C20__A1__8S2488C16[6]),  6,9},
  {&(_tg__ZTV7S2488C6__7S2488C98S2488C20__8S2488C16[5]),  5,7},
  {&(_tg__ZTV7S2488C8__7S2488C98S2488C20__8S2488C16[6]),  6,9},
  {&(_tg__ZTV7S2488C5__7S2488C98S2488C20__8S2488C16[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C20__8S2488C16[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A1__8S2488C20__8S2488C16[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C20__8S2488C16[6]),  6,9},
  {&(_tg__ZTV8S2488C13__8S2488C20__8S2488C16[3]),  3,4},
  {&(_tg__ZTV8S2488C19__A1__8S2488C16[6]),  6,12},
  {&(_tg__ZTV8S2488C108S2488C19__A2__8S2488C16[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C108S2488C19__A2__8S2488C16[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C108S2488C19__A2__8S2488C16[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C108S2488C19__A2__8S2488C16[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C16[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C19__A1__8S2488C16[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C19__A1__8S2488C16[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C19__A1__8S2488C16[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A__8S2488C19__A1__8S2488C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2488C16[];
extern  VTBL_ENTRY _ZTV8S2488C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C16[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn71840_N8S2488C17D0Ev,_ZThn39092_N8S2488C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn71840_N8S2488C17D1Ev,_ZThn39092_N8S2488C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5664_N8S2488C17D0Ev,_ZThn3068_N8S2488C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5664_N8S2488C17D1Ev,_ZThn3068_N8S2488C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N8S2488C17D0Ev,_ZThn1860_N8S2488C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N8S2488C17D1Ev,_ZThn1860_N8S2488C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn69136_N8S2488C21D0Ev,_ZThn37632_N8S2488C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn69136_N8S2488C21D1Ev,_ZThn37632_N8S2488C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S2488C21D0Ev,_ZThn400_N8S2488C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S2488C21D1Ev,_ZThn400_N8S2488C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N8S2488C19D0Ev,_ZThn1816_N8S2488C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N8S2488C19D1Ev,_ZThn1816_N8S2488C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N8S2488C10D0Ev,_ZThn1816_N8S2488C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N8S2488C10D1Ev,_ZThn1816_N8S2488C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C16D0Ev,_ZTv0_n28_N8S2488C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74624_N8S2488C16D0Ev,_ZThn40636_N8S2488C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C16D1Ev,_ZTv0_n28_N8S2488C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74624_N8S2488C16D1Ev,_ZThn40636_N8S2488C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C16D0Ev,_ZTv0_n32_N8S2488C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8448_N8S2488C16D0Ev,_ZThn4612_N8S2488C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C16D1Ev,_ZTv0_n32_N8S2488C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8448_N8S2488C16D1Ev,_ZThn4612_N8S2488C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C16D0Ev,_ZTv0_n20_N8S2488C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6240_N8S2488C16D0Ev,_ZThn3404_N8S2488C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C16D1Ev,_ZTv0_n20_N8S2488C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6240_N8S2488C16D1Ev,_ZThn3404_N8S2488C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2488C16D0Ev,_ZTv0_n40_N8S2488C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2784_N8S2488C16D0Ev,_ZThn1544_N8S2488C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2488C16D1Ev,_ZTv0_n40_N8S2488C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2784_N8S2488C16D1Ev,_ZThn1544_N8S2488C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2488C16 = {  "S2488C16", // class name
  bases_S2488C16, 25,
  &(vtc_S2488C16[0]), // expected_vtbl_contents
  &(vtt_S2488C16[0]), // expected_vtt_contents
  ABISELECT(77232,42052), // object size
  NSPAIRA(_ZTI8S2488C16),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S2488C16),129, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2488C16),67, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2488C23  : virtual S2488C10 , virtual S2488C13 , S2488C17 {
  void *s2488c23f0[6];
  int s2488c23f1;
  short s2488c23f2;
  ::S2489C12_nt s2488c23f3;
  ::S2488C2 s2488c23f4;
  void *s2488c23f5;
  int s2488c23f6;
  int s2488c23f7;
  char s2488c23f8;
  char s2488c23f9;
  ::S2489C4 s2488c23f10;
  virtual  ~S2488C23(); // _ZN8S2488C23D2Ev
  S2488C23(); // tgen
};
//SIG(-1 S2488C23) C1{ VBC2{ BC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC5{ VBC3 v1 v2 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 Fl FU6} VBC7{ VBC3 VBC5 vd v3 FL FL FL Fl Fi FU6 Fc[10] Fi} VBC8{ BC3 BC5 v4 Fp FD FC3[7] FD FU4 Fs Fl Fl} vd v5 Fc Fi[7] Fl[5] Fl FL FL FU9{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} VBC10{ v6 FD FC11{ VBC8 VBC7 Fi Fp Fi FU6}[6] Fc Fp Fp Fi[6] Fi Fp Fl Fp Fi Fp Fp} BC12{ BC13{ vd m FU4} BC14{ VBC7 BC2 BC3 BC5 vd v7 v8 v9 FU6 Fi Fl Fc Fp FC8 Fs} VBC15{ VBC8 VBC5 VBC7 BC16{ BC2 vd v10 v11 Fp Fp Fp Fi FC17{} Fl Fl} VBC10 vd Fc Fs[3] FC18{ BC3 VBC5 VBC7 VBC8 VBC14 vd FL Fi Fp Fp Fl}[10] FC8 FL FL:5 Fi Fp[6] Fl[2] FL Fi} BC18 vd v12 v13 Fi FD Fl Fc:3 Fp FC5} vd Fp[6] Fi Fs FC17 FC19{ BC3 VBC8 VBC7 BC16 vd FD} Fp Fi Fi Fc Fc FU4}


 S2488C23 ::~S2488C23(){ note_dtor("S2488C23", this);}
S2488C23 ::S2488C23(){ note_ctor("S2488C23", this);} // tgen

static void Test_S2488C23()
{
  extern Class_Descriptor cd_S2488C23;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4851,10564)];
    init_test(&cd_S2488C23, buf);
    S2488C23 *dp, &lv = *(dp=new (buf) S2488C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(77600,42252), "sizeof(S2488C23)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2488C23)");
    /*is_ambiguous_... S2488C23::S2488C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*), ABISELECT(6336,3440), "S2488C23");
    /*is_ambiguous_... S2488C23::S2488C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*), ABISELECT(6992,3804), "S2488C23");
    check_base_class_offset(lv, (S2489C3*)(S2488C8*), ABISELECT(6992,3804), "S2488C23");
    check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C5*), ABISELECT(6992,3804), "S2488C23");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C19*)(S2488C17*), ABISELECT(6992,3804), "S2488C23");
    /*is_ambiguous_... S2488C23::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C19*), ABISELECT(6992,3804), "S2488C23");
    /*is_ambiguous_... S2488C23::S2488C10 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*), ABISELECT(6608,3604), "S2488C23");
    check_base_class_offset(lv, (S2488C6*)(S2488C8*), ABISELECT(6608,3604), "S2488C23");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(6608,3604), "S2488C23");
    /*is_ambiguous_... S2488C20::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C20*), ABISELECT(6608,3604), "S2488C23");
    /*is_ambiguous_... S2488C10::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(6608,3604), "S2488C23");
    /*is_ambiguous_... S2488C21::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C21*)(S2488C17*), ABISELECT(6608,3604), "S2488C23");
    /*is_ambiguous_... S2488C23::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C19*), ABISELECT(6608,3604), "S2488C23");
    /*is_ambiguous_... S2488C23::S2488C10 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C10*), ABISELECT(7120,3876), "S2488C23");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C19*)(S2488C17*), ABISELECT(7120,3876), "S2488C23");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(7120,3876), "S2488C23");
    check_base_class_offset(lv, (S2488C8*)(S2488C20*), ABISELECT(7120,3876), "S2488C23");
    check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(7120,3876), "S2488C23");
    check_base_class_offset(lv, (S2488C8*)(S2488C21*)(S2488C17*), ABISELECT(7120,3876), "S2488C23");
    /*is_ambiguous_... S2488C23::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C19*), ABISELECT(7120,3876), "S2488C23");
    /*is_ambiguous_... S2488C23::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C19*), ABISELECT(7120,3876), "S2488C23");
    /*is_ambiguous_... S2488C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C5*), ABISELECT(7632,4156), "S2488C23");
    check_base_class_offset(lv, (S2488C6*)(S2488C5*), ABISELECT(7248,3956), "S2488C23");
    /*is_ambiguous_... S2488C23::S2488C10 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C10*), ABISELECT(7248,3956), "S2488C23");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(7248,3956), "S2488C23");
    check_base_class_offset(lv, (S2488C5*)(S2488C20*), ABISELECT(7248,3956), "S2488C23");
    check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(7248,3956), "S2488C23");
    check_base_class_offset(lv, (S2488C5*)(S2488C21*)(S2488C17*), ABISELECT(7248,3956), "S2488C23");
    /*is_ambiguous_... S2488C23::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C19*), ABISELECT(7248,3956), "S2488C23");
    /*is_ambiguous_... S2488C23::S2488C10 */ AMB_check_base_class_offset(lv, (S2488C10*), ABISELECT(6320,3436), "S2488C23");
    check_base_class_offset(lv, (S2488C13*), ABISELECT(8816,4812), "S2488C23");
    check_base_class_offset(lv, (S2488C13*)(S2488C20*), ABISELECT(8816,4812), "S2488C23");
    check_base_class_offset(lv, (S2489C18*)(S2488C17*), 0, "S2488C23");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(112,48), "S2488C23");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(96,44), "S2488C23");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C19*)(S2488C17*), ABISELECT(384,212), "S2488C23");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C19*)(S2488C17*), ABISELECT(512,284), "S2488C23");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C19*)(S2488C17*), ABISELECT(96,44), "S2488C23");
    /*is_ambiguous_... S2488C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(22800,12408), "S2488C23");
    check_base_class_offset(lv, (S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(22784,12404), "S2488C23");
    check_base_class_offset(lv, (S2488C9*)(S2488C20*), ABISELECT(22784,12404), "S2488C23");
    check_base_class_offset(lv, (S2488C20*)(S2488C17*), ABISELECT(22784,12404), "S2488C23");
    /*is_ambiguous_... S2488C21::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C21*)(S2488C17*), ABISELECT(2720,1464), "S2488C23");
    /*is_ambiguous_... S2488C23::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C19*), ABISELECT(75008,40840), "S2488C23");
    /*is_ambiguous_... S2488C23::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C10*)(S2488C19*), ABISELECT(74992,40836), "S2488C23");
    /*is_ambiguous_... S2488C23::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C19*), ABISELECT(75280,41004), "S2488C23");
    /*is_ambiguous_... S2488C23::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C19*), ABISELECT(75408,41076), "S2488C23");
    check_base_class_offset(lv, (S2488C19*)(S2488C21*)(S2488C17*), ABISELECT(74992,40836), "S2488C23");
    check_base_class_offset(lv, (S2488C21*)(S2488C17*), ABISELECT(2704,1460), "S2488C23");
    check_base_class_offset(lv, (S2488C17*), 0, "S2488C23");
    check_field_offset(lv, s2488c23f0, ABISELECT(3456,1860), "S2488C23.s2488c23f0");
    check_field_offset(lv, s2488c23f1, ABISELECT(3504,1884), "S2488C23.s2488c23f1");
    check_field_offset(lv, s2488c23f2, ABISELECT(3508,1888), "S2488C23.s2488c23f2");
    check_field_offset(lv, s2488c23f3, ABISELECT(3510,1890), "S2488C23.s2488c23f3");
    check_field_offset(lv, s2488c23f4, ABISELECT(3520,1892), "S2488C23.s2488c23f4");
    check_field_offset(lv, s2488c23f5, ABISELECT(6208,3380), "S2488C23.s2488c23f5");
    check_field_offset(lv, s2488c23f6, ABISELECT(6216,3384), "S2488C23.s2488c23f6");
    check_field_offset(lv, s2488c23f7, ABISELECT(6220,3388), "S2488C23.s2488c23f7");
    check_field_offset(lv, s2488c23f8, ABISELECT(6224,3392), "S2488C23.s2488c23f8");
    check_field_offset(lv, s2488c23f9, ABISELECT(6225,3393), "S2488C23.s2488c23f9");
    check_field_offset(lv, s2488c23f10, ABISELECT(6240,3396), "S2488C23.s2488c23f10");
    test_class_info(&lv, &cd_S2488C23);
    dp->~S2488C23();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2488C23(Test_S2488C23, "S2488C23", ABISELECT(77600,42252));

#else // __cplusplus

extern void _ZN8S2488C23C1Ev();
extern void _ZN8S2488C23D2Ev();
Name_Map name_map_S2488C23[] = {
  NSPAIR(_ZN8S2488C23C1Ev),
  NSPAIR(_ZN8S2488C23D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C8;
extern VTBL_ENTRY _ZTI7S2488C8[];
extern  VTBL_ENTRY _ZTV7S2488C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C5;
extern VTBL_ENTRY _ZTI7S2488C5[];
extern  VTBL_ENTRY _ZTV7S2488C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C5[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2488C13;
extern VTBL_ENTRY _ZTI8S2488C13[];
extern  VTBL_ENTRY _ZTV8S2488C13[];
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C19;
extern VTBL_ENTRY _ZTI8S2488C19[];
extern  VTBL_ENTRY _ZTV8S2488C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C19[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2488C9;
extern VTBL_ENTRY _ZTI7S2488C9[];
extern  VTBL_ENTRY _ZTV7S2488C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C9[];
extern Class_Descriptor cd_S2488C20;
extern VTBL_ENTRY _ZTI8S2488C20[];
extern  VTBL_ENTRY _ZTV8S2488C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C20[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C19;
extern VTBL_ENTRY _ZTI8S2488C19[];
extern  VTBL_ENTRY _ZTV8S2488C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C19[];
extern Class_Descriptor cd_S2488C21;
extern VTBL_ENTRY _ZTI8S2488C21[];
extern  VTBL_ENTRY _ZTV8S2488C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C21[];
extern Class_Descriptor cd_S2488C17;
extern VTBL_ENTRY _ZTI8S2488C17[];
extern  VTBL_ENTRY _ZTV8S2488C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C17[];
static Base_Class bases_S2488C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(6336,3440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(6992,3804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2488C6,    ABISELECT(6608,3604), //bcp->offset
    51, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2488C8,    ABISELECT(7120,3876), //bcp->offset
    58, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(7632,4156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(7248,3956), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2488C5,    ABISELECT(7248,3956), //bcp->offset
    67, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2488C10,    ABISELECT(6320,3436), //bcp->offset
    40, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2488C13,    ABISELECT(8816,4812), //bcp->offset
    76, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(112,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(384,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(512,284), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2488C19,    ABISELECT(96,44), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(22800,12408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(22784,12404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2488C9,    ABISELECT(22784,12404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2488C20,    ABISELECT(22784,12404), //bcp->offset
    80, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(2720,1464), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(75008,40840), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(74992,40836), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(75280,41004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(75408,41076), //bcp->offset
    115, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2488C19,    ABISELECT(74992,40836), //bcp->offset
    96, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S2488C21,    ABISELECT(2704,1460), //bcp->offset
    31, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S2488C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2488C23[];
extern void _ZN8S2488C23D1Ev();
extern void _ZN8S2488C23D0Ev();
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
extern void ABISELECT(_ZThn96_N8S2488C23D1Ev,_ZThn44_N8S2488C23D1Ev)();
extern void ABISELECT(_ZThn96_N8S2488C23D0Ev,_ZThn44_N8S2488C23D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void ABISELECT(_ZThn2704_N8S2488C23D1Ev,_ZThn1460_N8S2488C23D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2488C23D0Ev,_ZThn1460_N8S2488C23D0Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev)();
extern void ABISELECT(_ZThn6320_N8S2488C23D1Ev,_ZThn3436_N8S2488C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev)();
extern void ABISELECT(_ZThn6320_N8S2488C23D0Ev,_ZThn3436_N8S2488C23D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S2488C23D1Ev,_ZTv0_n20_N8S2488C23D1Ev)();
extern void ABISELECT(_ZThn7120_N8S2488C23D1Ev,_ZThn3876_N8S2488C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C23D0Ev,_ZTv0_n20_N8S2488C23D0Ev)();
extern void ABISELECT(_ZThn7120_N8S2488C23D0Ev,_ZThn3876_N8S2488C23D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
extern void _ZN8S2488C133v11Ev();
extern void ABISELECT(_ZTv0_n64_N8S2488C23D1Ev,_ZTv0_n32_N8S2488C23D1Ev)();
extern void ABISELECT(_ZThn22784_N8S2488C23D1Ev,_ZThn12404_N8S2488C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2488C23D0Ev,_ZTv0_n32_N8S2488C23D0Ev)();
extern void ABISELECT(_ZThn22784_N8S2488C23D0Ev,_ZThn12404_N8S2488C23D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
extern void ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev)();
extern void ABISELECT(_ZThn74992_N8S2488C23D1Ev,_ZThn40836_N8S2488C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev)();
extern void ABISELECT(_ZThn74992_N8S2488C23D0Ev,_ZThn40836_N8S2488C23D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY vtc_S2488C23[] = {
  ABISELECT(6320,3436),
  ABISELECT(74992,40836),
  ABISELECT(8816,4812),
  ABISELECT(22784,12404),
  ABISELECT(7248,3956),
  ABISELECT(6608,3604),
  ABISELECT(6992,3804),
  ABISELECT(7120,3876),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN8S2488C23D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C23D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
  ABISELECT(7152,3912),
  ABISELECT(7024,3832),
  ABISELECT(6896,3760),
  ABISELECT(6512,3560),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C23D1Ev,_ZThn44_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C23D0Ev,_ZThn44_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
  ABISELECT(6480,3520),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  ABISELECT(72288,39376),
  ABISELECT(4544,2496),
  ABISELECT(4416,2416),
  ABISELECT(4288,2344),
  ABISELECT(3904,2144),
  ABISELECT(-2704,-1460),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C23D1Ev,_ZThn1460_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C23D0Ev,_ZThn1460_N8S2488C23D0Ev),
  0,
  ABISELECT(-6320,-3436),
  ABISELECT(928,520),
  ABISELECT(800,440),
  ABISELECT(672,368),
  ABISELECT(288,168),
  ABISELECT(-6320,-3436),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-6608,-3604),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  0,
  ABISELECT(-7120,-3876),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-7120,-3876),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C23D1Ev,_ZTv0_n20_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C23D0Ev,_ZTv0_n20_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-7248,-3956),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
  0,
  ABISELECT(-8816,-4812),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
  0,
  0,
  0,
  ABISELECT(-22784,-12404),
  ABISELECT(-13968,-7592),
  ABISELECT(-15536,-8448),
  ABISELECT(-15664,-8528),
  ABISELECT(-15792,-8600),
  ABISELECT(-16176,-8800),
  ABISELECT(-22784,-12404),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C23D1Ev,_ZTv0_n32_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C23D0Ev,_ZTv0_n32_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-74992,-40836),
  ABISELECT(-67744,-36880),
  ABISELECT(-67872,-36960),
  ABISELECT(-68000,-37032),
  ABISELECT(-68384,-37232),
  ABISELECT(-74992,-40836),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
  ABISELECT(-68416,-37272),
  ABISELECT(-75408,-41076),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S2488C23[];
extern void _ZN8S2488C17D1Ev();
extern void _ZN8S2488C17D0Ev();
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C17__8S2488C23[] = {
  ABISELECT(74992,40836),
  ABISELECT(8816,4812),
  ABISELECT(22784,12404),
  ABISELECT(7248,3956),
  ABISELECT(6608,3604),
  ABISELECT(6992,3804),
  ABISELECT(7120,3876),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN8S2488C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C17D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
};
extern void _ZN8S2488C19D1Ev();
extern void _ZN8S2488C19D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C198S2488C17__8S2488C23[] = {
  ABISELECT(7152,3912),
  ABISELECT(7024,3832),
  ABISELECT(6896,3760),
  ABISELECT(6512,3560),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN8S2488C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C108S2488C198S2488C17__A1__8S2488C23[] = {
  ABISELECT(7152,3912),
  ABISELECT(7024,3832),
  ABISELECT(6896,3760),
  ABISELECT(6512,3560),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C108S2488C198S2488C17__A1__8S2488C23[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-6512,-3560),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZThn7024_N8S2488C10D1Ev,_ZThn3832_N8S2488C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void ABISELECT(_ZThn7024_N8S2488C10D0Ev,_ZThn3832_N8S2488C10D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C108S2488C198S2488C17__A1__8S2488C23[] = {
  0,
  ABISELECT(-7024,-3832),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-7024,-3832),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C108S2488C198S2488C17__A1__8S2488C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-7152,-3912),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C198S2488C17__A2__8S2488C23[] = {
  ABISELECT(6480,3520),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev)();
extern void ABISELECT(_ZThn7024_N8S2488C19D1Ev,_ZThn3832_N8S2488C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev)();
extern void ABISELECT(_ZThn7024_N8S2488C19D0Ev,_ZThn3832_N8S2488C19D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C198S2488C17__8S2488C23[] = {
  0,
  ABISELECT(-7024,-3832),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-7024,-3832),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C198S2488C17__8S2488C23[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-6512,-3560),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C198S2488C17__8S2488C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-7152,-3912),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A__8S2488C198S2488C17__8S2488C23[] = {
  ABISELECT(6480,3520),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C21D1Ev();
extern void _ZN8S2488C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C218S2488C17__8S2488C23[] = {
  ABISELECT(72288,39376),
  ABISELECT(4544,2496),
  ABISELECT(4416,2416),
  ABISELECT(4288,2344),
  ABISELECT(3904,2144),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN8S2488C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C21D0Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C218S2488C17__8S2488C23[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-3904,-2144),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev)();
extern void ABISELECT(_ZThn4416_N8S2488C21D1Ev,_ZThn2416_N8S2488C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev)();
extern void ABISELECT(_ZThn4416_N8S2488C21D0Ev,_ZThn2416_N8S2488C21D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C218S2488C17__8S2488C23[] = {
  0,
  ABISELECT(-4416,-2416),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-4416,-2416),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C218S2488C17__8S2488C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-4544,-2496),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev)();
extern void ABISELECT(_ZThn72288_N8S2488C21D1Ev,_ZThn39376_N8S2488C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev)();
extern void ABISELECT(_ZThn72288_N8S2488C21D0Ev,_ZThn39376_N8S2488C21D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__8S2488C218S2488C17__8S2488C23[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-72288,-39376),
  ABISELECT(-67744,-36880),
  ABISELECT(-67872,-36960),
  ABISELECT(-68000,-37032),
  ABISELECT(-68384,-37232),
  ABISELECT(-72288,-39376),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A2__8S2488C218S2488C17__8S2488C23[] = {
  ABISELECT(-68416,-37272),
  ABISELECT(-72704,-39616),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZThn96_N8S2488C17D1Ev,_ZThn44_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S2488C17D0Ev,_ZThn44_N8S2488C17D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A__8S2488C17__8S2488C23[] = {
  ABISELECT(7152,3912),
  ABISELECT(7024,3832),
  ABISELECT(6896,3760),
  ABISELECT(6512,3560),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C17D1Ev,_ZThn44_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C17D0Ev,_ZThn44_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn7120_N8S2488C17D1Ev,_ZThn3876_N8S2488C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev)();
extern void ABISELECT(_ZThn7120_N8S2488C17D0Ev,_ZThn3876_N8S2488C17D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C17__8S2488C23[] = {
  0,
  ABISELECT(-7120,-3876),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-7120,-3876),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C17__8S2488C23[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-6608,-3604),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C17__8S2488C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-7248,-3956),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A2__8S2488C17__8S2488C23[] = {
  ABISELECT(6480,3520),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn22784_N8S2488C17D1Ev,_ZThn12404_N8S2488C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev)();
extern void ABISELECT(_ZThn22784_N8S2488C17D0Ev,_ZThn12404_N8S2488C17D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C17__8S2488C23[] = {
  0,
  0,
  0,
  ABISELECT(-22784,-12404),
  ABISELECT(-13968,-7592),
  ABISELECT(-15536,-8448),
  ABISELECT(-15664,-8528),
  ABISELECT(-15792,-8600),
  ABISELECT(-16176,-8800),
  ABISELECT(-22784,-12404),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C17__8S2488C23[] = {
  0,
  ABISELECT(-8816,-4812),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void ABISELECT(_ZThn2704_N8S2488C17D1Ev,_ZThn1460_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2488C17D0Ev,_ZThn1460_N8S2488C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2488C21__8S2488C17__8S2488C23[] = {
  ABISELECT(72288,39376),
  ABISELECT(4544,2496),
  ABISELECT(4416,2416),
  ABISELECT(4288,2344),
  ABISELECT(3904,2144),
  ABISELECT(-2704,-1460),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C17D1Ev,_ZThn1460_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C17D0Ev,_ZThn1460_N8S2488C17D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn74992_N8S2488C17D1Ev,_ZThn40836_N8S2488C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev)();
extern void ABISELECT(_ZThn74992_N8S2488C17D0Ev,_ZThn40836_N8S2488C17D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C17__8S2488C23[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-74992,-40836),
  ABISELECT(-67744,-36880),
  ABISELECT(-67872,-36960),
  ABISELECT(-68000,-37032),
  ABISELECT(-68384,-37232),
  ABISELECT(-74992,-40836),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C17__8S2488C23[] = {
  ABISELECT(-68416,-37272),
  ABISELECT(-75408,-41076),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C10__8S2488C23[] = {
  ABISELECT(928,520),
  ABISELECT(800,440),
  ABISELECT(672,368),
  ABISELECT(288,168),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C10__8S2488C23[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZThn800_N8S2488C10D1Ev,_ZThn440_N8S2488C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void ABISELECT(_ZThn800_N8S2488C10D0Ev,_ZThn440_N8S2488C10D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C10__8S2488C23[] = {
  0,
  ABISELECT(-800,-440),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-800,-440),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C10__8S2488C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-928,-520),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C23[] = {
  ABISELECT(384,200),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C8D1Ev();
extern void _ZN7S2488C8D0Ev();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C23[] = {
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C8__8S2488C23[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(512,272),
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C23[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C5[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C67S2488C5__A1__8S2488C23[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C20D1Ev();
extern void _ZN8S2488C20D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C23[] = {
  ABISELECT(-13968,-7592),
  ABISELECT(-15536,-8448),
  ABISELECT(-15664,-8528),
  ABISELECT(-15792,-8600),
  ABISELECT(-16176,-8800),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN8S2488C20D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C20D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN7S2488C9D1Ev();
extern void _ZN7S2488C9D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C98S2488C20__8S2488C23[] = {
  ABISELECT(-15536,-8448),
  ABISELECT(-15664,-8528),
  ABISELECT(-15792,-8600),
  ABISELECT(-16176,-8800),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C107S2488C98S2488C20__A2__8S2488C23[] = {
  ABISELECT(-15536,-8448),
  ABISELECT(-15664,-8528),
  ABISELECT(-15792,-8600),
  ABISELECT(-16176,-8800),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C107S2488C98S2488C20__A2__8S2488C23[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(16176,8800),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C107S2488C98S2488C20__A2__8S2488C23[] = {
  0,
  ABISELECT(15664,8528),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(15664,8528),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C107S2488C98S2488C20__A2__8S2488C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(15536,8448),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C98S2488C20__8S2488C23[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(16176,8800),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__7S2488C98S2488C20__8S2488C23[] = {
  0,
  ABISELECT(15664,8528),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(15664,8528),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__7S2488C98S2488C20__8S2488C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(15536,8448),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C20__8S2488C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(15536,8448),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A1__8S2488C20__8S2488C23[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(16176,8800),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C20D1Ev,_ZTv0_n20_N8S2488C20D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C20D0Ev,_ZTv0_n20_N8S2488C20D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C20__8S2488C23[] = {
  0,
  ABISELECT(15664,8528),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(15664,8528),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C20D1Ev,_ZTv0_n20_N8S2488C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C20D0Ev,_ZTv0_n20_N8S2488C20D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C20__8S2488C23[] = {
  0,
  ABISELECT(13968,7592),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void _ZN8S2488C19D1Ev();
extern void _ZN8S2488C19D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C23[] = {
  ABISELECT(-67744,-36880),
  ABISELECT(-67872,-36960),
  ABISELECT(-68000,-37032),
  ABISELECT(-68384,-37232),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN8S2488C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C108S2488C19__A3__8S2488C23[] = {
  ABISELECT(-67744,-36880),
  ABISELECT(-67872,-36960),
  ABISELECT(-68000,-37032),
  ABISELECT(-68384,-37232),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C108S2488C19__A3__8S2488C23[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(68384,37232),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C108S2488C19__A3__8S2488C23[] = {
  0,
  ABISELECT(67872,36960),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(67872,36960),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C108S2488C19__A3__8S2488C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(67744,36880),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C23[] = {
  ABISELECT(-68416,-37272),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C19__A1__8S2488C23[] = {
  0,
  ABISELECT(67872,36960),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(67872,36960),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C19__A1__8S2488C23[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(68384,37232),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C19__A1__8S2488C23[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(67744,36880),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A__8S2488C19__A1__8S2488C23[] = {
  ABISELECT(-68416,-37272),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
static  VTT_ENTRY vtt_S2488C23[] = {
  {&(_ZTV8S2488C23[10]),  10,120},
  {&(_tg__ZTV8S2488C17__8S2488C23[9]),  9,13},
  {&(_tg__ZTV8S2488C198S2488C17__8S2488C23[6]),  6,12},
  {&(_tg__ZTV8S2488C108S2488C198S2488C17__A1__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C108S2488C198S2488C17__A1__8S2488C23[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C108S2488C198S2488C17__A1__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C108S2488C198S2488C17__A1__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C198S2488C17__A2__8S2488C23[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C198S2488C17__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C198S2488C17__8S2488C23[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C198S2488C17__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A__8S2488C198S2488C17__8S2488C23[3]),  3,5},
  {&(_tg__ZTV8S2488C218S2488C17__8S2488C23[7]),  7,9},
  {&(_tg__ZTV7S2488C6__8S2488C218S2488C17__8S2488C23[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C218S2488C17__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C218S2488C17__8S2488C23[6]),  6,9},
  {&(_tg__ZTV8S2488C19__8S2488C218S2488C17__8S2488C23[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A2__8S2488C218S2488C17__8S2488C23[3]),  3,5},
  {&(_tg__ZTV8S2488C19__A__8S2488C17__8S2488C23[6]),  6,12},
  {&(_tg__ZTV7S2488C8__8S2488C17__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C17__8S2488C23[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C17__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C19__A2__8S2488C17__8S2488C23[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C17__8S2488C23[11]),  11,16},
  {&(_tg__ZTV8S2488C13__8S2488C17__8S2488C23[3]),  3,4},
  {&(_tg__ZTV8S2488C21__8S2488C17__8S2488C23[7]),  7,9},
  {&(_tg__ZTV8S2488C19__A1__8S2488C17__8S2488C23[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C17__8S2488C23[3]),  3,5},
  {&(_ZTV8S2488C23[48]),  48,120},
  {&(_ZTV8S2488C23[56]),  56,120},
  {&(_ZTV8S2488C23[64]),  64,120},
  {&(_ZTV8S2488C23[73]),  73,120},
  {&(_ZTV8S2488C23[79]),  79,120},
  {&(_ZTV8S2488C23[20]),  20,120},
  {&(_ZTV8S2488C23[29]),  29,120},
  {&(_ZTV8S2488C23[91]),  91,120},
  {&(_ZTV8S2488C23[38]),  38,120},
  {&(_ZTV8S2488C23[109]),  109,120},
  {&(_ZTV8S2488C23[118]),  118,120},
  {&(_tg__ZTV8S2488C10__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C10__8S2488C23[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C10__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C10__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C23[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C23[4]),  4,7},
  {&(_tg__ZTV7S2488C6__7S2488C8__8S2488C23[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C23[3]),  3,6},
  {&(_tg__ZTV7S2488C67S2488C5__A1__8S2488C23[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C23[7]),  7,12},
  {&(_tg__ZTV7S2488C98S2488C20__8S2488C23[6]),  6,11},
  {&(_tg__ZTV8S2488C107S2488C98S2488C20__A2__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C107S2488C98S2488C20__A2__8S2488C23[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C107S2488C98S2488C20__A2__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C107S2488C98S2488C20__A2__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C6__7S2488C98S2488C20__8S2488C23[5]),  5,7},
  {&(_tg__ZTV7S2488C8__7S2488C98S2488C20__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C5__7S2488C98S2488C20__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C20__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A1__8S2488C20__8S2488C23[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C20__8S2488C23[6]),  6,9},
  {&(_tg__ZTV8S2488C13__8S2488C20__8S2488C23[3]),  3,4},
  {&(_tg__ZTV8S2488C19__A1__8S2488C23[6]),  6,12},
  {&(_tg__ZTV8S2488C108S2488C19__A3__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C108S2488C19__A3__8S2488C23[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C108S2488C19__A3__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C108S2488C19__A3__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C23[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C19__A1__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C19__A1__8S2488C23[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C19__A1__8S2488C23[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A__8S2488C19__A1__8S2488C23[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2488C23[];
extern  VTBL_ENTRY _ZTV8S2488C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C23[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74992_N8S2488C17D0Ev,_ZThn40836_N8S2488C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74992_N8S2488C17D1Ev,_ZThn40836_N8S2488C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22784_N8S2488C17D0Ev,_ZThn12404_N8S2488C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22784_N8S2488C17D1Ev,_ZThn12404_N8S2488C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2488C17D0Ev,_ZThn3876_N8S2488C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2488C17D1Ev,_ZThn3876_N8S2488C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72288_N8S2488C21D0Ev,_ZThn39376_N8S2488C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72288_N8S2488C21D1Ev,_ZThn39376_N8S2488C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4416_N8S2488C21D0Ev,_ZThn2416_N8S2488C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4416_N8S2488C21D1Ev,_ZThn2416_N8S2488C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7024_N8S2488C19D0Ev,_ZThn3832_N8S2488C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7024_N8S2488C19D1Ev,_ZThn3832_N8S2488C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S2488C10D0Ev,_ZThn440_N8S2488C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7024_N8S2488C10D0Ev,_ZThn3832_N8S2488C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S2488C10D1Ev,_ZThn440_N8S2488C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7024_N8S2488C10D1Ev,_ZThn3832_N8S2488C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C23D0Ev,_ZTv0_n32_N8S2488C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22784_N8S2488C23D0Ev,_ZThn12404_N8S2488C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C23D1Ev,_ZTv0_n32_N8S2488C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22784_N8S2488C23D1Ev,_ZThn12404_N8S2488C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C23D0Ev,_ZTv0_n20_N8S2488C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2488C23D0Ev,_ZThn3876_N8S2488C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C23D1Ev,_ZTv0_n20_N8S2488C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2488C23D1Ev,_ZThn3876_N8S2488C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74992_N8S2488C23D0Ev,_ZThn40836_N8S2488C23D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N8S2488C23D0Ev,_ZThn3436_N8S2488C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74992_N8S2488C23D1Ev,_ZThn40836_N8S2488C23D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N8S2488C23D1Ev,_ZThn3436_N8S2488C23D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2488C23 = {  "S2488C23", // class name
  bases_S2488C23, 27,
  &(vtc_S2488C23[0]), // expected_vtbl_contents
  &(vtt_S2488C23[0]), // expected_vtt_contents
  ABISELECT(77600,42252), // object size
  NSPAIRA(_ZTI8S2488C23),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2488C23),120, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2488C23),71, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2488C22  : virtual S2488C23 , S2488C5 {
  long s2488c22f0;
  short s2488c22f1;
  __tsi64  :0;
  void *s2488c22f3;
  void *s2488c22f4;
  long double s2488c22f5[10];
  int s2488c22f6;
  void *s2488c22f7;
  void *s2488c22f8;
  int s2488c22f9;
  long s2488c22f10;
  void *s2488c22f11;
  virtual void  v14(); // _ZN8S2488C223v14Ev
  virtual void  v15(); // _ZN8S2488C223v15Ev
  ~S2488C22(); // tgen
  S2488C22(); // tgen
};
//SIG(-1 S2488C22) C1{ VBC2{ VBC3{ BC4{ m Fc Fi FL FU5{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC6{ VBC4 v3 v4 Fp Fp Fi Fi FU7{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU7 Fp FL:3 FC4 Fl FU7} VBC8{ VBC4 VBC6 vd v5 FL FL FL Fl Fi FU7 Fc[10] Fi} VBC9{ BC4 BC6 v6 Fp FD FC4[7] FD FU5 Fs Fl Fl} vd v7 Fc Fi[7] Fl[5] Fl FL FL FU10{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} VBC11{ v8 FD FC12{ VBC9 VBC8 Fi Fp Fi FU7}[6] Fc Fp Fp Fi[6] Fi Fp Fl Fp Fi Fp Fp} BC13{ BC14{ vd m FU5} BC15{ VBC8 BC3 BC4 BC6 vd v9 v10 v11 FU7 Fi Fl Fc Fp FC9 Fs} VBC16{ VBC9 VBC6 VBC8 BC17{ BC3 vd v12 v13 Fp Fp Fp Fi FC18{} Fl Fl} VBC11 vd Fc Fs[3] FC19{ BC4 VBC6 VBC8 VBC9 VBC15 vd FL Fi Fp Fp Fl}[10] FC9 FL FL:5 Fi Fp[6] Fl[2] FL Fi} BC19 vd v14 v15 Fi FD Fl Fc:3 Fp FC6} vd Fp[6] Fi Fs FC18 FC20{ BC4 VBC9 VBC8 BC17 vd FD} Fp Fi Fi Fc Fc FU5} BC9 v1 v2 Fl Fs FL:0 Fp Fp FD[10] Fi Fp Fp Fi Fl Fp}


void  S2488C22 ::v14(){vfunc_called(this, "_ZN8S2488C223v14Ev");}
void  S2488C22 ::v15(){vfunc_called(this, "_ZN8S2488C223v15Ev");}
S2488C22 ::~S2488C22(){ note_dtor("S2488C22", this);} // tgen
S2488C22 ::S2488C22(){ note_ctor("S2488C22", this);} // tgen

static void Test_S2488C22()
{
  extern Class_Descriptor cd_S2488C22;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4964,10818)];
    init_test(&cd_S2488C22, buf);
    S2488C22 *dp, &lv = *(dp=new (buf) S2488C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(79408,43268), "sizeof(S2488C22)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2488C22)");
    /*is_ambiguous_... S2488C22::S2488C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*), ABISELECT(8144,4456), "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*), ABISELECT(8800,4820), "S2488C22");
    check_base_class_offset(lv, (S2489C3*)(S2488C8*), ABISELECT(8800,4820), "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C5*), ABISELECT(8800,4820), "S2488C22");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(8800,4820), "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C19*), ABISELECT(8800,4820), "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C5*), ABISELECT(8800,4820), "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C10 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*), ABISELECT(8416,4620), "S2488C22");
    check_base_class_offset(lv, (S2488C6*)(S2488C8*), ABISELECT(8416,4620), "S2488C22");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(8416,4620), "S2488C22");
    /*is_ambiguous_... S2488C20::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C20*), ABISELECT(8416,4620), "S2488C22");
    /*is_ambiguous_... S2488C10::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(8416,4620), "S2488C22");
    /*is_ambiguous_... S2488C21::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C21*)(S2488C17*)(S2488C23*), ABISELECT(8416,4620), "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C19*), ABISELECT(8416,4620), "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C10 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C10*), ABISELECT(8928,4892), "S2488C22");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(8928,4892), "S2488C22");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(8928,4892), "S2488C22");
    check_base_class_offset(lv, (S2488C8*)(S2488C20*), ABISELECT(8928,4892), "S2488C22");
    check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(8928,4892), "S2488C22");
    check_base_class_offset(lv, (S2488C8*)(S2488C21*)(S2488C17*)(S2488C23*), ABISELECT(8928,4892), "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C19*), ABISELECT(8928,4892), "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C19*), ABISELECT(8928,4892), "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C5*), ABISELECT(9440,5172), "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C5 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C5*), ABISELECT(9056,4972), "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C10 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C10*), ABISELECT(9056,4972), "S2488C22");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(9056,4972), "S2488C22");
    check_base_class_offset(lv, (S2488C5*)(S2488C20*), ABISELECT(9056,4972), "S2488C22");
    check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(9056,4972), "S2488C22");
    check_base_class_offset(lv, (S2488C5*)(S2488C21*)(S2488C17*)(S2488C23*), ABISELECT(9056,4972), "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C19*), ABISELECT(9056,4972), "S2488C22");
    /*is_ambiguous_... S2488C23::S2488C10 */ AMB_check_base_class_offset(lv, (S2488C10*)(S2488C23*), ABISELECT(8128,4452), "S2488C22");
    check_base_class_offset(lv, (S2488C13*)(S2488C23*), ABISELECT(10624,5828), "S2488C22");
    check_base_class_offset(lv, (S2488C13*)(S2488C20*), ABISELECT(10624,5828), "S2488C22");
    check_base_class_offset(lv, (S2489C18*)(S2488C17*)(S2488C23*), ABISELECT(1808,1016), "S2488C22");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(1920,1064), "S2488C22");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C10*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(1904,1060), "S2488C22");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(2192,1228), "S2488C22");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(2320,1300), "S2488C22");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(1904,1060), "S2488C22");
    /*is_ambiguous_... S2488C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(24608,13424), "S2488C22");
    check_base_class_offset(lv, (S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(24592,13420), "S2488C22");
    check_base_class_offset(lv, (S2488C9*)(S2488C20*), ABISELECT(24592,13420), "S2488C22");
    check_base_class_offset(lv, (S2488C20*)(S2488C17*)(S2488C23*), ABISELECT(24592,13420), "S2488C22");
    /*is_ambiguous_... S2488C21::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C21*)(S2488C17*)(S2488C23*), ABISELECT(4528,2480), "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C19*), ABISELECT(76816,41856), "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C10*)(S2488C19*), ABISELECT(76800,41852), "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C19*), ABISELECT(77088,42020), "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C19*), ABISELECT(77216,42092), "S2488C22");
    check_base_class_offset(lv, (S2488C19*)(S2488C21*)(S2488C17*)(S2488C23*), ABISELECT(76800,41852), "S2488C22");
    check_base_class_offset(lv, (S2488C21*)(S2488C17*)(S2488C23*), ABISELECT(4512,2476), "S2488C22");
    check_base_class_offset(lv, (S2488C17*)(S2488C23*), ABISELECT(1808,1016), "S2488C22");
    check_base_class_offset(lv, (S2488C23*), ABISELECT(1808,1016), "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C5*), ABISELECT(384,200), "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C5 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C5*), 0, "S2488C22");
    /*is_ambiguous_... S2488C22::S2488C5 */ AMB_check_base_class_offset(lv, (S2488C5*), 0, "S2488C22");
    check_field_offset(lv, s2488c22f0, ABISELECT(1560,856), "S2488C22.s2488c22f0");
    check_field_offset(lv, s2488c22f1, ABISELECT(1568,860), "S2488C22.s2488c22f1");
    check_field_offset(lv, s2488c22f3, ABISELECT(1576,864), "S2488C22.s2488c22f3");
    check_field_offset(lv, s2488c22f4, ABISELECT(1584,868), "S2488C22.s2488c22f4");
    check_field_offset(lv, s2488c22f5, ABISELECT(1600,872), "S2488C22.s2488c22f5");
    check_field_offset(lv, s2488c22f6, ABISELECT(1760,992), "S2488C22.s2488c22f6");
    check_field_offset(lv, s2488c22f7, ABISELECT(1768,996), "S2488C22.s2488c22f7");
    check_field_offset(lv, s2488c22f8, ABISELECT(1776,1000), "S2488C22.s2488c22f8");
    check_field_offset(lv, s2488c22f9, ABISELECT(1784,1004), "S2488C22.s2488c22f9");
    check_field_offset(lv, s2488c22f10, ABISELECT(1792,1008), "S2488C22.s2488c22f10");
    check_field_offset(lv, s2488c22f11, ABISELECT(1800,1012), "S2488C22.s2488c22f11");
    test_class_info(&lv, &cd_S2488C22);
    dp->~S2488C22();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2488C22(Test_S2488C22, "S2488C22", ABISELECT(79408,43268));

#else // __cplusplus

extern void _ZN8S2488C22C1Ev();
extern void _ZN8S2488C22D1Ev();
Name_Map name_map_S2488C22[] = {
  NSPAIR(_ZN8S2488C22C1Ev),
  NSPAIR(_ZN8S2488C22D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C8;
extern VTBL_ENTRY _ZTI7S2488C8[];
extern  VTBL_ENTRY _ZTV7S2488C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C5;
extern VTBL_ENTRY _ZTI7S2488C5[];
extern  VTBL_ENTRY _ZTV7S2488C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C5[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2488C13;
extern VTBL_ENTRY _ZTI8S2488C13[];
extern  VTBL_ENTRY _ZTV8S2488C13[];
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C19;
extern VTBL_ENTRY _ZTI8S2488C19[];
extern  VTBL_ENTRY _ZTV8S2488C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C19[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2488C9;
extern VTBL_ENTRY _ZTI7S2488C9[];
extern  VTBL_ENTRY _ZTV7S2488C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C9[];
extern Class_Descriptor cd_S2488C20;
extern VTBL_ENTRY _ZTI8S2488C20[];
extern  VTBL_ENTRY _ZTV8S2488C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C20[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C19;
extern VTBL_ENTRY _ZTI8S2488C19[];
extern  VTBL_ENTRY _ZTV8S2488C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C19[];
extern Class_Descriptor cd_S2488C21;
extern VTBL_ENTRY _ZTI8S2488C21[];
extern  VTBL_ENTRY _ZTV8S2488C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C21[];
extern Class_Descriptor cd_S2488C17;
extern VTBL_ENTRY _ZTI8S2488C17[];
extern  VTBL_ENTRY _ZTV8S2488C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C17[];
extern Class_Descriptor cd_S2488C23;
extern VTBL_ENTRY _ZTI8S2488C23[];
extern  VTBL_ENTRY _ZTV8S2488C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C23[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C5;
extern VTBL_ENTRY _ZTI7S2488C5[];
extern  VTBL_ENTRY _ZTV7S2488C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C5[];
static Base_Class bases_S2488C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(8144,4456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(8800,4820), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2488C6,    ABISELECT(8416,4620), //bcp->offset
    78, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2488C8,    ABISELECT(8928,4892), //bcp->offset
    85, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(9440,5172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(9056,4972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2488C5,    ABISELECT(9056,4972), //bcp->offset
    94, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2488C10,    ABISELECT(8128,4452), //bcp->offset
    67, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2488C13,    ABISELECT(10624,5828), //bcp->offset
    103, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S2489C18,    ABISELECT(1808,1016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(1920,1064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(1904,1060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(2192,1228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(2320,1300), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2488C19,    ABISELECT(1904,1060), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(24608,13424), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(24592,13420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2488C9,    ABISELECT(24592,13420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2488C20,    ABISELECT(24592,13420), //bcp->offset
    107, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(4528,2480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(76816,41856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(76800,41852), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(77088,42020), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(77216,42092), //bcp->offset
    142, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2488C19,    ABISELECT(76800,41852), //bcp->offset
    123, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S2488C21,    ABISELECT(4512,2476), //bcp->offset
    58, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S2488C17,    ABISELECT(1808,1016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S2488C23,    ABISELECT(1808,1016), //bcp->offset
    18, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(384,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S2488C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S2488C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2488C22[];
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
extern void _ZN8S2488C223v14Ev();
extern void _ZN8S2488C223v15Ev();
extern void _ZN8S2488C22D1Ev();
extern void _ZN8S2488C22D0Ev();
extern void ABISELECT(_ZTv0_n88_N8S2488C22D1Ev,_ZTv0_n44_N8S2488C22D1Ev)();
extern void ABISELECT(_ZThn1808_N8S2488C22D1Ev,_ZThn1016_N8S2488C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S2488C22D0Ev,_ZTv0_n44_N8S2488C22D0Ev)();
extern void ABISELECT(_ZThn1808_N8S2488C22D0Ev,_ZThn1016_N8S2488C22D0Ev)() __attribute__((weak));
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
extern void ABISELECT(_ZTvn96_n88_N8S2488C22D1Ev,_ZTvn44_n44_N8S2488C22D1Ev)();
extern void ABISELECT(_ZTvn96_n88_N8S2488C22D0Ev,_ZTvn44_n44_N8S2488C22D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void ABISELECT(_ZTvn2704_n88_N8S2488C22D1Ev,_ZTvn1460_n44_N8S2488C22D1Ev)();
extern void ABISELECT(_ZTvn2704_n88_N8S2488C22D0Ev,_ZTvn1460_n44_N8S2488C22D0Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2488C22D1Ev,_ZTv0_n28_N8S2488C22D1Ev)();
extern void ABISELECT(_ZThn8128_N8S2488C22D1Ev,_ZThn4452_N8S2488C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C22D0Ev,_ZTv0_n28_N8S2488C22D0Ev)();
extern void ABISELECT(_ZThn8128_N8S2488C22D0Ev,_ZThn4452_N8S2488C22D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S2488C22D1Ev,_ZTv0_n20_N8S2488C22D1Ev)();
extern void ABISELECT(_ZThn8928_N8S2488C22D1Ev,_ZThn4892_N8S2488C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C22D0Ev,_ZTv0_n20_N8S2488C22D0Ev)();
extern void ABISELECT(_ZThn8928_N8S2488C22D0Ev,_ZThn4892_N8S2488C22D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
extern void _ZN8S2488C133v11Ev();
extern void ABISELECT(_ZTv0_n64_N8S2488C22D1Ev,_ZTv0_n32_N8S2488C22D1Ev)();
extern void ABISELECT(_ZThn24592_N8S2488C22D1Ev,_ZThn13420_N8S2488C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2488C22D0Ev,_ZTv0_n32_N8S2488C22D0Ev)();
extern void ABISELECT(_ZThn24592_N8S2488C22D0Ev,_ZThn13420_N8S2488C22D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
extern void ABISELECT(_ZTv0_n56_N8S2488C22D1Ev,_ZTv0_n28_N8S2488C22D1Ev)();
extern void ABISELECT(_ZThn76800_N8S2488C22D1Ev,_ZThn41852_N8S2488C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C22D0Ev,_ZTv0_n28_N8S2488C22D0Ev)();
extern void ABISELECT(_ZThn76800_N8S2488C22D0Ev,_ZThn41852_N8S2488C22D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY vtc_S2488C22[] = {
  ABISELECT(76800,41852),
  ABISELECT(24592,13420),
  ABISELECT(10624,5828),
  ABISELECT(9056,4972),
  ABISELECT(8928,4892),
  ABISELECT(8416,4620),
  ABISELECT(8128,4452),
  ABISELECT(1808,1016),
  ABISELECT(8800,4820),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
  (VTBL_ENTRY)&_ZN8S2488C223v14Ev,
  (VTBL_ENTRY)&_ZN8S2488C223v15Ev,
  (VTBL_ENTRY)&_ZN8S2488C22D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C22D0Ev,
  ABISELECT(512,284),
  ABISELECT(512,284),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-1808,-1016),
  ABISELECT(6320,3436),
  ABISELECT(74992,40836),
  ABISELECT(8816,4812),
  ABISELECT(22784,12404),
  ABISELECT(7248,3956),
  ABISELECT(6608,3604),
  ABISELECT(6992,3804),
  ABISELECT(7120,3876),
  ABISELECT(-1808,-1016),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2488C22D1Ev,_ZTv0_n44_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2488C22D0Ev,_ZTv0_n44_N8S2488C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
  ABISELECT(7152,3912),
  ABISELECT(7024,3832),
  ABISELECT(6896,3760),
  ABISELECT(6512,3560),
  ABISELECT(-1904,-1060),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2488C22D1Ev,_ZTvn44_n44_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2488C22D0Ev,_ZTvn44_n44_N8S2488C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
  ABISELECT(6480,3520),
  ABISELECT(-2320,-1300),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  ABISELECT(72288,39376),
  ABISELECT(4544,2496),
  ABISELECT(4416,2416),
  ABISELECT(4288,2344),
  ABISELECT(3904,2144),
  ABISELECT(-4512,-2476),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2488C22D1Ev,_ZTvn1460_n44_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2488C22D0Ev,_ZTvn1460_n44_N8S2488C22D0Ev),
  0,
  ABISELECT(-8128,-4452),
  ABISELECT(928,520),
  ABISELECT(800,440),
  ABISELECT(672,368),
  ABISELECT(288,168),
  ABISELECT(-8128,-4452),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C22D1Ev,_ZTv0_n28_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C22D0Ev,_ZTv0_n28_N8S2488C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-8416,-4620),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  0,
  ABISELECT(-8928,-4892),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-8928,-4892),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C22D1Ev,_ZTv0_n20_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C22D0Ev,_ZTv0_n20_N8S2488C22D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-9056,-4972),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
  0,
  ABISELECT(-10624,-5828),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
  0,
  0,
  0,
  ABISELECT(-24592,-13420),
  ABISELECT(-13968,-7592),
  ABISELECT(-15536,-8448),
  ABISELECT(-15664,-8528),
  ABISELECT(-15792,-8600),
  ABISELECT(-16176,-8800),
  ABISELECT(-24592,-13420),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C22D1Ev,_ZTv0_n32_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C22D0Ev,_ZTv0_n32_N8S2488C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-76800,-41852),
  ABISELECT(-67744,-36880),
  ABISELECT(-67872,-36960),
  ABISELECT(-68000,-37032),
  ABISELECT(-68384,-37232),
  ABISELECT(-76800,-41852),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C22D1Ev,_ZTv0_n28_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C22D0Ev,_ZTv0_n28_N8S2488C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
  ABISELECT(-68416,-37272),
  ABISELECT(-77216,-42092),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S2488C22[];
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__A__8S2488C22[] = {
  ABISELECT(8800,4820),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C5[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C67S2488C5__A4__8S2488C22[] = {
  ABISELECT(8800,4820),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C23D1Ev();
extern void _ZN8S2488C23D0Ev();
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C23__8S2488C22[] = {
  ABISELECT(6320,3436),
  ABISELECT(74992,40836),
  ABISELECT(8816,4812),
  ABISELECT(22784,12404),
  ABISELECT(7248,3956),
  ABISELECT(6608,3604),
  ABISELECT(6992,3804),
  ABISELECT(7120,3876),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN8S2488C23D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C23D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
};
extern void _ZN8S2488C17D1Ev();
extern void _ZN8S2488C17D0Ev();
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C178S2488C23__8S2488C22[] = {
  ABISELECT(74992,40836),
  ABISELECT(8816,4812),
  ABISELECT(22784,12404),
  ABISELECT(7248,3956),
  ABISELECT(6608,3604),
  ABISELECT(6992,3804),
  ABISELECT(7120,3876),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN8S2488C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C17D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
};
extern void _ZN8S2488C19D1Ev();
extern void _ZN8S2488C19D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C198S2488C178S2488C23__8S2488C22[] = {
  ABISELECT(7152,3912),
  ABISELECT(7024,3832),
  ABISELECT(6896,3760),
  ABISELECT(6512,3560),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN8S2488C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C108S2488C198S2488C178S2488C23__A1__8S2488C22[] = {
  ABISELECT(7152,3912),
  ABISELECT(7024,3832),
  ABISELECT(6896,3760),
  ABISELECT(6512,3560),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C108S2488C198S2488C178S2488C23__A1__8S2488C22[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-6512,-3560),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZThn7024_N8S2488C10D1Ev,_ZThn3832_N8S2488C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void ABISELECT(_ZThn7024_N8S2488C10D0Ev,_ZThn3832_N8S2488C10D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C108S2488C198S2488C178S2488C23__A1__8S2488C22[] = {
  0,
  ABISELECT(-7024,-3832),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-7024,-3832),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C108S2488C198S2488C178S2488C23__A1__8S2488C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-7152,-3912),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C198S2488C178S2488C23__A2__8S2488C22[] = {
  ABISELECT(6480,3520),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev)();
extern void ABISELECT(_ZThn7024_N8S2488C19D1Ev,_ZThn3832_N8S2488C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev)();
extern void ABISELECT(_ZThn7024_N8S2488C19D0Ev,_ZThn3832_N8S2488C19D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C198S2488C178S2488C23__8S2488C22[] = {
  0,
  ABISELECT(-7024,-3832),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-7024,-3832),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C198S2488C178S2488C23__8S2488C22[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-6512,-3560),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C198S2488C178S2488C23__8S2488C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-7152,-3912),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A__8S2488C198S2488C178S2488C23__8S2488C22[] = {
  ABISELECT(6480,3520),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C21D1Ev();
extern void _ZN8S2488C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C218S2488C178S2488C23__8S2488C22[] = {
  ABISELECT(72288,39376),
  ABISELECT(4544,2496),
  ABISELECT(4416,2416),
  ABISELECT(4288,2344),
  ABISELECT(3904,2144),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN8S2488C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C21D0Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C218S2488C178S2488C23__8S2488C22[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-3904,-2144),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev)();
extern void ABISELECT(_ZThn4416_N8S2488C21D1Ev,_ZThn2416_N8S2488C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev)();
extern void ABISELECT(_ZThn4416_N8S2488C21D0Ev,_ZThn2416_N8S2488C21D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C218S2488C178S2488C23__8S2488C22[] = {
  0,
  ABISELECT(-4416,-2416),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-4416,-2416),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C218S2488C178S2488C23__8S2488C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-4544,-2496),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev)();
extern void ABISELECT(_ZThn72288_N8S2488C21D1Ev,_ZThn39376_N8S2488C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev)();
extern void ABISELECT(_ZThn72288_N8S2488C21D0Ev,_ZThn39376_N8S2488C21D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__8S2488C218S2488C178S2488C23__8S2488C22[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-72288,-39376),
  ABISELECT(-67744,-36880),
  ABISELECT(-67872,-36960),
  ABISELECT(-68000,-37032),
  ABISELECT(-68384,-37232),
  ABISELECT(-72288,-39376),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A2__8S2488C218S2488C178S2488C23__8S2488C22[] = {
  ABISELECT(-68416,-37272),
  ABISELECT(-72704,-39616),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZThn96_N8S2488C17D1Ev,_ZThn44_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S2488C17D0Ev,_ZThn44_N8S2488C17D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A__8S2488C178S2488C23__8S2488C22[] = {
  ABISELECT(7152,3912),
  ABISELECT(7024,3832),
  ABISELECT(6896,3760),
  ABISELECT(6512,3560),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C17D1Ev,_ZThn44_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C17D0Ev,_ZThn44_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn7120_N8S2488C17D1Ev,_ZThn3876_N8S2488C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev)();
extern void ABISELECT(_ZThn7120_N8S2488C17D0Ev,_ZThn3876_N8S2488C17D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C178S2488C23__8S2488C22[] = {
  0,
  ABISELECT(-7120,-3876),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-7120,-3876),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C178S2488C23__8S2488C22[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-6608,-3604),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C178S2488C23__8S2488C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-7248,-3956),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A2__8S2488C178S2488C23__8S2488C22[] = {
  ABISELECT(6480,3520),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn22784_N8S2488C17D1Ev,_ZThn12404_N8S2488C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev)();
extern void ABISELECT(_ZThn22784_N8S2488C17D0Ev,_ZThn12404_N8S2488C17D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C178S2488C23__8S2488C22[] = {
  0,
  0,
  0,
  ABISELECT(-22784,-12404),
  ABISELECT(-13968,-7592),
  ABISELECT(-15536,-8448),
  ABISELECT(-15664,-8528),
  ABISELECT(-15792,-8600),
  ABISELECT(-16176,-8800),
  ABISELECT(-22784,-12404),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C178S2488C23__8S2488C22[] = {
  0,
  ABISELECT(-8816,-4812),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void ABISELECT(_ZThn2704_N8S2488C17D1Ev,_ZThn1460_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2488C17D0Ev,_ZThn1460_N8S2488C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2488C21__8S2488C178S2488C23__8S2488C22[] = {
  ABISELECT(72288,39376),
  ABISELECT(4544,2496),
  ABISELECT(4416,2416),
  ABISELECT(4288,2344),
  ABISELECT(3904,2144),
  ABISELECT(-2704,-1460),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C17D1Ev,_ZThn1460_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C17D0Ev,_ZThn1460_N8S2488C17D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn74992_N8S2488C17D1Ev,_ZThn40836_N8S2488C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev)();
extern void ABISELECT(_ZThn74992_N8S2488C17D0Ev,_ZThn40836_N8S2488C17D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C178S2488C23__8S2488C22[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-74992,-40836),
  ABISELECT(-67744,-36880),
  ABISELECT(-67872,-36960),
  ABISELECT(-68000,-37032),
  ABISELECT(-68384,-37232),
  ABISELECT(-74992,-40836),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C178S2488C23__8S2488C22[] = {
  ABISELECT(-68416,-37272),
  ABISELECT(-75408,-41076),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev)();
extern void ABISELECT(_ZThn6320_N8S2488C23D1Ev,_ZThn3436_N8S2488C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev)();
extern void ABISELECT(_ZThn6320_N8S2488C23D0Ev,_ZThn3436_N8S2488C23D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C10__8S2488C23__8S2488C22[] = {
  0,
  ABISELECT(-6320,-3436),
  ABISELECT(928,520),
  ABISELECT(800,440),
  ABISELECT(672,368),
  ABISELECT(288,168),
  ABISELECT(-6320,-3436),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C23__8S2488C22[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-6608,-3604),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C23D1Ev,_ZTv0_n20_N8S2488C23D1Ev)();
extern void ABISELECT(_ZThn7120_N8S2488C23D1Ev,_ZThn3876_N8S2488C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C23D0Ev,_ZTv0_n20_N8S2488C23D0Ev)();
extern void ABISELECT(_ZThn7120_N8S2488C23D0Ev,_ZThn3876_N8S2488C23D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C23__8S2488C22[] = {
  0,
  ABISELECT(-7120,-3876),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-7120,-3876),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C23D1Ev,_ZTv0_n20_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C23D0Ev,_ZTv0_n20_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C23__8S2488C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-7248,-3956),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C23__8S2488C22[] = {
  0,
  ABISELECT(-8816,-4812),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void ABISELECT(_ZThn96_N8S2488C23D1Ev,_ZThn44_N8S2488C23D1Ev)();
extern void ABISELECT(_ZThn96_N8S2488C23D0Ev,_ZThn44_N8S2488C23D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C198S2488C17__8S2488C23__8S2488C22[] = {
  ABISELECT(7152,3912),
  ABISELECT(7024,3832),
  ABISELECT(6896,3760),
  ABISELECT(6512,3560),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C23D1Ev,_ZThn44_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C23D0Ev,_ZThn44_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C198S2488C17__A2__8S2488C23__8S2488C22[] = {
  ABISELECT(6480,3520),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2488C23D1Ev,_ZTv0_n32_N8S2488C23D1Ev)();
extern void ABISELECT(_ZThn22784_N8S2488C23D1Ev,_ZThn12404_N8S2488C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2488C23D0Ev,_ZTv0_n32_N8S2488C23D0Ev)();
extern void ABISELECT(_ZThn22784_N8S2488C23D0Ev,_ZThn12404_N8S2488C23D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C23__8S2488C22[] = {
  0,
  0,
  0,
  ABISELECT(-22784,-12404),
  ABISELECT(-13968,-7592),
  ABISELECT(-15536,-8448),
  ABISELECT(-15664,-8528),
  ABISELECT(-15792,-8600),
  ABISELECT(-16176,-8800),
  ABISELECT(-22784,-12404),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C23D1Ev,_ZTv0_n32_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C23D0Ev,_ZTv0_n32_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void ABISELECT(_ZThn2704_N8S2488C23D1Ev,_ZThn1460_N8S2488C23D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2488C23D0Ev,_ZThn1460_N8S2488C23D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2488C218S2488C17__8S2488C23__8S2488C22[] = {
  ABISELECT(72288,39376),
  ABISELECT(4544,2496),
  ABISELECT(4416,2416),
  ABISELECT(4288,2344),
  ABISELECT(3904,2144),
  ABISELECT(-2704,-1460),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C23D1Ev,_ZThn1460_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C23D0Ev,_ZThn1460_N8S2488C23D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev)();
extern void ABISELECT(_ZThn74992_N8S2488C23D1Ev,_ZThn40836_N8S2488C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev)();
extern void ABISELECT(_ZThn74992_N8S2488C23D0Ev,_ZThn40836_N8S2488C23D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C23__8S2488C22[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-74992,-40836),
  ABISELECT(-67744,-36880),
  ABISELECT(-67872,-36960),
  ABISELECT(-68000,-37032),
  ABISELECT(-68384,-37232),
  ABISELECT(-74992,-40836),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C23__8S2488C22[] = {
  ABISELECT(-68416,-37272),
  ABISELECT(-75408,-41076),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C10__8S2488C22[] = {
  ABISELECT(928,520),
  ABISELECT(800,440),
  ABISELECT(672,368),
  ABISELECT(288,168),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C10__8S2488C22[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZThn800_N8S2488C10D1Ev,_ZThn440_N8S2488C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void ABISELECT(_ZThn800_N8S2488C10D0Ev,_ZThn440_N8S2488C10D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C10__8S2488C22[] = {
  0,
  ABISELECT(-800,-440),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-800,-440),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C10__8S2488C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-928,-520),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C22[] = {
  ABISELECT(384,200),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C8D1Ev();
extern void _ZN7S2488C8D0Ev();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C22[] = {
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C8__8S2488C22[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(512,272),
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C22[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C5[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C67S2488C5__A1__8S2488C22[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C20D1Ev();
extern void _ZN8S2488C20D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C22[] = {
  ABISELECT(-13968,-7592),
  ABISELECT(-15536,-8448),
  ABISELECT(-15664,-8528),
  ABISELECT(-15792,-8600),
  ABISELECT(-16176,-8800),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN8S2488C20D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C20D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN7S2488C9D1Ev();
extern void _ZN7S2488C9D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C98S2488C20__8S2488C22[] = {
  ABISELECT(-15536,-8448),
  ABISELECT(-15664,-8528),
  ABISELECT(-15792,-8600),
  ABISELECT(-16176,-8800),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C107S2488C98S2488C20__A2__8S2488C22[] = {
  ABISELECT(-15536,-8448),
  ABISELECT(-15664,-8528),
  ABISELECT(-15792,-8600),
  ABISELECT(-16176,-8800),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C107S2488C98S2488C20__A2__8S2488C22[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(16176,8800),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C107S2488C98S2488C20__A2__8S2488C22[] = {
  0,
  ABISELECT(15664,8528),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(15664,8528),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C107S2488C98S2488C20__A2__8S2488C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(15536,8448),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C98S2488C20__8S2488C22[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(16176,8800),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__7S2488C98S2488C20__8S2488C22[] = {
  0,
  ABISELECT(15664,8528),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(15664,8528),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__7S2488C98S2488C20__8S2488C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(15536,8448),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C20__8S2488C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(15536,8448),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A1__8S2488C20__8S2488C22[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(16176,8800),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C20D1Ev,_ZTv0_n20_N8S2488C20D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C20D0Ev,_ZTv0_n20_N8S2488C20D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C20__8S2488C22[] = {
  0,
  ABISELECT(15664,8528),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(15664,8528),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C20D1Ev,_ZTv0_n20_N8S2488C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C20D0Ev,_ZTv0_n20_N8S2488C20D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C20__8S2488C22[] = {
  0,
  ABISELECT(13968,7592),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void _ZN8S2488C19D1Ev();
extern void _ZN8S2488C19D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C22[] = {
  ABISELECT(-67744,-36880),
  ABISELECT(-67872,-36960),
  ABISELECT(-68000,-37032),
  ABISELECT(-68384,-37232),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN8S2488C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C108S2488C19__A3__8S2488C22[] = {
  ABISELECT(-67744,-36880),
  ABISELECT(-67872,-36960),
  ABISELECT(-68000,-37032),
  ABISELECT(-68384,-37232),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C108S2488C19__A3__8S2488C22[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(68384,37232),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C108S2488C19__A3__8S2488C22[] = {
  0,
  ABISELECT(67872,36960),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(67872,36960),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C108S2488C19__A3__8S2488C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(67744,36880),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C22[] = {
  ABISELECT(-68416,-37272),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C19__A1__8S2488C22[] = {
  0,
  ABISELECT(67872,36960),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(67872,36960),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C19__A1__8S2488C22[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(68384,37232),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C19__A1__8S2488C22[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(67744,36880),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A__8S2488C19__A1__8S2488C22[] = {
  ABISELECT(-68416,-37272),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
static  VTT_ENTRY vtt_S2488C22[] = {
  {&(_ZTV8S2488C22[11]),  11,147},
  {&(_tg__ZTV7S2488C5__A__8S2488C22[3]),  3,6},
  {&(_tg__ZTV7S2488C67S2488C5__A4__8S2488C22[3]),  3,5},
  {&(_ZTV8S2488C22[37]),  37,147},
  {&(_ZTV8S2488C22[75]),  75,147},
  {&(_ZTV8S2488C22[83]),  83,147},
  {&(_ZTV8S2488C22[91]),  91,147},
  {&(_ZTV8S2488C22[100]),  100,147},
  {&(_ZTV8S2488C22[106]),  106,147},
  {&(_ZTV8S2488C22[47]),  47,147},
  {&(_ZTV8S2488C22[56]),  56,147},
  {&(_ZTV8S2488C22[118]),  118,147},
  {&(_ZTV8S2488C22[65]),  65,147},
  {&(_ZTV8S2488C22[136]),  136,147},
  {&(_ZTV8S2488C22[145]),  145,147},
  {&(_tg__ZTV8S2488C23__8S2488C22[10]),  10,14},
  {&(_tg__ZTV8S2488C178S2488C23__8S2488C22[9]),  9,13},
  {&(_tg__ZTV8S2488C198S2488C178S2488C23__8S2488C22[6]),  6,12},
  {&(_tg__ZTV8S2488C108S2488C198S2488C178S2488C23__A1__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C108S2488C198S2488C178S2488C23__A1__8S2488C22[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C108S2488C198S2488C178S2488C23__A1__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C108S2488C198S2488C178S2488C23__A1__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C198S2488C178S2488C23__A2__8S2488C22[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C198S2488C178S2488C23__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C198S2488C178S2488C23__8S2488C22[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C198S2488C178S2488C23__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A__8S2488C198S2488C178S2488C23__8S2488C22[3]),  3,5},
  {&(_tg__ZTV8S2488C218S2488C178S2488C23__8S2488C22[7]),  7,9},
  {&(_tg__ZTV7S2488C6__8S2488C218S2488C178S2488C23__8S2488C22[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C218S2488C178S2488C23__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C218S2488C178S2488C23__8S2488C22[6]),  6,9},
  {&(_tg__ZTV8S2488C19__8S2488C218S2488C178S2488C23__8S2488C22[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A2__8S2488C218S2488C178S2488C23__8S2488C22[3]),  3,5},
  {&(_tg__ZTV8S2488C19__A__8S2488C178S2488C23__8S2488C22[6]),  6,12},
  {&(_tg__ZTV7S2488C8__8S2488C178S2488C23__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C178S2488C23__8S2488C22[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C178S2488C23__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C19__A2__8S2488C178S2488C23__8S2488C22[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C178S2488C23__8S2488C22[11]),  11,16},
  {&(_tg__ZTV8S2488C13__8S2488C178S2488C23__8S2488C22[3]),  3,4},
  {&(_tg__ZTV8S2488C21__8S2488C178S2488C23__8S2488C22[7]),  7,9},
  {&(_tg__ZTV8S2488C19__A1__8S2488C178S2488C23__8S2488C22[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C178S2488C23__8S2488C22[3]),  3,5},
  {&(_tg__ZTV8S2488C10__8S2488C23__8S2488C22[8]),  8,11},
  {&(_tg__ZTV7S2488C6__8S2488C23__8S2488C22[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C23__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C23__8S2488C22[6]),  6,9},
  {&(_tg__ZTV8S2488C13__8S2488C23__8S2488C22[3]),  3,4},
  {&(_tg__ZTV8S2488C198S2488C17__8S2488C23__8S2488C22[6]),  6,12},
  {&(_tg__ZTV7S2488C68S2488C198S2488C17__A2__8S2488C23__8S2488C22[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C23__8S2488C22[11]),  11,16},
  {&(_tg__ZTV8S2488C218S2488C17__8S2488C23__8S2488C22[7]),  7,9},
  {&(_tg__ZTV8S2488C19__A1__8S2488C23__8S2488C22[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C23__8S2488C22[3]),  3,5},
  {&(_tg__ZTV8S2488C10__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C10__8S2488C22[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C10__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C10__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C22[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C22[4]),  4,7},
  {&(_tg__ZTV7S2488C6__7S2488C8__8S2488C22[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C22[3]),  3,6},
  {&(_tg__ZTV7S2488C67S2488C5__A1__8S2488C22[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C22[7]),  7,12},
  {&(_tg__ZTV7S2488C98S2488C20__8S2488C22[6]),  6,11},
  {&(_tg__ZTV8S2488C107S2488C98S2488C20__A2__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C107S2488C98S2488C20__A2__8S2488C22[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C107S2488C98S2488C20__A2__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C107S2488C98S2488C20__A2__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C6__7S2488C98S2488C20__8S2488C22[5]),  5,7},
  {&(_tg__ZTV7S2488C8__7S2488C98S2488C20__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C5__7S2488C98S2488C20__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C20__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A1__8S2488C20__8S2488C22[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C20__8S2488C22[6]),  6,9},
  {&(_tg__ZTV8S2488C13__8S2488C20__8S2488C22[3]),  3,4},
  {&(_tg__ZTV8S2488C19__A1__8S2488C22[6]),  6,12},
  {&(_tg__ZTV8S2488C108S2488C19__A3__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C108S2488C19__A3__8S2488C22[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C108S2488C19__A3__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C108S2488C19__A3__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C22[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C19__A1__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C19__A1__8S2488C22[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C19__A1__8S2488C22[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A__8S2488C19__A1__8S2488C22[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2488C22[];
extern  VTBL_ENTRY _ZTV8S2488C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C22[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C23D0Ev,_ZTv0_n32_N8S2488C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22784_N8S2488C23D0Ev,_ZThn12404_N8S2488C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C23D1Ev,_ZTv0_n32_N8S2488C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22784_N8S2488C23D1Ev,_ZThn12404_N8S2488C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C23D0Ev,_ZTv0_n20_N8S2488C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2488C23D0Ev,_ZThn3876_N8S2488C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C23D1Ev,_ZTv0_n20_N8S2488C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2488C23D1Ev,_ZThn3876_N8S2488C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74992_N8S2488C23D0Ev,_ZThn40836_N8S2488C23D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N8S2488C23D0Ev,_ZThn3436_N8S2488C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74992_N8S2488C23D1Ev,_ZThn40836_N8S2488C23D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N8S2488C23D1Ev,_ZThn3436_N8S2488C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74992_N8S2488C17D0Ev,_ZThn40836_N8S2488C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn74992_N8S2488C17D1Ev,_ZThn40836_N8S2488C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22784_N8S2488C17D0Ev,_ZThn12404_N8S2488C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22784_N8S2488C17D1Ev,_ZThn12404_N8S2488C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2488C17D0Ev,_ZThn3876_N8S2488C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2488C17D1Ev,_ZThn3876_N8S2488C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72288_N8S2488C21D0Ev,_ZThn39376_N8S2488C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72288_N8S2488C21D1Ev,_ZThn39376_N8S2488C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4416_N8S2488C21D0Ev,_ZThn2416_N8S2488C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4416_N8S2488C21D1Ev,_ZThn2416_N8S2488C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7024_N8S2488C19D0Ev,_ZThn3832_N8S2488C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7024_N8S2488C19D1Ev,_ZThn3832_N8S2488C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S2488C10D0Ev,_ZThn440_N8S2488C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7024_N8S2488C10D0Ev,_ZThn3832_N8S2488C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S2488C10D1Ev,_ZThn440_N8S2488C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7024_N8S2488C10D1Ev,_ZThn3832_N8S2488C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C22D0Ev,_ZTv0_n32_N8S2488C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24592_N8S2488C22D0Ev,_ZThn13420_N8S2488C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C22D1Ev,_ZTv0_n32_N8S2488C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24592_N8S2488C22D1Ev,_ZThn13420_N8S2488C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C22D0Ev,_ZTv0_n20_N8S2488C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8928_N8S2488C22D0Ev,_ZThn4892_N8S2488C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C22D1Ev,_ZTv0_n20_N8S2488C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8928_N8S2488C22D1Ev,_ZThn4892_N8S2488C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C22D0Ev,_ZTv0_n28_N8S2488C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn76800_N8S2488C22D0Ev,_ZThn41852_N8S2488C22D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8128_N8S2488C22D0Ev,_ZThn4452_N8S2488C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C22D1Ev,_ZTv0_n28_N8S2488C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn76800_N8S2488C22D1Ev,_ZThn41852_N8S2488C22D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8128_N8S2488C22D1Ev,_ZThn4452_N8S2488C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2488C22D0Ev,_ZTv0_n44_N8S2488C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1808_N8S2488C22D0Ev,_ZThn1016_N8S2488C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2488C22D1Ev,_ZTv0_n44_N8S2488C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1808_N8S2488C22D1Ev,_ZThn1016_N8S2488C22D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2488C22 = {  "S2488C22", // class name
  bases_S2488C22, 31,
  &(vtc_S2488C22[0]), // expected_vtbl_contents
  &(vtt_S2488C22[0]), // expected_vtt_contents
  ABISELECT(79408,43268), // object size
  NSPAIRA(_ZTI8S2488C22),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S2488C22),147, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2488C22),86, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2488C15  : S2488C14 , S2488C16 , S2488C22 , S2488C21 {
  ::S2489C4 s2488c15f0;
  int s2488c15f1;
  int s2488c15f2;
  long s2488c15f3;
  int s2488c15f4;
  void *s2488c15f5;
  int s2488c15f6;
  int s2488c15f7;
  int s2488c15f8;
  virtual  ~S2488C15(); // _ZN8S2488C15D2Ev
  S2488C15(); // tgen
};
//SIG(-1 S2488C15) C1{ BC2{ VBC3{ BC4{ m Fc Fi FL FU5{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC6{ VBC4 v1 v2 Fp Fp Fi Fi FU7{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU7 Fp FL:3 FC4 Fl FU7} v3 Fp FD FC4[7] FD FU5 Fs Fl Fl} VBC8{ VBC4 VBC6 vd v4 FL FL FL Fl Fi FU7 Fc[10] Fi} Fi Fp Fi FU7} BC9{ VBC10{ BC11{ vd m FU5} BC12{ VBC8 BC13{ BC4 VBC6 VBC8 VBC3 vd v5 Fc Fi[7] Fl[5] Fl FL FL FU14{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} BC4 BC6 vd v6 v7 v8 FU7 Fi Fl Fc Fp FC3 Fs} VBC15{ VBC3 VBC6 VBC8 BC16{ BC13 vd v9 v10 Fp Fp Fp Fi FC17{} Fl Fl} VBC18{ v11 FD FC2[6] Fc Fp Fp Fi[6] Fi Fp Fl Fp Fi Fp Fp} vd Fc Fs[3] FC19{ BC4 VBC6 VBC8 VBC3 VBC12 vd FL Fi Fp Fp Fl}[10] FC3 FL FL:5 Fi Fp[6] Fl[2] FL Fi} BC19 vd v12 v13 Fi FD Fl Fc:3 Fp FC6} Fc Fp Fl Fi Fi Fi Fp Fl FC20{ BC4 VBC3 VBC8 BC16 vd FD} FD Fl Fi} BC21{ VBC22{ VBC13 VBC18 BC10 vd Fp[6] Fi Fs FC17 FC20 Fp Fi Fi Fc Fc FU5} BC3 v14 v15 Fl Fs FL:0 Fp Fp FD[10] Fi Fp Fp Fi Fl Fp} BC19 vd FU5 Fi Fi Fl Fi Fp Fi Fi Fi}


 S2488C15 ::~S2488C15(){ note_dtor("S2488C15", this);}
S2488C15 ::S2488C15(){ note_ctor("S2488C15", this);} // tgen

static void Test_S2488C15()
{
  extern Class_Descriptor cd_S2488C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5380,11723)];
    init_test(&cd_S2488C15, buf);
    S2488C15 *dp, &lv = *(dp=new (buf) S2488C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(86064,46888), "sizeof(S2488C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2488C15)");
    /*is_ambiguous_... S2488C15::S2488C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C5*), ABISELECT(5392,2976), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C5*), ABISELECT(6576,3632), "S2488C15");
    check_base_class_offset(lv, (S2489C3*)(S2488C8*), ABISELECT(6576,3632), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*), ABISELECT(6576,3632), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C17 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C19*)(S2488C17*), ABISELECT(6576,3632), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C19*), ABISELECT(6576,3632), "S2488C15");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(6576,3632), "S2488C15");
    /*is_ambiguous_... S2488C22::S2488C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C5*)(S2488C22*), ABISELECT(6576,3632), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C5 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C5*), ABISELECT(5008,2776), "S2488C15");
    check_base_class_offset(lv, (S2488C5*)(S2488C14*), ABISELECT(5008,2776), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(5008,2776), "S2488C15");
    check_base_class_offset(lv, (S2488C5*)(S2488C20*), ABISELECT(5008,2776), "S2488C15");
    check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(5008,2776), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C21*)(S2488C17*), ABISELECT(5008,2776), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C19*), ABISELECT(5008,2776), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C10 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C10*), ABISELECT(5008,2776), "S2488C15");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(5008,2776), "S2488C15");
    check_base_class_offset(lv, (S2488C5*)(S2488C21*)(S2488C17*)(S2488C23*), ABISELECT(5008,2776), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C21 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C21*), ABISELECT(5008,2776), "S2488C15");
    check_base_class_offset(lv, (S2488C6*)(S2488C8*), ABISELECT(6832,3784), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(6832,3784), "S2488C15");
    /*is_ambiguous_... S2488C20::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C20*), ABISELECT(6832,3784), "S2488C15");
    /*is_ambiguous_... S2488C10::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(6832,3784), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C21*)(S2488C17*), ABISELECT(6832,3784), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C19*), ABISELECT(6832,3784), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C10 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*), ABISELECT(6832,3784), "S2488C15");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(6832,3784), "S2488C15");
    /*is_ambiguous_... S2488C21::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C21*)(S2488C17*)(S2488C23*), ABISELECT(6832,3784), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C21 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C21*), ABISELECT(6832,3784), "S2488C15");
    check_base_class_offset(lv, (S2488C8*)(S2488C14*), ABISELECT(6704,3704), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C19*)(S2488C17*), ABISELECT(6704,3704), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(6704,3704), "S2488C15");
    check_base_class_offset(lv, (S2488C8*)(S2488C20*), ABISELECT(6704,3704), "S2488C15");
    check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(6704,3704), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C21*)(S2488C17*), ABISELECT(6704,3704), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C19*), ABISELECT(6704,3704), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C19*), ABISELECT(6704,3704), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C10 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C10*), ABISELECT(6704,3704), "S2488C15");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(6704,3704), "S2488C15");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(6704,3704), "S2488C15");
    check_base_class_offset(lv, (S2488C8*)(S2488C21*)(S2488C17*)(S2488C23*), ABISELECT(6704,3704), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C21 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C21*), ABISELECT(6704,3704), "S2488C15");
    check_base_class_offset(lv, (S2488C14*), 0, "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C17 */ AMB_check_base_class_offset(lv, (S2489C18*)(S2488C17*), ABISELECT(7216,3984), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C17 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(7328,4032), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(7312,4028), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C17 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C19*)(S2488C17*), ABISELECT(7600,4196), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C19*)(S2488C17*), ABISELECT(7728,4268), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C19*)(S2488C17*), ABISELECT(7312,4028), "S2488C15");
    /*is_ambiguous_... S2488C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(10688,5848), "S2488C15");
    check_base_class_offset(lv, (S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(10672,5844), "S2488C15");
    check_base_class_offset(lv, (S2488C9*)(S2488C20*), ABISELECT(10672,5844), "S2488C15");
    check_base_class_offset(lv, (S2488C13*)(S2488C20*), ABISELECT(62880,34276), "S2488C15");
    check_base_class_offset(lv, (S2488C13*)(S2488C23*), ABISELECT(62880,34276), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C20*)(S2488C17*), ABISELECT(10672,5844), "S2488C15");
    check_base_class_offset(lv, (S2488C20*)(S2488C17*)(S2488C23*), ABISELECT(10672,5844), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C17 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C21*)(S2488C17*), ABISELECT(9936,5448), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C19*), ABISELECT(76864,41872), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C10*)(S2488C19*), ABISELECT(76848,41868), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C19*), ABISELECT(77136,42036), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C19*), ABISELECT(77264,42108), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C19*)(S2488C21*)(S2488C17*), ABISELECT(76848,41868), "S2488C15");
    check_base_class_offset(lv, (S2488C19*)(S2488C21*)(S2488C17*)(S2488C23*), ABISELECT(76848,41868), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C21 */ AMB_check_base_class_offset(lv, (S2488C19*)(S2488C21*), ABISELECT(76848,41868), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C21*)(S2488C17*), ABISELECT(9920,5444), "S2488C15");
    check_base_class_offset(lv, (S2488C17*)(S2488C16*), ABISELECT(7216,3984), "S2488C15");
    check_base_class_offset(lv, (S2488C16*), ABISELECT(96,44), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*), ABISELECT(85792,46724), "S2488C15");
    /*is_ambiguous_... S2488C23::S2488C10 */ AMB_check_base_class_offset(lv, (S2488C10*)(S2488C23*), ABISELECT(85776,46720), "S2488C15");
    check_base_class_offset(lv, (S2489C18*)(S2488C17*)(S2488C23*), ABISELECT(79456,43284), "S2488C15");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(79568,43332), "S2488C15");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C10*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(79552,43328), "S2488C15");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(79840,43496), "S2488C15");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(79968,43568), "S2488C15");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(79552,43328), "S2488C15");
    /*is_ambiguous_... S2488C21::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C21*)(S2488C17*)(S2488C23*), ABISELECT(82176,44748), "S2488C15");
    check_base_class_offset(lv, (S2488C21*)(S2488C17*)(S2488C23*), ABISELECT(82160,44744), "S2488C15");
    check_base_class_offset(lv, (S2488C17*)(S2488C23*), ABISELECT(79456,43284), "S2488C15");
    check_base_class_offset(lv, (S2488C23*)(S2488C22*), ABISELECT(79456,43284), "S2488C15");
    /*is_ambiguous_... S2488C22::S2488C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C5*)(S2488C22*), ABISELECT(3264,1788), "S2488C15");
    /*is_ambiguous_... S2488C22::S2488C5 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C5*)(S2488C22*), ABISELECT(2880,1588), "S2488C15");
    /*is_ambiguous_... S2488C22::S2488C5 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C22*), ABISELECT(2880,1588), "S2488C15");
    check_base_class_offset(lv, (S2488C22*), ABISELECT(2880,1588), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C21 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C21*), ABISELECT(4704,2608), "S2488C15");
    /*is_ambiguous_... S2488C15::S2488C21 */ AMB_check_base_class_offset(lv, (S2488C21*), ABISELECT(4688,2604), "S2488C15");
    check_field_offset(lv, s2488c15f0, ABISELECT(4880,2704), "S2488C15.s2488c15f0");
    check_field_offset(lv, s2488c15f1, ABISELECT(4960,2744), "S2488C15.s2488c15f1");
    check_field_offset(lv, s2488c15f2, ABISELECT(4964,2748), "S2488C15.s2488c15f2");
    check_field_offset(lv, s2488c15f3, ABISELECT(4968,2752), "S2488C15.s2488c15f3");
    check_field_offset(lv, s2488c15f4, ABISELECT(4976,2756), "S2488C15.s2488c15f4");
    check_field_offset(lv, s2488c15f5, ABISELECT(4984,2760), "S2488C15.s2488c15f5");
    check_field_offset(lv, s2488c15f6, ABISELECT(4992,2764), "S2488C15.s2488c15f6");
    check_field_offset(lv, s2488c15f7, ABISELECT(4996,2768), "S2488C15.s2488c15f7");
    check_field_offset(lv, s2488c15f8, ABISELECT(5000,2772), "S2488C15.s2488c15f8");
    test_class_info(&lv, &cd_S2488C15);
    dp->~S2488C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2488C15(Test_S2488C15, "S2488C15", ABISELECT(86064,46888));

#else // __cplusplus

extern void _ZN8S2488C15C1Ev();
extern void _ZN8S2488C15D2Ev();
Name_Map name_map_S2488C15[] = {
  NSPAIR(_ZN8S2488C15C1Ev),
  NSPAIR(_ZN8S2488C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C5;
extern VTBL_ENTRY _ZTI7S2488C5[];
extern  VTBL_ENTRY _ZTV7S2488C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C5[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C8;
extern VTBL_ENTRY _ZTI7S2488C8[];
extern  VTBL_ENTRY _ZTV7S2488C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C8[];
extern Class_Descriptor cd_S2488C14;
extern VTBL_ENTRY _ZTI8S2488C14[];
extern  VTBL_ENTRY _ZTV8S2488C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C14[];
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C19;
extern VTBL_ENTRY _ZTI8S2488C19[];
extern  VTBL_ENTRY _ZTV8S2488C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C19[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2488C9;
extern VTBL_ENTRY _ZTI7S2488C9[];
extern  VTBL_ENTRY _ZTV7S2488C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C9[];
extern Class_Descriptor cd_S2488C13;
extern VTBL_ENTRY _ZTI8S2488C13[];
extern  VTBL_ENTRY _ZTV8S2488C13[];
extern Class_Descriptor cd_S2488C20;
extern VTBL_ENTRY _ZTI8S2488C20[];
extern  VTBL_ENTRY _ZTV8S2488C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C20[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C19;
extern VTBL_ENTRY _ZTI8S2488C19[];
extern  VTBL_ENTRY _ZTV8S2488C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C19[];
extern Class_Descriptor cd_S2488C21;
extern VTBL_ENTRY _ZTI8S2488C21[];
extern  VTBL_ENTRY _ZTV8S2488C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C21[];
extern Class_Descriptor cd_S2488C17;
extern VTBL_ENTRY _ZTI8S2488C17[];
extern  VTBL_ENTRY _ZTV8S2488C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C17[];
extern Class_Descriptor cd_S2488C16;
extern VTBL_ENTRY _ZTI8S2488C16[];
extern  VTBL_ENTRY _ZTV8S2488C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C16[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C19;
extern VTBL_ENTRY _ZTI8S2488C19[];
extern  VTBL_ENTRY _ZTV8S2488C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C19[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C21;
extern VTBL_ENTRY _ZTI8S2488C21[];
extern  VTBL_ENTRY _ZTV8S2488C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C21[];
extern Class_Descriptor cd_S2488C17;
extern VTBL_ENTRY _ZTI8S2488C17[];
extern  VTBL_ENTRY _ZTV8S2488C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C17[];
extern Class_Descriptor cd_S2488C23;
extern VTBL_ENTRY _ZTI8S2488C23[];
extern  VTBL_ENTRY _ZTV8S2488C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C23[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C5;
extern VTBL_ENTRY _ZTI7S2488C5[];
extern  VTBL_ENTRY _ZTV7S2488C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C5[];
extern Class_Descriptor cd_S2488C22;
extern VTBL_ENTRY _ZTI8S2488C22[];
extern  VTBL_ENTRY _ZTV8S2488C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C22[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C21;
extern VTBL_ENTRY _ZTI8S2488C21[];
extern  VTBL_ENTRY _ZTV8S2488C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C21[];
static Base_Class bases_S2488C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(5392,2976), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(6576,3632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2488C6,    ABISELECT(5008,2776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2488C5,    ABISELECT(5008,2776), //bcp->offset
    53, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2488C6,    ABISELECT(6832,3784), //bcp->offset
    71, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2488C8,    ABISELECT(6704,3704), //bcp->offset
    62, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2488C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C18,    ABISELECT(7216,3984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(7328,4032), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(7312,4028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(7600,4196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(7728,4268), //bcp->offset
    112, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2488C19,    ABISELECT(7312,4028), //bcp->offset
    100, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(10688,5848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(10672,5844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2488C9,    ABISELECT(10672,5844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    91, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2488C13,    ABISELECT(62880,34276), //bcp->offset
    142, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S2488C20,    ABISELECT(10672,5844), //bcp->offset
    126, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(9936,5448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(76864,41872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(76848,41868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    104, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(77136,42036), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(77264,42108), //bcp->offset
    165, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    108, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2488C19,    ABISELECT(76848,41868), //bcp->offset
    146, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S2488C21,    ABISELECT(9920,5444), //bcp->offset
    117, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2488C17,    ABISELECT(7216,3984), //bcp->offset
    78, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2488C16,    ABISELECT(96,44), //bcp->offset
    14, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(85792,46724), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(85776,46720), //bcp->offset
    219, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    152, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    38, //immediately_derived
  0, 1},
  {&cd_S2489C18,    ABISELECT(79456,43284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(79568,43332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(79552,43328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    116, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(79840,43496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(79968,43568), //bcp->offset
    205, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    120, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S2488C19,    ABISELECT(79552,43328), //bcp->offset
    193, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    115, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(82176,44748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S2488C21,    ABISELECT(82160,44744), //bcp->offset
    210, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    125, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S2488C17,    ABISELECT(79456,43284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    114, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S2488C23,    ABISELECT(79456,43284), //bcp->offset
    170, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    113, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    42, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(3264,1788), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(2880,1588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S2488C5,    ABISELECT(2880,1588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S2488C22,    ABISELECT(2880,1588), //bcp->offset
    26, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(4704,2608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S2488C21,    ABISELECT(4688,2604), //bcp->offset
    44, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2488C15[];
extern void _ZN8S2488C15D1Ev();
extern void _ZN8S2488C15D0Ev();
extern void ABISELECT(_ZThn96_N8S2488C15D1Ev,_ZThn44_N8S2488C15D1Ev)();
extern void ABISELECT(_ZThn96_N8S2488C15D0Ev,_ZThn44_N8S2488C15D0Ev)();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
extern void _ZN8S2488C223v14Ev();
extern void _ZN8S2488C223v15Ev();
extern void ABISELECT(_ZThn2880_N8S2488C15D1Ev,_ZThn1588_N8S2488C15D1Ev)();
extern void ABISELECT(_ZThn2880_N8S2488C15D0Ev,_ZThn1588_N8S2488C15D0Ev)();
extern void ABISELECT(_ZThn4688_N8S2488C15D1Ev,_ZThn2604_N8S2488C15D1Ev)();
extern void ABISELECT(_ZThn4688_N8S2488C15D0Ev,_ZThn2604_N8S2488C15D0Ev)();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S2488C15D1Ev,_ZTv0_n20_N8S2488C15D1Ev)();
extern void ABISELECT(_ZThn6704_N8S2488C15D1Ev,_ZThn3704_N8S2488C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C15D0Ev,_ZTv0_n20_N8S2488C15D0Ev)();
extern void ABISELECT(_ZThn6704_N8S2488C15D0Ev,_ZThn3704_N8S2488C15D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void ABISELECT(_ZTv0_n80_N8S2488C15D1Ev,_ZTv0_n40_N8S2488C15D1Ev)();
extern void ABISELECT(_ZThn7216_N8S2488C15D1Ev,_ZThn3984_N8S2488C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S2488C15D0Ev,_ZTv0_n40_N8S2488C15D0Ev)();
extern void ABISELECT(_ZThn7216_N8S2488C15D0Ev,_ZThn3984_N8S2488C15D0Ev)() __attribute__((weak));
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
extern void ABISELECT(_ZTvn96_n80_N8S2488C15D1Ev,_ZTvn44_n40_N8S2488C15D1Ev)();
extern void ABISELECT(_ZTvn96_n80_N8S2488C15D0Ev,_ZTvn44_n40_N8S2488C15D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void ABISELECT(_ZTvn2704_n80_N8S2488C15D1Ev,_ZTvn1460_n40_N8S2488C15D1Ev)();
extern void ABISELECT(_ZTvn2704_n80_N8S2488C15D0Ev,_ZTvn1460_n40_N8S2488C15D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S2488C15D1Ev,_ZTv0_n32_N8S2488C15D1Ev)();
extern void ABISELECT(_ZThn10672_N8S2488C15D1Ev,_ZThn5844_N8S2488C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2488C15D0Ev,_ZTv0_n32_N8S2488C15D0Ev)();
extern void ABISELECT(_ZThn10672_N8S2488C15D0Ev,_ZThn5844_N8S2488C15D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
extern void _ZN8S2488C133v11Ev();
extern void ABISELECT(_ZTv0_n56_N8S2488C15D1Ev,_ZTv0_n28_N8S2488C15D1Ev)();
extern void ABISELECT(_ZThn76848_N8S2488C15D1Ev,_ZThn41868_N8S2488C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C15D0Ev,_ZTv0_n28_N8S2488C15D0Ev)();
extern void ABISELECT(_ZThn76848_N8S2488C15D0Ev,_ZThn41868_N8S2488C15D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void ABISELECT(_ZTv0_n88_N8S2488C15D1Ev,_ZTv0_n44_N8S2488C15D1Ev)();
extern void ABISELECT(_ZThn79456_N8S2488C15D1Ev,_ZThn43284_N8S2488C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S2488C15D0Ev,_ZTv0_n44_N8S2488C15D0Ev)();
extern void ABISELECT(_ZThn79456_N8S2488C15D0Ev,_ZThn43284_N8S2488C15D0Ev)() __attribute__((weak));
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
extern void ABISELECT(_ZTvn96_n88_N8S2488C15D1Ev,_ZTvn44_n44_N8S2488C15D1Ev)();
extern void ABISELECT(_ZTvn96_n88_N8S2488C15D0Ev,_ZTvn44_n44_N8S2488C15D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void ABISELECT(_ZTvn2704_n88_N8S2488C15D1Ev,_ZTvn1460_n44_N8S2488C15D1Ev)();
extern void ABISELECT(_ZTvn2704_n88_N8S2488C15D0Ev,_ZTvn1460_n44_N8S2488C15D0Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2488C15D1Ev,_ZTv0_n28_N8S2488C15D1Ev)();
extern void ABISELECT(_ZThn85776_N8S2488C15D1Ev,_ZThn46720_N8S2488C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C15D0Ev,_ZTv0_n28_N8S2488C15D0Ev)();
extern void ABISELECT(_ZThn85776_N8S2488C15D0Ev,_ZThn46720_N8S2488C15D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY vtc_S2488C15[] = {
  ABISELECT(85776,46720),
  ABISELECT(79456,43284),
  ABISELECT(76848,41868),
  ABISELECT(62880,34276),
  ABISELECT(10672,5844),
  ABISELECT(7216,3984),
  ABISELECT(6832,3784),
  ABISELECT(6704,3704),
  ABISELECT(6576,3632),
  ABISELECT(5008,2776),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&_ZN8S2488C15D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C15D0Ev,
  ABISELECT(76752,41824),
  ABISELECT(62784,34232),
  ABISELECT(10576,5800),
  ABISELECT(4912,2732),
  ABISELECT(6736,3740),
  ABISELECT(6480,3588),
  ABISELECT(6608,3660),
  ABISELECT(7120,3940),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C15D1Ev,_ZThn44_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C15D0Ev,_ZThn44_N8S2488C15D0Ev),
  ABISELECT(73968,40280),
  ABISELECT(7792,4256),
  ABISELECT(60000,32688),
  ABISELECT(2128,1188),
  ABISELECT(3824,2116),
  ABISELECT(3952,2196),
  ABISELECT(82896,45132),
  ABISELECT(76576,41696),
  ABISELECT(3696,2044),
  ABISELECT(-2880,-1588),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
  (VTBL_ENTRY)&_ZN8S2488C223v14Ev,
  (VTBL_ENTRY)&_ZN8S2488C223v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2880_N8S2488C15D1Ev,_ZThn1588_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2880_N8S2488C15D0Ev,_ZThn1588_N8S2488C15D0Ev),
  ABISELECT(72160,39264),
  ABISELECT(320,172),
  ABISELECT(2016,1100),
  ABISELECT(1888,1028),
  ABISELECT(2144,1180),
  ABISELECT(-4688,-2604),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4688_N8S2488C15D1Ev,_ZThn2604_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4688_N8S2488C15D0Ev,_ZThn2604_N8S2488C15D0Ev),
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-5008,-2776),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
  0,
  ABISELECT(-6704,-3704),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(-6704,-3704),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C15D1Ev,_ZTv0_n20_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C15D0Ev,_ZTv0_n20_N8S2488C15D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-6832,-3784),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  ABISELECT(512,284),
  ABISELECT(512,284),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-7216,-3984),
  ABISELECT(69632,37884),
  ABISELECT(55664,30292),
  ABISELECT(3456,1860),
  ABISELECT(-2208,-1208),
  ABISELECT(-384,-200),
  ABISELECT(-640,-352),
  ABISELECT(-512,-280),
  ABISELECT(-7216,-3984),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2488C15D1Ev,_ZTv0_n40_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2488C15D0Ev,_ZTv0_n40_N8S2488C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
  ABISELECT(-2304,-1252),
  ABISELECT(-608,-324),
  ABISELECT(-736,-396),
  ABISELECT(-480,-244),
  ABISELECT(-7312,-4028),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2488C15D1Ev,_ZTvn44_n40_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2488C15D0Ev,_ZTvn44_n40_N8S2488C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
  ABISELECT(-1152,-636),
  ABISELECT(-7728,-4268),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  ABISELECT(66928,36424),
  ABISELECT(-4912,-2668),
  ABISELECT(-3216,-1740),
  ABISELECT(-3344,-1812),
  ABISELECT(-3088,-1660),
  ABISELECT(-9920,-5444),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2488C15D1Ev,_ZTvn1460_n40_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2488C15D0Ev,_ZTvn1460_n40_N8S2488C15D0Ev),
  0,
  0,
  0,
  ABISELECT(-10672,-5844),
  ABISELECT(52208,28432),
  ABISELECT(-5664,-3068),
  ABISELECT(-3968,-2140),
  ABISELECT(-4096,-2212),
  ABISELECT(-3840,-2060),
  ABISELECT(-10672,-5844),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C15D1Ev,_ZTv0_n32_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C15D0Ev,_ZTv0_n32_N8S2488C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
  0,
  ABISELECT(-62880,-34276),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-76848,-41868),
  ABISELECT(-71840,-39092),
  ABISELECT(-70144,-38164),
  ABISELECT(-70272,-38236),
  ABISELECT(-70016,-38084),
  ABISELECT(-76848,-41868),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C15D1Ev,_ZTv0_n28_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C15D0Ev,_ZTv0_n28_N8S2488C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
  ABISELECT(-70688,-38476),
  ABISELECT(-77264,-42108),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  ABISELECT(512,284),
  ABISELECT(512,284),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-79456,-43284),
  ABISELECT(6320,3436),
  ABISELECT(-2608,-1416),
  ABISELECT(-16576,-9008),
  ABISELECT(-68784,-37440),
  ABISELECT(-74448,-40508),
  ABISELECT(-72624,-39500),
  ABISELECT(-72880,-39652),
  ABISELECT(-72752,-39580),
  ABISELECT(-79456,-43284),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2488C15D1Ev,_ZTv0_n44_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2488C15D0Ev,_ZTv0_n44_N8S2488C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
  ABISELECT(-74544,-40552),
  ABISELECT(-72848,-39624),
  ABISELECT(-72976,-39696),
  ABISELECT(-72720,-39544),
  ABISELECT(-79552,-43328),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2488C15D1Ev,_ZTvn44_n44_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2488C15D0Ev,_ZTvn44_n44_N8S2488C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
  ABISELECT(-73392,-39936),
  ABISELECT(-79968,-43568),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  ABISELECT(-5312,-2876),
  ABISELECT(-77152,-41968),
  ABISELECT(-75456,-41040),
  ABISELECT(-75584,-41112),
  ABISELECT(-75328,-40960),
  ABISELECT(-82160,-44744),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2488C15D1Ev,_ZTvn1460_n44_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2488C15D0Ev,_ZTvn1460_n44_N8S2488C15D0Ev),
  0,
  ABISELECT(-85776,-46720),
  ABISELECT(-80768,-43944),
  ABISELECT(-79072,-43016),
  ABISELECT(-79200,-43088),
  ABISELECT(-78944,-42936),
  ABISELECT(-85776,-46720),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C15D1Ev,_ZTv0_n28_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C15D0Ev,_ZTv0_n28_N8S2488C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S2488C15[];
extern void _ZN8S2488C14D1Ev();
extern void _ZN8S2488C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C14__8S2488C15[] = {
  ABISELECT(6832,3784),
  ABISELECT(6704,3704),
  ABISELECT(6576,3632),
  ABISELECT(5008,2776),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C14[0]),
  (VTBL_ENTRY)&_ZN8S2488C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C14D0Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C14__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-5008,-2776),
  (VTBL_ENTRY)&(_ZTI8S2488C14[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C14D1Ev,_ZTv0_n20_N8S2488C14D1Ev)();
extern void ABISELECT(_ZThn6704_N8S2488C14D1Ev,_ZThn3704_N8S2488C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C14D0Ev,_ZTv0_n20_N8S2488C14D0Ev)();
extern void ABISELECT(_ZThn6704_N8S2488C14D0Ev,_ZThn3704_N8S2488C14D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C14__8S2488C15[] = {
  0,
  ABISELECT(-6704,-3704),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(-6704,-3704),
  (VTBL_ENTRY)&(_ZTI8S2488C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C14D1Ev,_ZTv0_n20_N8S2488C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C14D0Ev,_ZTv0_n20_N8S2488C14D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A1__8S2488C14__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-6832,-3784),
  (VTBL_ENTRY)&(_ZTI8S2488C14[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C16D1Ev();
extern void _ZN8S2488C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C16__8S2488C15[] = {
  ABISELECT(76752,41824),
  ABISELECT(62784,34232),
  ABISELECT(10576,5800),
  ABISELECT(4912,2732),
  ABISELECT(6736,3740),
  ABISELECT(6480,3588),
  ABISELECT(6608,3660),
  ABISELECT(7120,3940),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&_ZN8S2488C16D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C16D0Ev,
};
extern void ABISELECT(_ZTv0_n80_N8S2488C16D1Ev,_ZTv0_n40_N8S2488C16D1Ev)();
extern void ABISELECT(_ZThn7120_N8S2488C16D1Ev,_ZThn3940_N8S2488C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S2488C16D0Ev,_ZTv0_n40_N8S2488C16D0Ev)();
extern void ABISELECT(_ZThn7120_N8S2488C16D0Ev,_ZThn3940_N8S2488C16D0Ev)() __attribute__((weak));
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C17__8S2488C16__8S2488C15[] = {
  ABISELECT(512,284),
  ABISELECT(512,284),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-7120,-3940),
  ABISELECT(69632,37884),
  ABISELECT(55664,30292),
  ABISELECT(3456,1860),
  ABISELECT(-2208,-1208),
  ABISELECT(-384,-200),
  ABISELECT(-640,-352),
  ABISELECT(-512,-280),
  ABISELECT(-7120,-3940),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2488C16D1Ev,_ZTv0_n40_N8S2488C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2488C16D0Ev,_ZTv0_n40_N8S2488C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
};
extern void ABISELECT(_ZTvn96_n80_N8S2488C16D1Ev,_ZTvn44_n40_N8S2488C16D1Ev)();
extern void ABISELECT(_ZTvn96_n80_N8S2488C16D0Ev,_ZTvn44_n40_N8S2488C16D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C198S2488C17__8S2488C16__8S2488C15[] = {
  ABISELECT(-2304,-1252),
  ABISELECT(-608,-324),
  ABISELECT(-736,-396),
  ABISELECT(-480,-244),
  ABISELECT(-7216,-3984),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2488C16D1Ev,_ZTvn44_n40_N8S2488C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2488C16D0Ev,_ZTvn44_n40_N8S2488C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C16D1Ev,_ZTv0_n20_N8S2488C16D1Ev)();
extern void ABISELECT(_ZThn6608_N8S2488C16D1Ev,_ZThn3660_N8S2488C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C16D0Ev,_ZTv0_n20_N8S2488C16D0Ev)();
extern void ABISELECT(_ZThn6608_N8S2488C16D0Ev,_ZThn3660_N8S2488C16D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C16__8S2488C15[] = {
  0,
  ABISELECT(-6608,-3660),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(-6608,-3660),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C16D1Ev,_ZTv0_n20_N8S2488C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C16D0Ev,_ZTv0_n20_N8S2488C16D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C16__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-6736,-3740),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C16__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-4912,-2732),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C198S2488C17__A2__8S2488C16__8S2488C15[] = {
  ABISELECT(-1152,-636),
  ABISELECT(-7632,-4224),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2488C16D1Ev,_ZTv0_n32_N8S2488C16D1Ev)();
extern void ABISELECT(_ZThn10576_N8S2488C16D1Ev,_ZThn5800_N8S2488C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2488C16D0Ev,_ZTv0_n32_N8S2488C16D0Ev)();
extern void ABISELECT(_ZThn10576_N8S2488C16D0Ev,_ZThn5800_N8S2488C16D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C16__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(-10576,-5800),
  ABISELECT(52208,28432),
  ABISELECT(-5664,-3068),
  ABISELECT(-3968,-2140),
  ABISELECT(-4096,-2212),
  ABISELECT(-3840,-2060),
  ABISELECT(-10576,-5800),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C16D1Ev,_ZTv0_n32_N8S2488C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C16D0Ev,_ZTv0_n32_N8S2488C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C16__8S2488C15[] = {
  0,
  ABISELECT(-62784,-34232),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void ABISELECT(_ZTvn2704_n80_N8S2488C16D1Ev,_ZTvn1460_n40_N8S2488C16D1Ev)();
extern void ABISELECT(_ZTvn2704_n80_N8S2488C16D0Ev,_ZTvn1460_n40_N8S2488C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2488C218S2488C17__8S2488C16__8S2488C15[] = {
  ABISELECT(66928,36424),
  ABISELECT(-4912,-2668),
  ABISELECT(-3216,-1740),
  ABISELECT(-3344,-1812),
  ABISELECT(-3088,-1660),
  ABISELECT(-9824,-5400),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2488C16D1Ev,_ZTvn1460_n40_N8S2488C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2488C16D0Ev,_ZTvn1460_n40_N8S2488C16D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2488C16D1Ev,_ZTv0_n28_N8S2488C16D1Ev)();
extern void ABISELECT(_ZThn76752_N8S2488C16D1Ev,_ZThn41824_N8S2488C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C16D0Ev,_ZTv0_n28_N8S2488C16D0Ev)();
extern void ABISELECT(_ZThn76752_N8S2488C16D0Ev,_ZThn41824_N8S2488C16D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C16__8S2488C15[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-76752,-41824),
  ABISELECT(-71840,-39092),
  ABISELECT(-70144,-38164),
  ABISELECT(-70272,-38236),
  ABISELECT(-70016,-38084),
  ABISELECT(-76752,-41824),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C16D1Ev,_ZTv0_n28_N8S2488C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C16D0Ev,_ZTv0_n28_N8S2488C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C16__8S2488C15[] = {
  ABISELECT(-70688,-38476),
  ABISELECT(-77168,-42064),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
extern void _ZN8S2488C223v14Ev();
extern void _ZN8S2488C223v15Ev();
extern void _ZN8S2488C22D1Ev();
extern void _ZN8S2488C22D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C22__8S2488C15[] = {
  ABISELECT(73968,40280),
  ABISELECT(7792,4256),
  ABISELECT(60000,32688),
  ABISELECT(2128,1188),
  ABISELECT(3824,2116),
  ABISELECT(3952,2196),
  ABISELECT(82896,45132),
  ABISELECT(76576,41696),
  ABISELECT(3696,2044),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
  (VTBL_ENTRY)&_ZN8S2488C223v14Ev,
  (VTBL_ENTRY)&_ZN8S2488C223v15Ev,
  (VTBL_ENTRY)&_ZN8S2488C22D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C22D0Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C58S2488C22__A1__8S2488C15[] = {
  ABISELECT(3696,2044),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C5[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C67S2488C58S2488C22__A5__8S2488C15[] = {
  ABISELECT(3696,2044),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n88_N8S2488C22D1Ev,_ZTv0_n44_N8S2488C22D1Ev)();
extern void ABISELECT(_ZThn76576_N8S2488C22D1Ev,_ZThn41696_N8S2488C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S2488C22D0Ev,_ZTv0_n44_N8S2488C22D0Ev)();
extern void ABISELECT(_ZThn76576_N8S2488C22D0Ev,_ZThn41696_N8S2488C22D0Ev)() __attribute__((weak));
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C23__8S2488C22__8S2488C15[] = {
  ABISELECT(512,284),
  ABISELECT(512,284),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-76576,-41696),
  ABISELECT(6320,3436),
  ABISELECT(-2608,-1416),
  ABISELECT(-16576,-9008),
  ABISELECT(-68784,-37440),
  ABISELECT(-74448,-40508),
  ABISELECT(-72624,-39500),
  ABISELECT(-72880,-39652),
  ABISELECT(-72752,-39580),
  ABISELECT(-76576,-41696),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2488C22D1Ev,_ZTv0_n44_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2488C22D0Ev,_ZTv0_n44_N8S2488C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2488C22D1Ev,_ZTv0_n28_N8S2488C22D1Ev)();
extern void ABISELECT(_ZThn82896_N8S2488C22D1Ev,_ZThn45132_N8S2488C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C22D0Ev,_ZTv0_n28_N8S2488C22D0Ev)();
extern void ABISELECT(_ZThn82896_N8S2488C22D0Ev,_ZThn45132_N8S2488C22D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C10__8S2488C22__8S2488C15[] = {
  0,
  ABISELECT(-82896,-45132),
  ABISELECT(-80768,-43944),
  ABISELECT(-79072,-43016),
  ABISELECT(-79200,-43088),
  ABISELECT(-78944,-42936),
  ABISELECT(-82896,-45132),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C22D1Ev,_ZTv0_n28_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C22D0Ev,_ZTv0_n28_N8S2488C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C22__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-3952,-2196),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C22D1Ev,_ZTv0_n20_N8S2488C22D1Ev)();
extern void ABISELECT(_ZThn3824_N8S2488C22D1Ev,_ZThn2116_N8S2488C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C22D0Ev,_ZTv0_n20_N8S2488C22D0Ev)();
extern void ABISELECT(_ZThn3824_N8S2488C22D0Ev,_ZThn2116_N8S2488C22D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C22__8S2488C15[] = {
  0,
  ABISELECT(-3824,-2116),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(-3824,-2116),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C22D1Ev,_ZTv0_n20_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C22D0Ev,_ZTv0_n20_N8S2488C22D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C22__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-2128,-1188),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C22__8S2488C15[] = {
  0,
  ABISELECT(-60000,-32688),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void ABISELECT(_ZTvn96_n88_N8S2488C22D1Ev,_ZTvn44_n44_N8S2488C22D1Ev)();
extern void ABISELECT(_ZTvn96_n88_N8S2488C22D0Ev,_ZTvn44_n44_N8S2488C22D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C198S2488C178S2488C23__8S2488C22__8S2488C15[] = {
  ABISELECT(-74544,-40552),
  ABISELECT(-72848,-39624),
  ABISELECT(-72976,-39696),
  ABISELECT(-72720,-39544),
  ABISELECT(-76672,-41740),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2488C22D1Ev,_ZTvn44_n44_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2488C22D0Ev,_ZTvn44_n44_N8S2488C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C198S2488C178S2488C23__A2__8S2488C22__8S2488C15[] = {
  ABISELECT(-73392,-39936),
  ABISELECT(-77088,-41980),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2488C22D1Ev,_ZTv0_n32_N8S2488C22D1Ev)();
extern void ABISELECT(_ZThn7792_N8S2488C22D1Ev,_ZThn4256_N8S2488C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2488C22D0Ev,_ZTv0_n32_N8S2488C22D0Ev)();
extern void ABISELECT(_ZThn7792_N8S2488C22D0Ev,_ZThn4256_N8S2488C22D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C22__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(-7792,-4256),
  ABISELECT(52208,28432),
  ABISELECT(-5664,-3068),
  ABISELECT(-3968,-2140),
  ABISELECT(-4096,-2212),
  ABISELECT(-3840,-2060),
  ABISELECT(-7792,-4256),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C22D1Ev,_ZTv0_n32_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C22D0Ev,_ZTv0_n32_N8S2488C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void ABISELECT(_ZTvn2704_n88_N8S2488C22D1Ev,_ZTvn1460_n44_N8S2488C22D1Ev)();
extern void ABISELECT(_ZTvn2704_n88_N8S2488C22D0Ev,_ZTvn1460_n44_N8S2488C22D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2488C218S2488C178S2488C23__8S2488C22__8S2488C15[] = {
  ABISELECT(-5312,-2876),
  ABISELECT(-77152,-41968),
  ABISELECT(-75456,-41040),
  ABISELECT(-75584,-41112),
  ABISELECT(-75328,-40960),
  ABISELECT(-79280,-43156),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2488C22D1Ev,_ZTvn1460_n44_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2488C22D0Ev,_ZTvn1460_n44_N8S2488C22D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2488C22D1Ev,_ZTv0_n28_N8S2488C22D1Ev)();
extern void ABISELECT(_ZThn73968_N8S2488C22D1Ev,_ZThn40280_N8S2488C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C22D0Ev,_ZTv0_n28_N8S2488C22D0Ev)();
extern void ABISELECT(_ZThn73968_N8S2488C22D0Ev,_ZThn40280_N8S2488C22D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C22__8S2488C15[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-73968,-40280),
  ABISELECT(-71840,-39092),
  ABISELECT(-70144,-38164),
  ABISELECT(-70272,-38236),
  ABISELECT(-70016,-38084),
  ABISELECT(-73968,-40280),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C22D1Ev,_ZTv0_n28_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C22D0Ev,_ZTv0_n28_N8S2488C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C22__8S2488C15[] = {
  ABISELECT(-70688,-38476),
  ABISELECT(-74384,-40520),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C21D1Ev();
extern void _ZN8S2488C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C21__A2__8S2488C15[] = {
  ABISELECT(72160,39264),
  ABISELECT(320,172),
  ABISELECT(2016,1100),
  ABISELECT(1888,1028),
  ABISELECT(2144,1180),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN8S2488C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C21D0Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C21__A2__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-2144,-1180),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev)();
extern void ABISELECT(_ZThn2016_N8S2488C21D1Ev,_ZThn1100_N8S2488C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev)();
extern void ABISELECT(_ZThn2016_N8S2488C21D0Ev,_ZThn1100_N8S2488C21D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C21__A2__8S2488C15[] = {
  0,
  ABISELECT(-2016,-1100),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(-2016,-1100),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C21__A2__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev)();
extern void ABISELECT(_ZThn72160_N8S2488C21D1Ev,_ZThn39264_N8S2488C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev)();
extern void ABISELECT(_ZThn72160_N8S2488C21D0Ev,_ZThn39264_N8S2488C21D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__8S2488C21__A2__8S2488C15[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-72160,-39264),
  ABISELECT(-71840,-39092),
  ABISELECT(-70144,-38164),
  ABISELECT(-70272,-38236),
  ABISELECT(-70016,-38084),
  ABISELECT(-72160,-39264),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A2__8S2488C21__A2__8S2488C15[] = {
  ABISELECT(-70688,-38476),
  ABISELECT(-72576,-39504),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C15[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C5[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C67S2488C5__8S2488C15[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C8D1Ev();
extern void _ZN7S2488C8D0Ev();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C15[] = {
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C8__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A1__8S2488C15[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C17D1Ev();
extern void _ZN8S2488C17D0Ev();
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C17__8S2488C15[] = {
  ABISELECT(69632,37884),
  ABISELECT(55664,30292),
  ABISELECT(3456,1860),
  ABISELECT(-2208,-1208),
  ABISELECT(-384,-200),
  ABISELECT(-640,-352),
  ABISELECT(-512,-280),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN8S2488C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C17D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
};
extern void _ZN8S2488C19D1Ev();
extern void _ZN8S2488C19D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C198S2488C17__8S2488C15[] = {
  ABISELECT(-2304,-1252),
  ABISELECT(-608,-324),
  ABISELECT(-736,-396),
  ABISELECT(-480,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN8S2488C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C108S2488C198S2488C17__8S2488C15[] = {
  ABISELECT(-2304,-1252),
  ABISELECT(-608,-324),
  ABISELECT(-736,-396),
  ABISELECT(-480,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C108S2488C198S2488C17__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(480,244),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C108S2488C198S2488C17__8S2488C15[] = {
  0,
  ABISELECT(608,324),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(608,324),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C108S2488C198S2488C17__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(2304,1252),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C198S2488C17__A2__8S2488C15[] = {
  ABISELECT(-1152,-636),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C198S2488C17__8S2488C15[] = {
  0,
  ABISELECT(608,324),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(608,324),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C198S2488C17__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(480,244),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C198S2488C17__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(2304,1252),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A__8S2488C198S2488C17__8S2488C15[] = {
  ABISELECT(-1152,-636),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C21D1Ev();
extern void _ZN8S2488C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C218S2488C17__8S2488C15[] = {
  ABISELECT(66928,36424),
  ABISELECT(-4912,-2668),
  ABISELECT(-3216,-1740),
  ABISELECT(-3344,-1812),
  ABISELECT(-3088,-1660),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN8S2488C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C21D0Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C218S2488C17__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(3088,1660),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C218S2488C17__8S2488C15[] = {
  0,
  ABISELECT(3216,1740),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(3216,1740),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C218S2488C17__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(4912,2668),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev)();
extern void ABISELECT(_ZThn66928_N8S2488C21D1Ev,_ZThn36424_N8S2488C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev)();
extern void ABISELECT(_ZThn66928_N8S2488C21D0Ev,_ZThn36424_N8S2488C21D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__8S2488C218S2488C17__8S2488C15[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-66928,-36424),
  ABISELECT(-71840,-39092),
  ABISELECT(-70144,-38164),
  ABISELECT(-70272,-38236),
  ABISELECT(-70016,-38084),
  ABISELECT(-66928,-36424),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A2__8S2488C218S2488C17__8S2488C15[] = {
  ABISELECT(-70688,-38476),
  ABISELECT(-67344,-36664),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZThn96_N8S2488C17D1Ev,_ZThn44_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S2488C17D0Ev,_ZThn44_N8S2488C17D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A__8S2488C17__8S2488C15[] = {
  ABISELECT(-2304,-1252),
  ABISELECT(-608,-324),
  ABISELECT(-736,-396),
  ABISELECT(-480,-244),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C17D1Ev,_ZThn44_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C17D0Ev,_ZThn44_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C17__8S2488C15[] = {
  0,
  ABISELECT(512,280),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(512,280),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C17__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(384,200),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C17__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(2208,1208),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A2__8S2488C17__8S2488C15[] = {
  ABISELECT(-1152,-636),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn3456_N8S2488C17D1Ev,_ZThn1860_N8S2488C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev)();
extern void ABISELECT(_ZThn3456_N8S2488C17D0Ev,_ZThn1860_N8S2488C17D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C17__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(-3456,-1860),
  ABISELECT(52208,28432),
  ABISELECT(-5664,-3068),
  ABISELECT(-3968,-2140),
  ABISELECT(-4096,-2212),
  ABISELECT(-3840,-2060),
  ABISELECT(-3456,-1860),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C17__8S2488C15[] = {
  0,
  ABISELECT(-55664,-30292),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void ABISELECT(_ZThn2704_N8S2488C17D1Ev,_ZThn1460_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2488C17D0Ev,_ZThn1460_N8S2488C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2488C21__8S2488C17__8S2488C15[] = {
  ABISELECT(66928,36424),
  ABISELECT(-4912,-2668),
  ABISELECT(-3216,-1740),
  ABISELECT(-3344,-1812),
  ABISELECT(-3088,-1660),
  ABISELECT(-2704,-1460),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C17D1Ev,_ZThn1460_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C17D0Ev,_ZThn1460_N8S2488C17D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn69632_N8S2488C17D1Ev,_ZThn37884_N8S2488C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev)();
extern void ABISELECT(_ZThn69632_N8S2488C17D0Ev,_ZThn37884_N8S2488C17D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C17__8S2488C15[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-69632,-37884),
  ABISELECT(-71840,-39092),
  ABISELECT(-70144,-38164),
  ABISELECT(-70272,-38236),
  ABISELECT(-70016,-38084),
  ABISELECT(-69632,-37884),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C17__8S2488C15[] = {
  ABISELECT(-70688,-38476),
  ABISELECT(-70048,-38124),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C20D1Ev();
extern void _ZN8S2488C20D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C15[] = {
  ABISELECT(52208,28432),
  ABISELECT(-5664,-3068),
  ABISELECT(-3968,-2140),
  ABISELECT(-4096,-2212),
  ABISELECT(-3840,-2060),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN8S2488C20D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C20D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN7S2488C9D1Ev();
extern void _ZN7S2488C9D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C98S2488C20__8S2488C15[] = {
  ABISELECT(-5664,-3068),
  ABISELECT(-3968,-2140),
  ABISELECT(-4096,-2212),
  ABISELECT(-3840,-2060),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C107S2488C98S2488C20__A1__8S2488C15[] = {
  ABISELECT(-5664,-3068),
  ABISELECT(-3968,-2140),
  ABISELECT(-4096,-2212),
  ABISELECT(-3840,-2060),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C107S2488C98S2488C20__A1__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(3840,2060),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C107S2488C98S2488C20__A1__8S2488C15[] = {
  0,
  ABISELECT(3968,2140),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(3968,2140),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C107S2488C98S2488C20__A1__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(5664,3068),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C98S2488C20__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(3840,2060),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__7S2488C98S2488C20__8S2488C15[] = {
  0,
  ABISELECT(3968,2140),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(3968,2140),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__7S2488C98S2488C20__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(5664,3068),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C20__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(5664,3068),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A1__8S2488C20__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(3840,2060),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C20D1Ev,_ZTv0_n20_N8S2488C20D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C20D0Ev,_ZTv0_n20_N8S2488C20D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C20__8S2488C15[] = {
  0,
  ABISELECT(3968,2140),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(3968,2140),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C20D1Ev,_ZTv0_n20_N8S2488C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C20D0Ev,_ZTv0_n20_N8S2488C20D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C20__8S2488C15[] = {
  0,
  ABISELECT(-52208,-28432),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void _ZN8S2488C19D1Ev();
extern void _ZN8S2488C19D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C15[] = {
  ABISELECT(-71840,-39092),
  ABISELECT(-70144,-38164),
  ABISELECT(-70272,-38236),
  ABISELECT(-70016,-38084),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN8S2488C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C108S2488C19__A2__8S2488C15[] = {
  ABISELECT(-71840,-39092),
  ABISELECT(-70144,-38164),
  ABISELECT(-70272,-38236),
  ABISELECT(-70016,-38084),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C108S2488C19__A2__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(70016,38084),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C108S2488C19__A2__8S2488C15[] = {
  0,
  ABISELECT(70144,38164),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(70144,38164),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C108S2488C19__A2__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(71840,39092),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C15[] = {
  ABISELECT(-70688,-38476),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C19__A1__8S2488C15[] = {
  0,
  ABISELECT(70144,38164),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(70144,38164),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C19__A1__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(70016,38084),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C19__A1__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(71840,39092),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A__8S2488C19__A1__8S2488C15[] = {
  ABISELECT(-70688,-38476),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C23D1Ev();
extern void _ZN8S2488C23D0Ev();
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C23__8S2488C15[] = {
  ABISELECT(6320,3436),
  ABISELECT(-2608,-1416),
  ABISELECT(-16576,-9008),
  ABISELECT(-68784,-37440),
  ABISELECT(-74448,-40508),
  ABISELECT(-72624,-39500),
  ABISELECT(-72880,-39652),
  ABISELECT(-72752,-39580),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN8S2488C23D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C23D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
};
extern void _ZN8S2488C17D1Ev();
extern void _ZN8S2488C17D0Ev();
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C178S2488C23__A1__8S2488C15[] = {
  ABISELECT(-2608,-1416),
  ABISELECT(-16576,-9008),
  ABISELECT(-68784,-37440),
  ABISELECT(-74448,-40508),
  ABISELECT(-72624,-39500),
  ABISELECT(-72880,-39652),
  ABISELECT(-72752,-39580),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN8S2488C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C17D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
};
extern void _ZN8S2488C19D1Ev();
extern void _ZN8S2488C19D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C198S2488C178S2488C23__A2__8S2488C15[] = {
  ABISELECT(-74544,-40552),
  ABISELECT(-72848,-39624),
  ABISELECT(-72976,-39696),
  ABISELECT(-72720,-39544),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN8S2488C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C108S2488C198S2488C178S2488C23__A4__8S2488C15[] = {
  ABISELECT(-74544,-40552),
  ABISELECT(-72848,-39624),
  ABISELECT(-72976,-39696),
  ABISELECT(-72720,-39544),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C108S2488C198S2488C178S2488C23__A4__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(72720,39544),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C108S2488C198S2488C178S2488C23__A4__8S2488C15[] = {
  0,
  ABISELECT(72848,39624),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(72848,39624),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C108S2488C198S2488C178S2488C23__A4__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(74544,40552),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C198S2488C178S2488C23__A4__8S2488C15[] = {
  ABISELECT(-73392,-39936),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C198S2488C178S2488C23__A2__8S2488C15[] = {
  0,
  ABISELECT(72848,39624),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(72848,39624),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C198S2488C178S2488C23__A2__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(72720,39544),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C198S2488C178S2488C23__A2__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(74544,40552),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A__8S2488C198S2488C178S2488C23__A2__8S2488C15[] = {
  ABISELECT(-73392,-39936),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C21D1Ev();
extern void _ZN8S2488C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C218S2488C178S2488C23__A1__8S2488C15[] = {
  ABISELECT(-5312,-2876),
  ABISELECT(-77152,-41968),
  ABISELECT(-75456,-41040),
  ABISELECT(-75584,-41112),
  ABISELECT(-75328,-40960),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN8S2488C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C21D0Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C218S2488C178S2488C23__A1__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(75328,40960),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C218S2488C178S2488C23__A1__8S2488C15[] = {
  0,
  ABISELECT(75456,41040),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(75456,41040),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C218S2488C178S2488C23__A1__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(77152,41968),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__8S2488C218S2488C178S2488C23__A1__8S2488C15[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(5312,2876),
  ABISELECT(-71840,-39092),
  ABISELECT(-70144,-38164),
  ABISELECT(-70272,-38236),
  ABISELECT(-70016,-38084),
  ABISELECT(5312,2876),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A2__8S2488C218S2488C178S2488C23__A1__8S2488C15[] = {
  ABISELECT(-70688,-38476),
  ABISELECT(4896,2636),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZThn96_N8S2488C17D1Ev,_ZThn44_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S2488C17D0Ev,_ZThn44_N8S2488C17D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A__8S2488C178S2488C23__A1__8S2488C15[] = {
  ABISELECT(-74544,-40552),
  ABISELECT(-72848,-39624),
  ABISELECT(-72976,-39696),
  ABISELECT(-72720,-39544),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C17D1Ev,_ZThn44_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C17D0Ev,_ZThn44_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C178S2488C23__A1__8S2488C15[] = {
  0,
  ABISELECT(72752,39580),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(72752,39580),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C178S2488C23__A1__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(72624,39500),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C178S2488C23__A1__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(74448,40508),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A2__8S2488C178S2488C23__A1__8S2488C15[] = {
  ABISELECT(-73392,-39936),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C178S2488C23__A1__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(68784,37440),
  ABISELECT(52208,28432),
  ABISELECT(-5664,-3068),
  ABISELECT(-3968,-2140),
  ABISELECT(-4096,-2212),
  ABISELECT(-3840,-2060),
  ABISELECT(68784,37440),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C178S2488C23__A1__8S2488C15[] = {
  0,
  ABISELECT(16576,9008),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void ABISELECT(_ZThn2704_N8S2488C17D1Ev,_ZThn1460_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2488C17D0Ev,_ZThn1460_N8S2488C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2488C21__8S2488C178S2488C23__A1__8S2488C15[] = {
  ABISELECT(-5312,-2876),
  ABISELECT(-77152,-41968),
  ABISELECT(-75456,-41040),
  ABISELECT(-75584,-41112),
  ABISELECT(-75328,-40960),
  ABISELECT(-2704,-1460),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C17D1Ev,_ZThn1460_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C17D0Ev,_ZThn1460_N8S2488C17D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C178S2488C23__A1__8S2488C15[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(2608,1416),
  ABISELECT(-71840,-39092),
  ABISELECT(-70144,-38164),
  ABISELECT(-70272,-38236),
  ABISELECT(-70016,-38084),
  ABISELECT(2608,1416),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C178S2488C23__A1__8S2488C15[] = {
  ABISELECT(-70688,-38476),
  ABISELECT(2192,1176),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev)();
extern void ABISELECT(_ZThn6320_N8S2488C23D1Ev,_ZThn3436_N8S2488C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev)();
extern void ABISELECT(_ZThn6320_N8S2488C23D0Ev,_ZThn3436_N8S2488C23D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C10__8S2488C23__8S2488C15[] = {
  0,
  ABISELECT(-6320,-3436),
  ABISELECT(-80768,-43944),
  ABISELECT(-79072,-43016),
  ABISELECT(-79200,-43088),
  ABISELECT(-78944,-42936),
  ABISELECT(-6320,-3436),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C23__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(72624,39500),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C23D1Ev,_ZTv0_n20_N8S2488C23D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C23D0Ev,_ZTv0_n20_N8S2488C23D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C23__8S2488C15[] = {
  0,
  ABISELECT(72752,39580),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(72752,39580),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C23D1Ev,_ZTv0_n20_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C23D0Ev,_ZTv0_n20_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C23__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(74448,40508),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C23__8S2488C15[] = {
  0,
  ABISELECT(16576,9008),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void ABISELECT(_ZThn96_N8S2488C23D1Ev,_ZThn44_N8S2488C23D1Ev)();
extern void ABISELECT(_ZThn96_N8S2488C23D0Ev,_ZThn44_N8S2488C23D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C198S2488C17__8S2488C23__8S2488C15[] = {
  ABISELECT(-74544,-40552),
  ABISELECT(-72848,-39624),
  ABISELECT(-72976,-39696),
  ABISELECT(-72720,-39544),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C23D1Ev,_ZThn44_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C23D0Ev,_ZThn44_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C198S2488C17__A2__8S2488C23__8S2488C15[] = {
  ABISELECT(-73392,-39936),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2488C23D1Ev,_ZTv0_n32_N8S2488C23D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S2488C23D0Ev,_ZTv0_n32_N8S2488C23D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C23__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(68784,37440),
  ABISELECT(52208,28432),
  ABISELECT(-5664,-3068),
  ABISELECT(-3968,-2140),
  ABISELECT(-4096,-2212),
  ABISELECT(-3840,-2060),
  ABISELECT(68784,37440),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C23D1Ev,_ZTv0_n32_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C23D0Ev,_ZTv0_n32_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void ABISELECT(_ZThn2704_N8S2488C23D1Ev,_ZThn1460_N8S2488C23D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2488C23D0Ev,_ZThn1460_N8S2488C23D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2488C218S2488C17__8S2488C23__8S2488C15[] = {
  ABISELECT(-5312,-2876),
  ABISELECT(-77152,-41968),
  ABISELECT(-75456,-41040),
  ABISELECT(-75584,-41112),
  ABISELECT(-75328,-40960),
  ABISELECT(-2704,-1460),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C23D1Ev,_ZThn1460_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C23D0Ev,_ZThn1460_N8S2488C23D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C23__8S2488C15[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(2608,1416),
  ABISELECT(-71840,-39092),
  ABISELECT(-70144,-38164),
  ABISELECT(-70272,-38236),
  ABISELECT(-70016,-38084),
  ABISELECT(2608,1416),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C23__8S2488C15[] = {
  ABISELECT(-70688,-38476),
  ABISELECT(2192,1176),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C10__A3__8S2488C15[] = {
  ABISELECT(-80768,-43944),
  ABISELECT(-79072,-43016),
  ABISELECT(-79200,-43088),
  ABISELECT(-78944,-42936),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C10__A3__8S2488C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(78944,42936),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C10__A3__8S2488C15[] = {
  0,
  ABISELECT(79072,43016),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(79072,43016),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C10__A3__8S2488C15[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(80768,43944),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
static  VTT_ENTRY vtt_S2488C15[] = {
  {&(_ZTV8S2488C15[12]),  12,230},
  {&(_tg__ZTV8S2488C14__8S2488C15[6]),  6,8},
  {&(_tg__ZTV7S2488C5__8S2488C14__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C8__8S2488C14__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A1__8S2488C14__8S2488C15[5]),  5,7},
  {&(_tg__ZTV8S2488C16__8S2488C15[10]),  10,12},
  {&(_tg__ZTV8S2488C17__8S2488C16__8S2488C15[18]),  18,22},
  {&(_tg__ZTV8S2488C198S2488C17__8S2488C16__8S2488C15[6]),  6,12},
  {&(_tg__ZTV7S2488C8__8S2488C16__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C16__8S2488C15[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C16__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C198S2488C17__A2__8S2488C16__8S2488C15[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C16__8S2488C15[11]),  11,16},
  {&(_tg__ZTV8S2488C13__8S2488C16__8S2488C15[3]),  3,4},
  {&(_tg__ZTV8S2488C218S2488C17__8S2488C16__8S2488C15[7]),  7,9},
  {&(_tg__ZTV8S2488C19__A1__8S2488C16__8S2488C15[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C16__8S2488C15[3]),  3,5},
  {&(_tg__ZTV8S2488C22__8S2488C15[11]),  11,18},
  {&(_tg__ZTV7S2488C58S2488C22__A1__8S2488C15[3]),  3,6},
  {&(_tg__ZTV7S2488C67S2488C58S2488C22__A5__8S2488C15[3]),  3,5},
  {&(_tg__ZTV8S2488C23__8S2488C22__8S2488C15[19]),  19,23},
  {&(_tg__ZTV8S2488C10__8S2488C22__8S2488C15[8]),  8,11},
  {&(_tg__ZTV7S2488C6__8S2488C22__8S2488C15[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C22__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C22__8S2488C15[6]),  6,9},
  {&(_tg__ZTV8S2488C13__8S2488C22__8S2488C15[3]),  3,4},
  {&(_tg__ZTV8S2488C198S2488C178S2488C23__8S2488C22__8S2488C15[6]),  6,12},
  {&(_tg__ZTV7S2488C68S2488C198S2488C178S2488C23__A2__8S2488C22__8S2488C15[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C22__8S2488C15[11]),  11,16},
  {&(_tg__ZTV8S2488C218S2488C178S2488C23__8S2488C22__8S2488C15[7]),  7,9},
  {&(_tg__ZTV8S2488C19__A1__8S2488C22__8S2488C15[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C22__8S2488C15[3]),  3,5},
  {&(_tg__ZTV8S2488C21__A2__8S2488C15[7]),  7,9},
  {&(_tg__ZTV7S2488C6__8S2488C21__A2__8S2488C15[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C21__A2__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C21__A2__8S2488C15[6]),  6,9},
  {&(_tg__ZTV8S2488C19__8S2488C21__A2__8S2488C15[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A2__8S2488C21__A2__8S2488C15[3]),  3,5},
  {&(_ZTV8S2488C15[59]),  59,230},
  {&(_ZTV8S2488C15[68]),  68,230},
  {&(_ZTV8S2488C15[76]),  76,230},
  {&(_ZTV8S2488C15[24]),  24,230},
  {&(_ZTV8S2488C15[96]),  96,230},
  {&(_ZTV8S2488C15[106]),  106,230},
  {&(_ZTV8S2488C15[115]),  115,230},
  {&(_ZTV8S2488C15[137]),  137,230},
  {&(_ZTV8S2488C15[145]),  145,230},
  {&(_ZTV8S2488C15[124]),  124,230},
  {&(_ZTV8S2488C15[159]),  159,230},
  {&(_ZTV8S2488C15[168]),  168,230},
  {&(_ZTV8S2488C15[37]),  37,230},
  {&(_ZTV8S2488C15[189]),  189,230},
  {&(_ZTV8S2488C15[227]),  227,230},
  {&(_ZTV8S2488C15[199]),  199,230},
  {&(_ZTV8S2488C15[208]),  208,230},
  {&(_ZTV8S2488C15[217]),  217,230},
  {&(_ZTV8S2488C15[51]),  51,230},
  {&(_tg__ZTV7S2488C5__8S2488C15[3]),  3,6},
  {&(_tg__ZTV7S2488C67S2488C5__8S2488C15[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C15[4]),  4,7},
  {&(_tg__ZTV7S2488C6__7S2488C8__8S2488C15[5]),  5,7},
  {&(_tg__ZTV7S2488C6__A1__8S2488C15[3]),  3,5},
  {&(_tg__ZTV8S2488C17__8S2488C15[9]),  9,13},
  {&(_tg__ZTV8S2488C198S2488C17__8S2488C15[6]),  6,12},
  {&(_tg__ZTV8S2488C108S2488C198S2488C17__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C108S2488C198S2488C17__8S2488C15[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C108S2488C198S2488C17__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C108S2488C198S2488C17__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C198S2488C17__A2__8S2488C15[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C198S2488C17__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C198S2488C17__8S2488C15[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C198S2488C17__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A__8S2488C198S2488C17__8S2488C15[3]),  3,5},
  {&(_tg__ZTV8S2488C218S2488C17__8S2488C15[7]),  7,9},
  {&(_tg__ZTV7S2488C6__8S2488C218S2488C17__8S2488C15[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C218S2488C17__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C218S2488C17__8S2488C15[6]),  6,9},
  {&(_tg__ZTV8S2488C19__8S2488C218S2488C17__8S2488C15[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A2__8S2488C218S2488C17__8S2488C15[3]),  3,5},
  {&(_tg__ZTV8S2488C19__A__8S2488C17__8S2488C15[6]),  6,12},
  {&(_tg__ZTV7S2488C8__8S2488C17__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C17__8S2488C15[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C17__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C19__A2__8S2488C17__8S2488C15[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C17__8S2488C15[11]),  11,16},
  {&(_tg__ZTV8S2488C13__8S2488C17__8S2488C15[3]),  3,4},
  {&(_tg__ZTV8S2488C21__8S2488C17__8S2488C15[7]),  7,9},
  {&(_tg__ZTV8S2488C19__A1__8S2488C17__8S2488C15[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C17__8S2488C15[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C15[7]),  7,12},
  {&(_tg__ZTV7S2488C98S2488C20__8S2488C15[6]),  6,11},
  {&(_tg__ZTV8S2488C107S2488C98S2488C20__A1__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C107S2488C98S2488C20__A1__8S2488C15[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C107S2488C98S2488C20__A1__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C107S2488C98S2488C20__A1__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C6__7S2488C98S2488C20__8S2488C15[5]),  5,7},
  {&(_tg__ZTV7S2488C8__7S2488C98S2488C20__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C5__7S2488C98S2488C20__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C20__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A1__8S2488C20__8S2488C15[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C20__8S2488C15[6]),  6,9},
  {&(_tg__ZTV8S2488C13__8S2488C20__8S2488C15[3]),  3,4},
  {&(_tg__ZTV8S2488C19__A1__8S2488C15[6]),  6,12},
  {&(_tg__ZTV8S2488C108S2488C19__A2__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C108S2488C19__A2__8S2488C15[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C108S2488C19__A2__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C108S2488C19__A2__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C15[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C19__A1__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C19__A1__8S2488C15[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C19__A1__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A__8S2488C19__A1__8S2488C15[3]),  3,5},
  {&(_tg__ZTV8S2488C23__8S2488C15[10]),  10,14},
  {&(_tg__ZTV8S2488C178S2488C23__A1__8S2488C15[9]),  9,13},
  {&(_tg__ZTV8S2488C198S2488C178S2488C23__A2__8S2488C15[6]),  6,12},
  {&(_tg__ZTV8S2488C108S2488C198S2488C178S2488C23__A4__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C108S2488C198S2488C178S2488C23__A4__8S2488C15[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C108S2488C198S2488C178S2488C23__A4__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C108S2488C198S2488C178S2488C23__A4__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C198S2488C178S2488C23__A4__8S2488C15[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C198S2488C178S2488C23__A2__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C198S2488C178S2488C23__A2__8S2488C15[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C198S2488C178S2488C23__A2__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A__8S2488C198S2488C178S2488C23__A2__8S2488C15[3]),  3,5},
  {&(_tg__ZTV8S2488C218S2488C178S2488C23__A1__8S2488C15[7]),  7,9},
  {&(_tg__ZTV7S2488C6__8S2488C218S2488C178S2488C23__A1__8S2488C15[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C218S2488C178S2488C23__A1__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C218S2488C178S2488C23__A1__8S2488C15[6]),  6,9},
  {&(_tg__ZTV8S2488C19__8S2488C218S2488C178S2488C23__A1__8S2488C15[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A2__8S2488C218S2488C178S2488C23__A1__8S2488C15[3]),  3,5},
  {&(_tg__ZTV8S2488C19__A__8S2488C178S2488C23__A1__8S2488C15[6]),  6,12},
  {&(_tg__ZTV7S2488C8__8S2488C178S2488C23__A1__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C178S2488C23__A1__8S2488C15[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C178S2488C23__A1__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C19__A2__8S2488C178S2488C23__A1__8S2488C15[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C178S2488C23__A1__8S2488C15[11]),  11,16},
  {&(_tg__ZTV8S2488C13__8S2488C178S2488C23__A1__8S2488C15[3]),  3,4},
  {&(_tg__ZTV8S2488C21__8S2488C178S2488C23__A1__8S2488C15[7]),  7,9},
  {&(_tg__ZTV8S2488C19__A1__8S2488C178S2488C23__A1__8S2488C15[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C178S2488C23__A1__8S2488C15[3]),  3,5},
  {&(_tg__ZTV8S2488C10__8S2488C23__8S2488C15[8]),  8,11},
  {&(_tg__ZTV7S2488C6__8S2488C23__8S2488C15[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C23__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C23__8S2488C15[6]),  6,9},
  {&(_tg__ZTV8S2488C13__8S2488C23__8S2488C15[3]),  3,4},
  {&(_tg__ZTV8S2488C198S2488C17__8S2488C23__8S2488C15[6]),  6,12},
  {&(_tg__ZTV7S2488C68S2488C198S2488C17__A2__8S2488C23__8S2488C15[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C23__8S2488C15[11]),  11,16},
  {&(_tg__ZTV8S2488C218S2488C17__8S2488C23__8S2488C15[7]),  7,9},
  {&(_tg__ZTV8S2488C19__A1__8S2488C23__8S2488C15[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C23__8S2488C15[3]),  3,5},
  {&(_tg__ZTV8S2488C10__A3__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C10__A3__8S2488C15[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C10__A3__8S2488C15[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C10__A3__8S2488C15[6]),  6,9},
};
extern VTBL_ENTRY _ZTI8S2488C15[];
extern  VTBL_ENTRY _ZTV8S2488C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C15[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N8S2488C23D0Ev,_ZThn3436_N8S2488C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N8S2488C23D1Ev,_ZThn3436_N8S2488C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn69632_N8S2488C17D0Ev,_ZThn37884_N8S2488C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn69632_N8S2488C17D1Ev,_ZThn37884_N8S2488C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N8S2488C17D0Ev,_ZThn1860_N8S2488C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N8S2488C17D1Ev,_ZThn1860_N8S2488C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn66928_N8S2488C21D0Ev,_ZThn36424_N8S2488C21D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72160_N8S2488C21D0Ev,_ZThn39264_N8S2488C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn66928_N8S2488C21D1Ev,_ZThn36424_N8S2488C21D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72160_N8S2488C21D1Ev,_ZThn39264_N8S2488C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N8S2488C21D0Ev,_ZThn1100_N8S2488C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N8S2488C21D1Ev,_ZThn1100_N8S2488C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C22D0Ev,_ZTv0_n32_N8S2488C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7792_N8S2488C22D0Ev,_ZThn4256_N8S2488C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C22D1Ev,_ZTv0_n32_N8S2488C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7792_N8S2488C22D1Ev,_ZThn4256_N8S2488C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C22D0Ev,_ZTv0_n20_N8S2488C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3824_N8S2488C22D0Ev,_ZThn2116_N8S2488C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C22D1Ev,_ZTv0_n20_N8S2488C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3824_N8S2488C22D1Ev,_ZThn2116_N8S2488C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C22D0Ev,_ZTv0_n28_N8S2488C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn73968_N8S2488C22D0Ev,_ZThn40280_N8S2488C22D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn82896_N8S2488C22D0Ev,_ZThn45132_N8S2488C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C22D1Ev,_ZTv0_n28_N8S2488C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn73968_N8S2488C22D1Ev,_ZThn40280_N8S2488C22D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn82896_N8S2488C22D1Ev,_ZThn45132_N8S2488C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2488C22D0Ev,_ZTv0_n44_N8S2488C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn76576_N8S2488C22D0Ev,_ZThn41696_N8S2488C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2488C22D1Ev,_ZTv0_n44_N8S2488C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn76576_N8S2488C22D1Ev,_ZThn41696_N8S2488C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C16D0Ev,_ZTv0_n28_N8S2488C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn76752_N8S2488C16D0Ev,_ZThn41824_N8S2488C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C16D1Ev,_ZTv0_n28_N8S2488C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn76752_N8S2488C16D1Ev,_ZThn41824_N8S2488C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C16D0Ev,_ZTv0_n32_N8S2488C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10576_N8S2488C16D0Ev,_ZThn5800_N8S2488C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C16D1Ev,_ZTv0_n32_N8S2488C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10576_N8S2488C16D1Ev,_ZThn5800_N8S2488C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C16D0Ev,_ZTv0_n20_N8S2488C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6608_N8S2488C16D0Ev,_ZThn3660_N8S2488C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C16D1Ev,_ZTv0_n20_N8S2488C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6608_N8S2488C16D1Ev,_ZThn3660_N8S2488C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2488C16D0Ev,_ZTv0_n40_N8S2488C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2488C16D0Ev,_ZThn3940_N8S2488C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2488C16D1Ev,_ZTv0_n40_N8S2488C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7120_N8S2488C16D1Ev,_ZThn3940_N8S2488C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C14D0Ev,_ZTv0_n20_N8S2488C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N8S2488C14D0Ev,_ZThn3704_N8S2488C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C14D1Ev,_ZTv0_n20_N8S2488C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N8S2488C14D1Ev,_ZThn3704_N8S2488C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2488C15D0Ev,_ZTv0_n44_N8S2488C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn79456_N8S2488C15D0Ev,_ZThn43284_N8S2488C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2488C15D1Ev,_ZTv0_n44_N8S2488C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn79456_N8S2488C15D1Ev,_ZThn43284_N8S2488C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C15D0Ev,_ZTv0_n28_N8S2488C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn85776_N8S2488C15D0Ev,_ZThn46720_N8S2488C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn76848_N8S2488C15D0Ev,_ZThn41868_N8S2488C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C15D1Ev,_ZTv0_n28_N8S2488C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn85776_N8S2488C15D1Ev,_ZThn46720_N8S2488C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn76848_N8S2488C15D1Ev,_ZThn41868_N8S2488C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C15D0Ev,_ZTv0_n32_N8S2488C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10672_N8S2488C15D0Ev,_ZThn5844_N8S2488C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C15D1Ev,_ZTv0_n32_N8S2488C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10672_N8S2488C15D1Ev,_ZThn5844_N8S2488C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2488C15D0Ev,_ZTv0_n40_N8S2488C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7216_N8S2488C15D0Ev,_ZThn3984_N8S2488C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2488C15D1Ev,_ZTv0_n40_N8S2488C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7216_N8S2488C15D1Ev,_ZThn3984_N8S2488C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C15D0Ev,_ZTv0_n20_N8S2488C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N8S2488C15D0Ev,_ZThn3704_N8S2488C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C15D1Ev,_ZTv0_n20_N8S2488C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N8S2488C15D1Ev,_ZThn3704_N8S2488C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2488C15 = {  "S2488C15", // class name
  bases_S2488C15, 45,
  &(vtc_S2488C15[0]), // expected_vtbl_contents
  &(vtt_S2488C15[0]), // expected_vtt_contents
  ABISELECT(86064,46888), // object size
  NSPAIRA(_ZTI8S2488C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S2488C15),230, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2488C15),155, //virtual table table var
  31, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2488C24  : virtual S2488C6 , virtual S2488C20 , S2488C8 , S2489C18 {
  void *s2488c24f0;
  void *s2488c24f1;
  int s2488c24f2;
  void *s2488c24f3;
  virtual  ~S2488C24(); // _ZN8S2488C24D2Ev
  S2488C24(); // tgen
};
//SIG(-1 S2488C24) C1{ VBC2{ VBC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} v1 v2 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC3 Fl FU5} VBC6{ VBC7{ BC3 BC2 v3 Fp FD FC3[7] FD FU4 Fs Fl Fl} VBC2 VBC8{ VBC3 VBC2 vd v4 FL FL FL Fl Fi FU5 Fc[10] Fi} BC9{ BC10{ BC3 VBC2 VBC8 VBC7 vd v5 Fc Fi[7] Fl[5] Fl FL FL FU11{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} vd v6 v7 Fp Fp Fp Fi FC12{} Fl Fl} VBC13{ v8 FD FC14{ VBC7 VBC8 Fi Fp Fi FU5}[6] Fc Fp Fp Fi[6] Fi Fp Fl Fp Fi Fp Fp} vd Fc Fs[3] FC15{ BC3 VBC2 VBC8 VBC7 VBC16{ VBC8 BC10 BC3 BC2 vd v9 v10 v11 FU5 Fi Fl Fc Fp FC7 Fs} vd FL Fi Fp Fp Fl}[10] FC7 FL FL:5 Fi Fp[6] Fl[2] FL Fi} BC8 BC17{ vd m FU4} vd Fp Fp Fi Fp}


 S2488C24 ::~S2488C24(){ note_dtor("S2488C24", this);}
S2488C24 ::S2488C24(){ note_ctor("S2488C24", this);} // tgen

static void Test_S2488C24()
{
  extern Class_Descriptor cd_S2488C24;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4290,9344)];
    init_test(&cd_S2488C24, buf);
    S2488C24 *dp, &lv = *(dp=new (buf) S2488C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(68624,37372), "sizeof(S2488C24)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2488C24)");
    /*is_ambiguous_... S2488C24::S2488C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*), ABISELECT(640,340), "S2488C24");
    check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C5*), ABISELECT(640,340), "S2488C24");
    /*is_ambiguous_... S2488C24::S2488C8 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C8*), ABISELECT(640,340), "S2488C24");
    /*is_ambiguous_... S2488C24::S2488C8 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C8*), ABISELECT(640,340), "S2488C24");
    /*is_ambiguous_... S2488C24::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*), ABISELECT(256,140), "S2488C24");
    /*is_ambiguous_... S2488C20::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C20*), ABISELECT(256,140), "S2488C24");
    /*is_ambiguous_... S2488C24::S2488C8 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C8*), ABISELECT(256,140), "S2488C24");
    /*is_ambiguous_... S2488C10::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(256,140), "S2488C24");
    /*is_ambiguous_... S2488C24::S2488C8 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C8*), ABISELECT(256,140), "S2488C24");
    /*is_ambiguous_... S2488C5::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C5*), ABISELECT(53360,29044), "S2488C24");
    check_base_class_offset(lv, (S2488C6*)(S2488C5*), ABISELECT(52976,28844), "S2488C24");
    check_base_class_offset(lv, (S2488C5*)(S2488C20*), ABISELECT(52976,28844), "S2488C24");
    check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(52976,28844), "S2488C24");
    check_base_class_offset(lv, (S2488C8*)(S2488C20*), ABISELECT(54536,29700), "S2488C24");
    check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(54536,29700), "S2488C24");
    /*is_ambiguous_... S2488C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(784,416), "S2488C24");
    check_base_class_offset(lv, (S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(768,412), "S2488C24");
    check_base_class_offset(lv, (S2488C9*)(S2488C20*), ABISELECT(768,412), "S2488C24");
    check_base_class_offset(lv, (S2488C13*)(S2488C20*), ABISELECT(54656,29780), "S2488C24");
    check_base_class_offset(lv, (S2488C20*), ABISELECT(768,412), "S2488C24");
    /*is_ambiguous_... S2488C24::S2488C8 */ AMB_check_base_class_offset(lv, (S2488C8*), 0, "S2488C24");
    check_base_class_offset(lv, (S2489C18*), ABISELECT(128,80), "S2488C24");
    check_field_offset(lv, s2488c24f0, ABISELECT(224,124), "S2488C24.s2488c24f0");
    check_field_offset(lv, s2488c24f1, ABISELECT(232,128), "S2488C24.s2488c24f1");
    check_field_offset(lv, s2488c24f2, ABISELECT(240,132), "S2488C24.s2488c24f2");
    check_field_offset(lv, s2488c24f3, ABISELECT(248,136), "S2488C24.s2488c24f3");
    test_class_info(&lv, &cd_S2488C24);
    dp->~S2488C24();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2488C24(Test_S2488C24, "S2488C24", ABISELECT(68624,37372));

#else // __cplusplus

extern void _ZN8S2488C24C1Ev();
extern void _ZN8S2488C24D2Ev();
Name_Map name_map_S2488C24[] = {
  NSPAIR(_ZN8S2488C24C1Ev),
  NSPAIR(_ZN8S2488C24D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C5;
extern VTBL_ENTRY _ZTI7S2488C5[];
extern  VTBL_ENTRY _ZTV7S2488C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C5[];
extern Class_Descriptor cd_S2488C8;
extern VTBL_ENTRY _ZTI7S2488C8[];
extern  VTBL_ENTRY _ZTV7S2488C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2488C9;
extern VTBL_ENTRY _ZTI7S2488C9[];
extern  VTBL_ENTRY _ZTV7S2488C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C9[];
extern Class_Descriptor cd_S2488C13;
extern VTBL_ENTRY _ZTI8S2488C13[];
extern  VTBL_ENTRY _ZTV8S2488C13[];
extern Class_Descriptor cd_S2488C20;
extern VTBL_ENTRY _ZTI8S2488C20[];
extern  VTBL_ENTRY _ZTV8S2488C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C20[];
extern Class_Descriptor cd_S2488C8;
extern VTBL_ENTRY _ZTI7S2488C8[];
extern  VTBL_ENTRY _ZTV7S2488C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C8[];
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
static Base_Class bases_S2488C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(640,340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S2488C6,    ABISELECT(256,140), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(53360,29044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(52976,28844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2488C5,    ABISELECT(52976,28844), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2488C8,    ABISELECT(54536,29700), //bcp->offset
    47, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(784,416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(768,412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2488C9,    ABISELECT(768,412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2488C13,    ABISELECT(54656,29780), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2488C20,    ABISELECT(768,412), //bcp->offset
    22, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2488C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C18,    ABISELECT(128,80), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2488C24[];
extern void _ZN8S2488C24D1Ev();
extern void _ZN8S2488C24D0Ev();
extern void _ZN7S2488C82v4Ev();
extern void ABISELECT(_ZThn128_N8S2488C24D1Ev,_ZThn80_N8S2488C24D1Ev)();
extern void ABISELECT(_ZThn128_N8S2488C24D0Ev,_ZThn80_N8S2488C24D0Ev)();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S2488C24D1Ev,_ZTv0_n32_N8S2488C24D1Ev)();
extern void ABISELECT(_ZThn768_N8S2488C24D1Ev,_ZThn412_N8S2488C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2488C24D0Ev,_ZTv0_n32_N8S2488C24D0Ev)();
extern void ABISELECT(_ZThn768_N8S2488C24D0Ev,_ZThn412_N8S2488C24D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S2488C24D1Ev,_ZTv0_n20_N8S2488C24D1Ev)();
extern void ABISELECT(_ZThn54536_N8S2488C24D1Ev,_ZThn29700_N8S2488C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C24D0Ev,_ZTv0_n20_N8S2488C24D0Ev)();
extern void ABISELECT(_ZThn54536_N8S2488C24D0Ev,_ZThn29700_N8S2488C24D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY vtc_S2488C24[] = {
  ABISELECT(54656,29780),
  ABISELECT(54536,29700),
  ABISELECT(52976,28844),
  ABISELECT(768,412),
  ABISELECT(256,140),
  ABISELECT(640,340),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C24[0]),
  (VTBL_ENTRY)&_ZN8S2488C24D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C24D0Ev,
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S2488C24[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S2488C24D1Ev,_ZThn80_N8S2488C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S2488C24D0Ev,_ZThn80_N8S2488C24D0Ev),
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI8S2488C24[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  0,
  0,
  0,
  ABISELECT(-768,-412),
  ABISELECT(53888,29368),
  ABISELECT(52208,28432),
  ABISELECT(53768,29288),
  ABISELECT(-128,-72),
  ABISELECT(-512,-272),
  ABISELECT(-768,-412),
  (VTBL_ENTRY)&(_ZTI8S2488C24[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C24D1Ev,_ZTv0_n32_N8S2488C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C24D0Ev,_ZTv0_n32_N8S2488C24D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
  0,
  0,
  0,
  ABISELECT(-52336,-28504),
  ABISELECT(-52976,-28844),
  (VTBL_ENTRY)&(_ZTI8S2488C24[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
  0,
  ABISELECT(-54536,-29700),
  ABISELECT(-54280,-29560),
  ABISELECT(-53896,-29360),
  ABISELECT(-54536,-29700),
  (VTBL_ENTRY)&(_ZTI8S2488C24[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C24D1Ev,_ZTv0_n20_N8S2488C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C24D0Ev,_ZTv0_n20_N8S2488C24D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
  0,
  ABISELECT(-54656,-29780),
  (VTBL_ENTRY)&(_ZTI8S2488C24[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern VTBL_ENTRY _ZTV8S2488C24[];
extern void _ZN7S2488C8D1Ev();
extern void _ZN7S2488C8D0Ev();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__A__8S2488C24[] = {
  ABISELECT(256,140),
  ABISELECT(640,340),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C8__A__8S2488C24[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C24[] = {
  ABISELECT(384,200),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C20D1Ev();
extern void _ZN8S2488C20D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C24[] = {
  ABISELECT(53888,29368),
  ABISELECT(52208,28432),
  ABISELECT(53768,29288),
  ABISELECT(-128,-72),
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN8S2488C20D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C20D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN7S2488C9D1Ev();
extern void _ZN7S2488C9D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C98S2488C20__8S2488C24[] = {
  ABISELECT(52208,28432),
  ABISELECT(53768,29288),
  ABISELECT(-128,-72),
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C107S2488C98S2488C20__8S2488C24[] = {
  ABISELECT(52208,28432),
  ABISELECT(53768,29288),
  ABISELECT(-128,-72),
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C107S2488C98S2488C20__8S2488C24[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(512,272),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZThn53768_N8S2488C10D1Ev,_ZThn29288_N8S2488C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void ABISELECT(_ZThn53768_N8S2488C10D0Ev,_ZThn29288_N8S2488C10D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C107S2488C98S2488C20__8S2488C24[] = {
  0,
  ABISELECT(-53768,-29288),
  ABISELECT(-54280,-29560),
  ABISELECT(-53896,-29360),
  ABISELECT(-53768,-29288),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C107S2488C98S2488C20__8S2488C24[] = {
  0,
  0,
  0,
  ABISELECT(-52336,-28504),
  ABISELECT(-52208,-28432),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C98S2488C20__8S2488C24[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(512,272),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev)();
extern void ABISELECT(_ZThn53768_N7S2488C9D1Ev,_ZThn29288_N7S2488C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev)();
extern void ABISELECT(_ZThn53768_N7S2488C9D0Ev,_ZThn29288_N7S2488C9D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__7S2488C98S2488C20__8S2488C24[] = {
  0,
  ABISELECT(-53768,-29288),
  ABISELECT(-54280,-29560),
  ABISELECT(-53896,-29360),
  ABISELECT(-53768,-29288),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__7S2488C98S2488C20__8S2488C24[] = {
  0,
  0,
  0,
  ABISELECT(-52336,-28504),
  ABISELECT(-52208,-28432),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C20__8S2488C24[] = {
  0,
  0,
  0,
  ABISELECT(-52336,-28504),
  ABISELECT(-52208,-28432),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A1__8S2488C20__8S2488C24[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(512,272),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C20D1Ev,_ZTv0_n20_N8S2488C20D1Ev)();
extern void ABISELECT(_ZThn53768_N8S2488C20D1Ev,_ZThn29288_N8S2488C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C20D0Ev,_ZTv0_n20_N8S2488C20D0Ev)();
extern void ABISELECT(_ZThn53768_N8S2488C20D0Ev,_ZThn29288_N8S2488C20D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C20__8S2488C24[] = {
  0,
  ABISELECT(-53768,-29288),
  ABISELECT(-54280,-29560),
  ABISELECT(-53896,-29360),
  ABISELECT(-53768,-29288),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C20D1Ev,_ZTv0_n20_N8S2488C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C20D0Ev,_ZTv0_n20_N8S2488C20D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C20__8S2488C24[] = {
  0,
  ABISELECT(-53888,-29368),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C24[] = {
  ABISELECT(-52336,-28504),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C5[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C67S2488C5__A1__8S2488C24[] = {
  ABISELECT(-52336,-28504),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C8D1Ev();
extern void _ZN7S2488C8D0Ev();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C24[] = {
  ABISELECT(-54280,-29560),
  ABISELECT(-53896,-29360),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C8__8S2488C24[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(54280,29560),
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
static  VTT_ENTRY vtt_S2488C24[] = {
  {&(_ZTV8S2488C24[8]),  8,60},
  {&(_tg__ZTV7S2488C8__A__8S2488C24[4]),  4,7},
  {&(_tg__ZTV7S2488C6__7S2488C8__A__8S2488C24[5]),  5,7},
  {&(_ZTV8S2488C24[20]),  20,60},
  {&(_ZTV8S2488C24[33]),  33,60},
  {&(_ZTV8S2488C24[44]),  44,60},
  {&(_ZTV8S2488C24[53]),  53,60},
  {&(_ZTV8S2488C24[59]),  59,60},
  {&(_tg__ZTV7S2488C6__8S2488C24[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C24[7]),  7,12},
  {&(_tg__ZTV7S2488C98S2488C20__8S2488C24[6]),  6,11},
  {&(_tg__ZTV8S2488C107S2488C98S2488C20__8S2488C24[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C107S2488C98S2488C20__8S2488C24[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C107S2488C98S2488C20__8S2488C24[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C107S2488C98S2488C20__8S2488C24[6]),  6,9},
  {&(_tg__ZTV7S2488C6__7S2488C98S2488C20__8S2488C24[5]),  5,7},
  {&(_tg__ZTV7S2488C8__7S2488C98S2488C20__8S2488C24[6]),  6,9},
  {&(_tg__ZTV7S2488C5__7S2488C98S2488C20__8S2488C24[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C20__8S2488C24[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A1__8S2488C20__8S2488C24[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C20__8S2488C24[6]),  6,9},
  {&(_tg__ZTV8S2488C13__8S2488C20__8S2488C24[3]),  3,4},
  {&(_tg__ZTV7S2488C5__8S2488C24[3]),  3,6},
  {&(_tg__ZTV7S2488C67S2488C5__A1__8S2488C24[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C24[4]),  4,7},
  {&(_tg__ZTV7S2488C6__7S2488C8__8S2488C24[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S2488C24[];
extern  VTBL_ENTRY _ZTV8S2488C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C24[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C20D0Ev,_ZTv0_n20_N8S2488C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53768_N8S2488C20D0Ev,_ZThn29288_N8S2488C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C20D1Ev,_ZTv0_n20_N8S2488C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53768_N8S2488C20D1Ev,_ZThn29288_N8S2488C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53768_N7S2488C9D0Ev,_ZThn29288_N7S2488C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53768_N7S2488C9D1Ev,_ZThn29288_N7S2488C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53768_N8S2488C10D0Ev,_ZThn29288_N8S2488C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53768_N8S2488C10D1Ev,_ZThn29288_N8S2488C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C24D0Ev,_ZTv0_n20_N8S2488C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54536_N8S2488C24D0Ev,_ZThn29700_N8S2488C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C24D1Ev,_ZTv0_n20_N8S2488C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54536_N8S2488C24D1Ev,_ZThn29700_N8S2488C24D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C24D0Ev,_ZTv0_n32_N8S2488C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn768_N8S2488C24D0Ev,_ZThn412_N8S2488C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C24D1Ev,_ZTv0_n32_N8S2488C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn768_N8S2488C24D1Ev,_ZThn412_N8S2488C24D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2488C24 = {  "S2488C24", // class name
  bases_S2488C24, 13,
  &(vtc_S2488C24[0]), // expected_vtbl_contents
  &(vtt_S2488C24[0]), // expected_vtt_contents
  ABISELECT(68624,37372), // object size
  NSPAIRA(_ZTI8S2488C24),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S2488C24),60, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2488C24),26, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2488C1  : S2488C2 , virtual S2488C13 , virtual S2488C15 {
  ::S2488C24 s2488c1f0;
  __tsi64 s2488c1f1;
  virtual  ~S2488C1(); // _ZN7S2488C1D2Ev
  S2488C1(); // tgen
};
//SIG(1 S2488C1) C1{ BC2{ BC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC5{ BC3 BC6{ VBC3 v1 v2 Fp Fp Fi Fi FU7{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU7 Fp FL:3 FC3 Fl FU7} v3 Fp FD FC3[7] FD FU4 Fs Fl Fl} VBC8{ VBC3 VBC6 vd v4 FL FL FL Fl Fi FU7 Fc[10] Fi} BC9{ BC10{ BC3 VBC6 VBC8 VBC5 vd v5 Fc Fi[7] Fl[5] Fl FL FL FU11{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} vd v6 v7 Fp Fp Fp Fi FC12{} Fl Fl} vd FD} VBC13{ v8 FD FC14{ VBC5 VBC8 Fi Fp Fi FU7}[6] Fc Fp Fp Fi[6] Fi Fp Fl Fp Fi Fp Fp} VBC15{ BC14 BC16{ VBC17{ BC18{ vd m FU4} BC19{ VBC8 BC10 BC3 BC6 vd v9 v10 v11 FU7 Fi Fl Fc Fp FC5 Fs} VBC20{ VBC5 VBC6 VBC8 BC9 VBC13 vd Fc Fs[3] FC21{ BC3 VBC6 VBC8 VBC5 VBC19 vd FL Fi Fp Fp Fl}[10] FC5 FL FL:5 Fi Fp[6] Fl[2] FL Fi} BC21 vd v12 v13 Fi FD Fl Fc:3 Fp FC6} Fc Fp Fl Fi Fi Fi Fp Fl FC2 FD Fl Fi} BC22{ VBC23{ VBC10 VBC13 BC17 vd Fp[6] Fi Fs FC12 FC2 Fp Fi Fi Fc Fc FU4} BC5 v14 v15 Fl Fs FL:0 Fp Fp FD[10] Fi Fp Fp Fi Fl Fp} BC21 vd FU4 Fi Fi Fl Fi Fp Fi Fi Fi} vd FC24{ VBC6 VBC20 BC8 BC18 vd Fp Fp Fi Fp} FL}


 S2488C1 ::~S2488C1(){ note_dtor("S2488C1", this);}
S2488C1 ::S2488C1(){ note_ctor("S2488C1", this);} // tgen

static void Test_S2488C1()
{
  extern Class_Descriptor cd_S2488C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9700,21138)];
    init_test(&cd_S2488C1, buf);
    S2488C1 *dp, &lv = *(dp=new (buf) S2488C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(155184,84548), "sizeof(S2488C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2488C1)");
    /*is_ambiguous_... S2488C2::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C2*), ABISELECT(336,196), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C5*), ABISELECT(69504,37860), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C5*), ABISELECT(70688,38516), "S2488C1");
    check_base_class_offset(lv, (S2489C3*)(S2488C8*), ABISELECT(70688,38516), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*), ABISELECT(70688,38516), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C17 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C19*)(S2488C17*), ABISELECT(70688,38516), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C19*), ABISELECT(70688,38516), "S2488C1");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(70688,38516), "S2488C1");
    /*is_ambiguous_... S2488C22::S2488C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C6*)(S2488C5*)(S2488C22*)(S2488C15*), ABISELECT(70688,38516), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C5 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C5*), ABISELECT(69120,37660), "S2488C1");
    check_base_class_offset(lv, (S2488C5*)(S2488C2*), ABISELECT(69120,37660), "S2488C1");
    check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C9*)(S2488C2*), ABISELECT(69120,37660), "S2488C1");
    check_base_class_offset(lv, (S2488C5*)(S2488C14*)(S2488C15*), ABISELECT(69120,37660), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(69120,37660), "S2488C1");
    check_base_class_offset(lv, (S2488C5*)(S2488C20*), ABISELECT(69120,37660), "S2488C1");
    check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(69120,37660), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C21*)(S2488C17*), ABISELECT(69120,37660), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C19*), ABISELECT(69120,37660), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C10 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C10*), ABISELECT(69120,37660), "S2488C1");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C10*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(69120,37660), "S2488C1");
    check_base_class_offset(lv, (S2488C5*)(S2488C21*)(S2488C17*)(S2488C23*), ABISELECT(69120,37660), "S2488C1");
    /*is_ambiguous_... S2488C15::S2488C21 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C21*)(S2488C15*), ABISELECT(69120,37660), "S2488C1");
    check_base_class_offset(lv, (S2488C6*)(S2488C8*), ABISELECT(70944,38668), "S2488C1");
    /*is_ambiguous_... S2488C10::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C9*)(S2488C2*), ABISELECT(70944,38668), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(70944,38668), "S2488C1");
    /*is_ambiguous_... S2488C20::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C20*), ABISELECT(70944,38668), "S2488C1");
    /*is_ambiguous_... S2488C10::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(70944,38668), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C21*)(S2488C17*), ABISELECT(70944,38668), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C19*), ABISELECT(70944,38668), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C10 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*), ABISELECT(70944,38668), "S2488C1");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C10*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(70944,38668), "S2488C1");
    /*is_ambiguous_... S2488C21::S2488C6 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C21*)(S2488C17*)(S2488C23*), ABISELECT(70944,38668), "S2488C1");
    /*is_ambiguous_... S2488C15::S2488C21 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C21*)(S2488C15*), ABISELECT(70944,38668), "S2488C1");
    check_base_class_offset(lv, (S2488C8*)(S2488C2*), ABISELECT(70816,38588), "S2488C1");
    check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C9*)(S2488C2*), ABISELECT(70816,38588), "S2488C1");
    check_base_class_offset(lv, (S2488C8*)(S2488C14*)(S2488C15*), ABISELECT(70816,38588), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C19*)(S2488C17*), ABISELECT(70816,38588), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(70816,38588), "S2488C1");
    check_base_class_offset(lv, (S2488C8*)(S2488C20*), ABISELECT(70816,38588), "S2488C1");
    check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(70816,38588), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C21*)(S2488C17*), ABISELECT(70816,38588), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C19*), ABISELECT(70816,38588), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C19*), ABISELECT(70816,38588), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C10 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C10*), ABISELECT(70816,38588), "S2488C1");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(70816,38588), "S2488C1");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C10*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(70816,38588), "S2488C1");
    check_base_class_offset(lv, (S2488C8*)(S2488C21*)(S2488C17*)(S2488C23*), ABISELECT(70816,38588), "S2488C1");
    /*is_ambiguous_... S2488C15::S2488C21 */ AMB_check_base_class_offset(lv, (S2488C8*)(S2488C21*)(S2488C15*), ABISELECT(70816,38588), "S2488C1");
    /*is_ambiguous_... S2488C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C9*)(S2488C2*), ABISELECT(16,4), "S2488C1");
    check_base_class_offset(lv, (S2488C10*)(S2488C9*)(S2488C2*), 0, "S2488C1");
    check_base_class_offset(lv, (S2488C9*)(S2488C2*), 0, "S2488C1");
    check_base_class_offset(lv, (S2488C2*), 0, "S2488C1");
    check_base_class_offset(lv, (S2488C13*), ABISELECT(71328,38868), "S2488C1");
    check_base_class_offset(lv, (S2488C13*)(S2488C20*), ABISELECT(71328,38868), "S2488C1");
    check_base_class_offset(lv, (S2488C13*)(S2488C23*), ABISELECT(71328,38868), "S2488C1");
    check_base_class_offset(lv, (S2488C14*)(S2488C15*), ABISELECT(85296,46460), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C17 */ AMB_check_base_class_offset(lv, (S2489C18*)(S2488C17*), ABISELECT(90304,49236), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C17 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(90416,49284), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C10*)(S2488C19*)(S2488C17*), ABISELECT(90400,49280), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C17 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C19*)(S2488C17*), ABISELECT(90688,49448), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C19*)(S2488C17*), ABISELECT(90816,49520), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C19*)(S2488C17*), ABISELECT(90400,49280), "S2488C1");
    /*is_ambiguous_... S2488C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(93776,51100), "S2488C1");
    check_base_class_offset(lv, (S2488C10*)(S2488C9*)(S2488C20*), ABISELECT(93760,51096), "S2488C1");
    check_base_class_offset(lv, (S2488C9*)(S2488C20*), ABISELECT(93760,51096), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C20*)(S2488C17*), ABISELECT(93760,51096), "S2488C1");
    check_base_class_offset(lv, (S2488C20*)(S2488C17*)(S2488C23*), ABISELECT(93760,51096), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C17 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C21*)(S2488C17*), ABISELECT(93024,50700), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C19*), ABISELECT(145984,79532), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C10*)(S2488C19*), ABISELECT(145968,79528), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C19*), ABISELECT(146256,79696), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C19*), ABISELECT(146384,79768), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C19*)(S2488C21*)(S2488C17*), ABISELECT(145968,79528), "S2488C1");
    check_base_class_offset(lv, (S2488C19*)(S2488C21*)(S2488C17*)(S2488C23*), ABISELECT(145968,79528), "S2488C1");
    /*is_ambiguous_... S2488C15::S2488C21 */ AMB_check_base_class_offset(lv, (S2488C19*)(S2488C21*)(S2488C15*), ABISELECT(145968,79528), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C17 */ AMB_check_base_class_offset(lv, (S2488C21*)(S2488C17*), ABISELECT(93008,50696), "S2488C1");
    check_base_class_offset(lv, (S2488C17*)(S2488C16*)(S2488C15*), ABISELECT(90304,49236), "S2488C1");
    check_base_class_offset(lv, (S2488C16*)(S2488C15*), ABISELECT(85392,46504), "S2488C1");
    /*is_ambiguous_... S2488C1::S2488C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*), ABISELECT(154912,84384), "S2488C1");
    /*is_ambiguous_... S2488C23::S2488C10 */ AMB_check_base_class_offset(lv, (S2488C10*)(S2488C23*), ABISELECT(154896,84380), "S2488C1");
    check_base_class_offset(lv, (S2489C18*)(S2488C17*)(S2488C23*), ABISELECT(148576,80944), "S2488C1");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C10*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(148688,80992), "S2488C1");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C10*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(148672,80988), "S2488C1");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(148960,81156), "S2488C1");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(149088,81228), "S2488C1");
    /*is_ambiguous_... S2488C17::S2488C19 */ AMB_check_base_class_offset(lv, (S2488C19*)(S2488C17*)(S2488C23*), ABISELECT(148672,80988), "S2488C1");
    /*is_ambiguous_... S2488C21::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C21*)(S2488C17*)(S2488C23*), ABISELECT(151296,82408), "S2488C1");
    check_base_class_offset(lv, (S2488C21*)(S2488C17*)(S2488C23*), ABISELECT(151280,82404), "S2488C1");
    check_base_class_offset(lv, (S2488C17*)(S2488C23*), ABISELECT(148576,80944), "S2488C1");
    check_base_class_offset(lv, (S2488C23*)(S2488C22*)(S2488C15*), ABISELECT(148576,80944), "S2488C1");
    /*is_ambiguous_... S2488C22::S2488C5 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C5*)(S2488C22*)(S2488C15*), ABISELECT(88560,48248), "S2488C1");
    /*is_ambiguous_... S2488C22::S2488C5 */ AMB_check_base_class_offset(lv, (S2488C6*)(S2488C5*)(S2488C22*)(S2488C15*), ABISELECT(88176,48048), "S2488C1");
    /*is_ambiguous_... S2488C22::S2488C5 */ AMB_check_base_class_offset(lv, (S2488C5*)(S2488C22*)(S2488C15*), ABISELECT(88176,48048), "S2488C1");
    check_base_class_offset(lv, (S2488C22*)(S2488C15*), ABISELECT(88176,48048), "S2488C1");
    /*is_ambiguous_... S2488C15::S2488C21 */ AMB_check_base_class_offset(lv, (S2489C3*)(S2488C21*)(S2488C15*), ABISELECT(90000,49068), "S2488C1");
    /*is_ambiguous_... S2488C15::S2488C21 */ AMB_check_base_class_offset(lv, (S2488C21*)(S2488C15*), ABISELECT(89984,49064), "S2488C1");
    check_base_class_offset(lv, (S2488C15*), ABISELECT(85296,46460), "S2488C1");
    check_field_offset(lv, s2488c1f0, ABISELECT(480,280), "S2488C1.s2488c1f0");
    check_field_offset(lv, s2488c1f1, ABISELECT(69104,37652), "S2488C1.s2488c1f1");
    test_class_info(&lv, &cd_S2488C1);
    dp->~S2488C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2488C1(Test_S2488C1, "S2488C1", ABISELECT(155184,84548));

#else // __cplusplus

extern void _ZN7S2488C1C1Ev();
extern void _ZN7S2488C1D2Ev();
Name_Map name_map_S2488C1[] = {
  NSPAIR(_ZN7S2488C1C1Ev),
  NSPAIR(_ZN7S2488C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C5;
extern VTBL_ENTRY _ZTI7S2488C5[];
extern  VTBL_ENTRY _ZTV7S2488C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C5[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C8;
extern VTBL_ENTRY _ZTI7S2488C8[];
extern  VTBL_ENTRY _ZTV7S2488C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2488C9;
extern VTBL_ENTRY _ZTI7S2488C9[];
extern  VTBL_ENTRY _ZTV7S2488C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C9[];
extern Class_Descriptor cd_S2488C2;
extern VTBL_ENTRY _ZTI7S2488C2[];
extern  VTBL_ENTRY _ZTV7S2488C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C2[];
extern Class_Descriptor cd_S2488C13;
extern VTBL_ENTRY _ZTI8S2488C13[];
extern  VTBL_ENTRY _ZTV8S2488C13[];
extern Class_Descriptor cd_S2488C14;
extern VTBL_ENTRY _ZTI8S2488C14[];
extern  VTBL_ENTRY _ZTV8S2488C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C14[];
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C19;
extern VTBL_ENTRY _ZTI8S2488C19[];
extern  VTBL_ENTRY _ZTV8S2488C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C19[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2488C9;
extern VTBL_ENTRY _ZTI7S2488C9[];
extern  VTBL_ENTRY _ZTV7S2488C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C9[];
extern Class_Descriptor cd_S2488C20;
extern VTBL_ENTRY _ZTI8S2488C20[];
extern  VTBL_ENTRY _ZTV8S2488C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C20[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C19;
extern VTBL_ENTRY _ZTI8S2488C19[];
extern  VTBL_ENTRY _ZTV8S2488C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C19[];
extern Class_Descriptor cd_S2488C21;
extern VTBL_ENTRY _ZTI8S2488C21[];
extern  VTBL_ENTRY _ZTV8S2488C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C21[];
extern Class_Descriptor cd_S2488C17;
extern VTBL_ENTRY _ZTI8S2488C17[];
extern  VTBL_ENTRY _ZTV8S2488C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C17[];
extern Class_Descriptor cd_S2488C16;
extern VTBL_ENTRY _ZTI8S2488C16[];
extern  VTBL_ENTRY _ZTV8S2488C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C16[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C10;
extern VTBL_ENTRY _ZTI8S2488C10[];
extern  VTBL_ENTRY _ZTV8S2488C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C10[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C19;
extern VTBL_ENTRY _ZTI8S2488C19[];
extern  VTBL_ENTRY _ZTV8S2488C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C19[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C21;
extern VTBL_ENTRY _ZTI8S2488C21[];
extern  VTBL_ENTRY _ZTV8S2488C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C21[];
extern Class_Descriptor cd_S2488C17;
extern VTBL_ENTRY _ZTI8S2488C17[];
extern  VTBL_ENTRY _ZTV8S2488C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C17[];
extern Class_Descriptor cd_S2488C23;
extern VTBL_ENTRY _ZTI8S2488C23[];
extern  VTBL_ENTRY _ZTV8S2488C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C23[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C6;
extern VTBL_ENTRY _ZTI7S2488C6[];
extern  VTBL_ENTRY _ZTV7S2488C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C6[];
extern Class_Descriptor cd_S2488C5;
extern VTBL_ENTRY _ZTI7S2488C5[];
extern  VTBL_ENTRY _ZTV7S2488C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C5[];
extern Class_Descriptor cd_S2488C22;
extern VTBL_ENTRY _ZTI8S2488C22[];
extern  VTBL_ENTRY _ZTV8S2488C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C22[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2488C21;
extern VTBL_ENTRY _ZTI8S2488C21[];
extern  VTBL_ENTRY _ZTV8S2488C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C21[];
extern Class_Descriptor cd_S2488C15;
extern VTBL_ENTRY _ZTI8S2488C15[];
extern  VTBL_ENTRY _ZTV8S2488C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2488C15[];
static Base_Class bases_S2488C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(336,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(69504,37860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(70688,38516), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2488C6,    ABISELECT(69120,37660), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2488C5,    ABISELECT(69120,37660), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2488C6,    ABISELECT(70944,38668), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2488C8,    ABISELECT(70816,38588), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2488C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2488C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2488C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2488C13,    ABISELECT(71328,38868), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2488C14,    ABISELECT(85296,46460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S2489C18,    ABISELECT(90304,49236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(90416,49284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(90400,49280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    98, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(90688,49448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(90816,49520), //bcp->offset
    140, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    102, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2488C19,    ABISELECT(90400,49280), //bcp->offset
    128, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    97, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(93776,51100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(93760,51096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    125, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2488C9,    ABISELECT(93760,51096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    124, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2488C20,    ABISELECT(93760,51096), //bcp->offset
    154, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    123, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(93024,50700), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(145984,79532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(145968,79528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    137, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(146256,79696), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(146384,79768), //bcp->offset
    189, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    141, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2488C19,    ABISELECT(145968,79528), //bcp->offset
    170, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    136, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S2488C21,    ABISELECT(93008,50696), //bcp->offset
    145, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    107, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S2488C17,    ABISELECT(90304,49236), //bcp->offset
    106, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    96, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S2488C16,    ABISELECT(85392,46504), //bcp->offset
    67, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(154912,84384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(154896,84380), //bcp->offset
    243, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    185, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    43, //immediately_derived
  0, 1},
  {&cd_S2489C18,    ABISELECT(148576,80944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(148688,80992), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S2488C10,    ABISELECT(148672,80988), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    149, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(148960,81156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(149088,81228), //bcp->offset
    229, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    153, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S2488C19,    ABISELECT(148672,80988), //bcp->offset
    217, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    148, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(151296,82408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S2488C21,    ABISELECT(151280,82404), //bcp->offset
    234, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    158, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S2488C17,    ABISELECT(148576,80944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    147, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S2488C23,    ABISELECT(148576,80944), //bcp->offset
    194, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    146, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    47, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(88560,48248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S2488C6,    ABISELECT(88176,48048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S2488C5,    ABISELECT(88176,48048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S2488C22,    ABISELECT(88176,48048), //bcp->offset
    79, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(90000,49068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S2488C21,    ABISELECT(89984,49064), //bcp->offset
    97, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S2488C15,    ABISELECT(85296,46460), //bcp->offset
    47, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2488C1[];
extern void _ZN7S2488C1D1Ev();
extern void _ZN7S2488C1D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S2488C1D1Ev,_ZTv0_n20_N7S2488C1D1Ev)();
extern void ABISELECT(_ZThn70816_N7S2488C1D1Ev,_ZThn38588_N7S2488C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2488C1D0Ev,_ZTv0_n20_N7S2488C1D0Ev)();
extern void ABISELECT(_ZThn70816_N7S2488C1D0Ev,_ZThn38588_N7S2488C1D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN8S2488C133v11Ev();
extern void ABISELECT(_ZTv0_n104_N7S2488C1D1Ev,_ZTv0_n52_N7S2488C1D1Ev)();
extern void ABISELECT(_ZThn85296_N7S2488C1D1Ev,_ZThn46460_N7S2488C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S2488C1D0Ev,_ZTv0_n52_N7S2488C1D0Ev)();
extern void ABISELECT(_ZThn85296_N7S2488C1D0Ev,_ZThn46460_N7S2488C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn96_n104_N7S2488C1D1Ev,_ZTvn44_n52_N7S2488C1D1Ev)();
extern void ABISELECT(_ZTvn96_n104_N7S2488C1D0Ev,_ZTvn44_n52_N7S2488C1D0Ev)();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
extern void _ZN8S2488C223v14Ev();
extern void _ZN8S2488C223v15Ev();
extern void ABISELECT(_ZTvn2880_n104_N7S2488C1D1Ev,_ZTvn1588_n52_N7S2488C1D1Ev)();
extern void ABISELECT(_ZTvn2880_n104_N7S2488C1D0Ev,_ZTvn1588_n52_N7S2488C1D0Ev)();
extern void ABISELECT(_ZTvn4688_n104_N7S2488C1D1Ev,_ZTvn2604_n52_N7S2488C1D1Ev)();
extern void ABISELECT(_ZTvn4688_n104_N7S2488C1D0Ev,_ZTvn2604_n52_N7S2488C1D0Ev)();
extern void ABISELECT(_ZTv0_n80_N7S2488C1D1Ev,_ZTv0_n40_N7S2488C1D1Ev)();
extern void ABISELECT(_ZThn90304_N7S2488C1D1Ev,_ZThn49236_N7S2488C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S2488C1D0Ev,_ZTv0_n40_N7S2488C1D0Ev)();
extern void ABISELECT(_ZThn90304_N7S2488C1D0Ev,_ZThn49236_N7S2488C1D0Ev)() __attribute__((weak));
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
extern void ABISELECT(_ZTvn96_n80_N7S2488C1D1Ev,_ZTvn44_n40_N7S2488C1D1Ev)();
extern void ABISELECT(_ZTvn96_n80_N7S2488C1D0Ev,_ZTvn44_n40_N7S2488C1D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void ABISELECT(_ZTvn2704_n80_N7S2488C1D1Ev,_ZTvn1460_n40_N7S2488C1D1Ev)();
extern void ABISELECT(_ZTvn2704_n80_N7S2488C1D0Ev,_ZTvn1460_n40_N7S2488C1D0Ev)();
extern void ABISELECT(_ZTv0_n64_N7S2488C1D1Ev,_ZTv0_n32_N7S2488C1D1Ev)();
extern void ABISELECT(_ZThn93760_N7S2488C1D1Ev,_ZThn51096_N7S2488C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S2488C1D0Ev,_ZTv0_n32_N7S2488C1D0Ev)();
extern void ABISELECT(_ZThn93760_N7S2488C1D0Ev,_ZThn51096_N7S2488C1D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
extern void ABISELECT(_ZTv0_n56_N7S2488C1D1Ev,_ZTv0_n28_N7S2488C1D1Ev)();
extern void ABISELECT(_ZThn145968_N7S2488C1D1Ev,_ZThn79528_N7S2488C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S2488C1D0Ev,_ZTv0_n28_N7S2488C1D0Ev)();
extern void ABISELECT(_ZThn145968_N7S2488C1D0Ev,_ZThn79528_N7S2488C1D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void ABISELECT(_ZTv0_n88_N7S2488C1D1Ev,_ZTv0_n44_N7S2488C1D1Ev)();
extern void ABISELECT(_ZThn148576_N7S2488C1D1Ev,_ZThn80944_N7S2488C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S2488C1D0Ev,_ZTv0_n44_N7S2488C1D0Ev)();
extern void ABISELECT(_ZThn148576_N7S2488C1D0Ev,_ZThn80944_N7S2488C1D0Ev)() __attribute__((weak));
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
extern void ABISELECT(_ZTvn96_n88_N7S2488C1D1Ev,_ZTvn44_n44_N7S2488C1D1Ev)();
extern void ABISELECT(_ZTvn96_n88_N7S2488C1D0Ev,_ZTvn44_n44_N7S2488C1D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void ABISELECT(_ZTvn2704_n88_N7S2488C1D1Ev,_ZTvn1460_n44_N7S2488C1D1Ev)();
extern void ABISELECT(_ZTvn2704_n88_N7S2488C1D0Ev,_ZTvn1460_n44_N7S2488C1D0Ev)();
extern void ABISELECT(_ZTv0_n56_N7S2488C1D1Ev,_ZTv0_n28_N7S2488C1D1Ev)();
extern void ABISELECT(_ZThn154896_N7S2488C1D1Ev,_ZThn84380_N7S2488C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S2488C1D0Ev,_ZTv0_n28_N7S2488C1D0Ev)();
extern void ABISELECT(_ZThn154896_N7S2488C1D0Ev,_ZThn84380_N7S2488C1D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY vtc_S2488C1[] = {
  ABISELECT(154896,84380),
  ABISELECT(148576,80944),
  ABISELECT(145968,79528),
  ABISELECT(93760,51096),
  ABISELECT(90304,49236),
  ABISELECT(85296,46460),
  ABISELECT(71328,38868),
  ABISELECT(69120,37660),
  ABISELECT(70816,38588),
  ABISELECT(70688,38516),
  ABISELECT(70944,38668),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&_ZN7S2488C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C1D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-69120,-37660),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
  0,
  ABISELECT(-70816,-38588),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(-70816,-38588),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C1D1Ev,_ZTv0_n20_N7S2488C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C1D0Ev,_ZTv0_n20_N7S2488C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-70944,-38668),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  0,
  ABISELECT(-71328,-38868),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
  ABISELECT(2880,1588),
  ABISELECT(2880,1588),
  ABISELECT(2880,1588),
  ABISELECT(2880,1588),
  ABISELECT(2880,1588),
  ABISELECT(-85296,-46460),
  ABISELECT(69600,37920),
  ABISELECT(63280,34484),
  ABISELECT(60672,33068),
  ABISELECT(-13968,-7592),
  ABISELECT(8464,4636),
  ABISELECT(5008,2776),
  ABISELECT(-14352,-7792),
  ABISELECT(-14480,-7872),
  ABISELECT(-14608,-7944),
  ABISELECT(-16176,-8800),
  ABISELECT(-85296,-46460),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S2488C1D1Ev,_ZTv0_n52_N7S2488C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S2488C1D0Ev,_ZTv0_n52_N7S2488C1D0Ev),
  ABISELECT(60576,33024),
  ABISELECT(-14064,-7636),
  ABISELECT(8368,4592),
  ABISELECT(-16272,-8844),
  ABISELECT(-14448,-7836),
  ABISELECT(-14704,-7988),
  ABISELECT(-14576,-7916),
  ABISELECT(4912,2732),
  ABISELECT(-85392,-46504),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n104_N7S2488C1D1Ev,_ZTvn44_n52_N7S2488C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n104_N7S2488C1D0Ev,_ZTvn44_n52_N7S2488C1D0Ev),
  ABISELECT(57792,31480),
  ABISELECT(5584,3048),
  ABISELECT(-16848,-9180),
  ABISELECT(-19056,-10388),
  ABISELECT(-17360,-9460),
  ABISELECT(-17232,-9380),
  ABISELECT(66720,36332),
  ABISELECT(60400,32896),
  ABISELECT(-17488,-9532),
  ABISELECT(-88176,-48048),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
  (VTBL_ENTRY)&_ZN8S2488C223v14Ev,
  (VTBL_ENTRY)&_ZN8S2488C223v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn2880_n104_N7S2488C1D1Ev,_ZTvn1588_n52_N7S2488C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2880_n104_N7S2488C1D0Ev,_ZTvn1588_n52_N7S2488C1D0Ev),
  ABISELECT(55984,30464),
  ABISELECT(-20864,-11404),
  ABISELECT(-19168,-10476),
  ABISELECT(-19296,-10548),
  ABISELECT(-19040,-10396),
  ABISELECT(-89984,-49064),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4688_n104_N7S2488C1D1Ev,_ZTvn2604_n52_N7S2488C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4688_n104_N7S2488C1D0Ev,_ZTvn2604_n52_N7S2488C1D0Ev),
  ABISELECT(512,284),
  ABISELECT(512,284),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-90304,-49236),
  ABISELECT(55664,30292),
  ABISELECT(-18976,-10368),
  ABISELECT(3456,1860),
  ABISELECT(-21184,-11576),
  ABISELECT(-19360,-10568),
  ABISELECT(-19616,-10720),
  ABISELECT(-19488,-10648),
  ABISELECT(-90304,-49236),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S2488C1D1Ev,_ZTv0_n40_N7S2488C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S2488C1D0Ev,_ZTv0_n40_N7S2488C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
  ABISELECT(-21280,-11620),
  ABISELECT(-19584,-10692),
  ABISELECT(-19712,-10764),
  ABISELECT(-19456,-10612),
  ABISELECT(-90400,-49280),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N7S2488C1D1Ev,_ZTvn44_n40_N7S2488C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N7S2488C1D0Ev,_ZTvn44_n40_N7S2488C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
  ABISELECT(-20128,-11004),
  ABISELECT(-90816,-49520),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  ABISELECT(52960,28832),
  ABISELECT(-23888,-13036),
  ABISELECT(-22192,-12108),
  ABISELECT(-22320,-12180),
  ABISELECT(-22064,-12028),
  ABISELECT(-93008,-50696),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N7S2488C1D1Ev,_ZTvn1460_n40_N7S2488C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N7S2488C1D0Ev,_ZTvn1460_n40_N7S2488C1D0Ev),
  0,
  0,
  0,
  ABISELECT(-93760,-51096),
  ABISELECT(-22432,-12228),
  ABISELECT(-24640,-13436),
  ABISELECT(-22944,-12508),
  ABISELECT(-23072,-12580),
  ABISELECT(-22816,-12428),
  ABISELECT(-93760,-51096),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2488C1D1Ev,_ZTv0_n32_N7S2488C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2488C1D0Ev,_ZTv0_n32_N7S2488C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-145968,-79528),
  ABISELECT(-76848,-41868),
  ABISELECT(-75152,-40940),
  ABISELECT(-75280,-41012),
  ABISELECT(-75024,-40860),
  ABISELECT(-145968,-79528),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2488C1D1Ev,_ZTv0_n28_N7S2488C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2488C1D0Ev,_ZTv0_n28_N7S2488C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
  ABISELECT(-75696,-41252),
  ABISELECT(-146384,-79768),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  ABISELECT(512,284),
  ABISELECT(512,284),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-148576,-80944),
  ABISELECT(6320,3436),
  ABISELECT(-2608,-1416),
  ABISELECT(-77248,-42076),
  ABISELECT(-54816,-29848),
  ABISELECT(-79456,-43284),
  ABISELECT(-77632,-42276),
  ABISELECT(-77888,-42428),
  ABISELECT(-77760,-42356),
  ABISELECT(-148576,-80944),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S2488C1D1Ev,_ZTv0_n44_N7S2488C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S2488C1D0Ev,_ZTv0_n44_N7S2488C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
  ABISELECT(-79552,-43328),
  ABISELECT(-77856,-42400),
  ABISELECT(-77984,-42472),
  ABISELECT(-77728,-42320),
  ABISELECT(-148672,-80988),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N7S2488C1D1Ev,_ZTvn44_n44_N7S2488C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N7S2488C1D0Ev,_ZTvn44_n44_N7S2488C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
  ABISELECT(-78400,-42712),
  ABISELECT(-149088,-81228),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  ABISELECT(-5312,-2876),
  ABISELECT(-82160,-44744),
  ABISELECT(-80464,-43816),
  ABISELECT(-80592,-43888),
  ABISELECT(-80336,-43736),
  ABISELECT(-151280,-82404),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N7S2488C1D1Ev,_ZTvn1460_n44_N7S2488C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N7S2488C1D0Ev,_ZTvn1460_n44_N7S2488C1D0Ev),
  0,
  ABISELECT(-154896,-84380),
  ABISELECT(-85776,-46720),
  ABISELECT(-84080,-45792),
  ABISELECT(-84208,-45864),
  ABISELECT(-83952,-45712),
  ABISELECT(-154896,-84380),
  (VTBL_ENTRY)&(_ZTI7S2488C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2488C1D1Ev,_ZTv0_n28_N7S2488C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2488C1D0Ev,_ZTv0_n28_N7S2488C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern VTBL_ENTRY _ZTV7S2488C1[];
extern void _ZN7S2488C2D1Ev();
extern void _ZN7S2488C2D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C2__7S2488C1[] = {
  ABISELECT(69120,37660),
  ABISELECT(70816,38588),
  ABISELECT(70688,38516),
  ABISELECT(70944,38668),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C2[0]),
  (VTBL_ENTRY)&_ZN7S2488C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C2D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN7S2488C9D1Ev();
extern void _ZN7S2488C9D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C97S2488C2__7S2488C1[] = {
  ABISELECT(69120,37660),
  ABISELECT(70816,38588),
  ABISELECT(70688,38516),
  ABISELECT(70944,38668),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C107S2488C97S2488C2__7S2488C1[] = {
  ABISELECT(69120,37660),
  ABISELECT(70816,38588),
  ABISELECT(70688,38516),
  ABISELECT(70944,38668),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C107S2488C97S2488C2__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-70944,-38668),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZThn70816_N8S2488C10D1Ev,_ZThn38588_N8S2488C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void ABISELECT(_ZThn70816_N8S2488C10D0Ev,_ZThn38588_N8S2488C10D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C107S2488C97S2488C2__7S2488C1[] = {
  0,
  ABISELECT(-70816,-38588),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(-70816,-38588),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C107S2488C97S2488C2__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-69120,-37660),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C97S2488C2__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-70944,-38668),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev)();
extern void ABISELECT(_ZThn70816_N7S2488C9D1Ev,_ZThn38588_N7S2488C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev)();
extern void ABISELECT(_ZThn70816_N7S2488C9D0Ev,_ZThn38588_N7S2488C9D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__7S2488C97S2488C2__7S2488C1[] = {
  0,
  ABISELECT(-70816,-38588),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(-70816,-38588),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__7S2488C97S2488C2__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-69120,-37660),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__7S2488C2__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-69120,-37660),
  (VTBL_ENTRY)&(_ZTI7S2488C2[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2488C2D1Ev,_ZTv0_n20_N7S2488C2D1Ev)();
extern void ABISELECT(_ZThn70816_N7S2488C2D1Ev,_ZThn38588_N7S2488C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2488C2D0Ev,_ZTv0_n20_N7S2488C2D0Ev)();
extern void ABISELECT(_ZThn70816_N7S2488C2D0Ev,_ZThn38588_N7S2488C2D0Ev)() __attribute__((weak));
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__7S2488C2__7S2488C1[] = {
  0,
  ABISELECT(-70816,-38588),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(-70816,-38588),
  (VTBL_ENTRY)&(_ZTI7S2488C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C2D1Ev,_ZTv0_n20_N7S2488C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C2D0Ev,_ZTv0_n20_N7S2488C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A1__7S2488C2__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-70944,-38668),
  (VTBL_ENTRY)&(_ZTI7S2488C2[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__7S2488C1[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C5[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C67S2488C5__7S2488C1[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C8D1Ev();
extern void _ZN7S2488C8D0Ev();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__7S2488C1[] = {
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C8__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI7S2488C8[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A1__7S2488C1[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C15D1Ev();
extern void _ZN8S2488C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C15__7S2488C1[] = {
  ABISELECT(69600,37920),
  ABISELECT(63280,34484),
  ABISELECT(60672,33068),
  ABISELECT(-13968,-7592),
  ABISELECT(8464,4636),
  ABISELECT(5008,2776),
  ABISELECT(-14352,-7792),
  ABISELECT(-14480,-7872),
  ABISELECT(-14608,-7944),
  ABISELECT(-16176,-8800),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&_ZN8S2488C15D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C15D0Ev,
};
extern void _ZN8S2488C14D1Ev();
extern void _ZN8S2488C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C148S2488C15__7S2488C1[] = {
  ABISELECT(-14352,-7792),
  ABISELECT(-14480,-7872),
  ABISELECT(-14608,-7944),
  ABISELECT(-16176,-8800),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C14[0]),
  (VTBL_ENTRY)&_ZN8S2488C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C14D0Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C148S2488C15__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(16176,8800),
  (VTBL_ENTRY)&(_ZTI8S2488C14[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C14D1Ev,_ZTv0_n20_N8S2488C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C14D0Ev,_ZTv0_n20_N8S2488C14D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C148S2488C15__7S2488C1[] = {
  0,
  ABISELECT(14480,7872),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(14480,7872),
  (VTBL_ENTRY)&(_ZTI8S2488C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C14D1Ev,_ZTv0_n20_N8S2488C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C14D0Ev,_ZTv0_n20_N8S2488C14D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A1__8S2488C148S2488C15__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(14352,7792),
  (VTBL_ENTRY)&(_ZTI8S2488C14[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C16D1Ev();
extern void _ZN8S2488C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C168S2488C15__7S2488C1[] = {
  ABISELECT(60576,33024),
  ABISELECT(-14064,-7636),
  ABISELECT(8368,4592),
  ABISELECT(-16272,-8844),
  ABISELECT(-14448,-7836),
  ABISELECT(-14704,-7988),
  ABISELECT(-14576,-7916),
  ABISELECT(4912,2732),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&_ZN8S2488C16D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C16D0Ev,
};
extern void ABISELECT(_ZTv0_n80_N8S2488C16D1Ev,_ZTv0_n40_N8S2488C16D1Ev)();
extern void ABISELECT(_ZThn4912_N8S2488C16D1Ev,_ZThn2732_N8S2488C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S2488C16D0Ev,_ZTv0_n40_N8S2488C16D0Ev)();
extern void ABISELECT(_ZThn4912_N8S2488C16D0Ev,_ZThn2732_N8S2488C16D0Ev)() __attribute__((weak));
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C17__8S2488C168S2488C15__7S2488C1[] = {
  ABISELECT(512,284),
  ABISELECT(512,284),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-4912,-2732),
  ABISELECT(55664,30292),
  ABISELECT(-18976,-10368),
  ABISELECT(3456,1860),
  ABISELECT(-21184,-11576),
  ABISELECT(-19360,-10568),
  ABISELECT(-19616,-10720),
  ABISELECT(-19488,-10648),
  ABISELECT(-4912,-2732),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2488C16D1Ev,_ZTv0_n40_N8S2488C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2488C16D0Ev,_ZTv0_n40_N8S2488C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
};
extern void ABISELECT(_ZTvn96_n80_N8S2488C16D1Ev,_ZTvn44_n40_N8S2488C16D1Ev)();
extern void ABISELECT(_ZTvn96_n80_N8S2488C16D0Ev,_ZTvn44_n40_N8S2488C16D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C198S2488C17__8S2488C168S2488C15__7S2488C1[] = {
  ABISELECT(-21280,-11620),
  ABISELECT(-19584,-10692),
  ABISELECT(-19712,-10764),
  ABISELECT(-19456,-10612),
  ABISELECT(-5008,-2776),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2488C16D1Ev,_ZTvn44_n40_N8S2488C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2488C16D0Ev,_ZTvn44_n40_N8S2488C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C16D1Ev,_ZTv0_n20_N8S2488C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C16D0Ev,_ZTv0_n20_N8S2488C16D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C168S2488C15__7S2488C1[] = {
  0,
  ABISELECT(14576,7916),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(14576,7916),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C16D1Ev,_ZTv0_n20_N8S2488C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C16D0Ev,_ZTv0_n20_N8S2488C16D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C168S2488C15__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(14448,7836),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C168S2488C15__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(16272,8844),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C198S2488C17__A2__8S2488C168S2488C15__7S2488C1[] = {
  ABISELECT(-20128,-11004),
  ABISELECT(-5424,-3016),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2488C16D1Ev,_ZTv0_n32_N8S2488C16D1Ev)();
extern void ABISELECT(_ZThn8368_N8S2488C16D1Ev,_ZThn4592_N8S2488C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2488C16D0Ev,_ZTv0_n32_N8S2488C16D0Ev)();
extern void ABISELECT(_ZThn8368_N8S2488C16D0Ev,_ZThn4592_N8S2488C16D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C168S2488C15__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(-8368,-4592),
  ABISELECT(-22432,-12228),
  ABISELECT(-24640,-13436),
  ABISELECT(-22944,-12508),
  ABISELECT(-23072,-12580),
  ABISELECT(-22816,-12428),
  ABISELECT(-8368,-4592),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C16D1Ev,_ZTv0_n32_N8S2488C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C16D0Ev,_ZTv0_n32_N8S2488C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C168S2488C15__7S2488C1[] = {
  0,
  ABISELECT(14064,7636),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void ABISELECT(_ZTvn2704_n80_N8S2488C16D1Ev,_ZTvn1460_n40_N8S2488C16D1Ev)();
extern void ABISELECT(_ZTvn2704_n80_N8S2488C16D0Ev,_ZTvn1460_n40_N8S2488C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2488C218S2488C17__8S2488C168S2488C15__7S2488C1[] = {
  ABISELECT(52960,28832),
  ABISELECT(-23888,-13036),
  ABISELECT(-22192,-12108),
  ABISELECT(-22320,-12180),
  ABISELECT(-22064,-12028),
  ABISELECT(-7616,-4192),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2488C16D1Ev,_ZTvn1460_n40_N8S2488C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2488C16D0Ev,_ZTvn1460_n40_N8S2488C16D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2488C16D1Ev,_ZTv0_n28_N8S2488C16D1Ev)();
extern void ABISELECT(_ZThn60576_N8S2488C16D1Ev,_ZThn33024_N8S2488C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C16D0Ev,_ZTv0_n28_N8S2488C16D0Ev)();
extern void ABISELECT(_ZThn60576_N8S2488C16D0Ev,_ZThn33024_N8S2488C16D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C168S2488C15__7S2488C1[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-60576,-33024),
  ABISELECT(-76848,-41868),
  ABISELECT(-75152,-40940),
  ABISELECT(-75280,-41012),
  ABISELECT(-75024,-40860),
  ABISELECT(-60576,-33024),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C16D1Ev,_ZTv0_n28_N8S2488C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C16D0Ev,_ZTv0_n28_N8S2488C16D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C168S2488C15__7S2488C1[] = {
  ABISELECT(-75696,-41252),
  ABISELECT(-60992,-33264),
  (VTBL_ENTRY)&(_ZTI8S2488C16[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
extern void _ZN8S2488C223v14Ev();
extern void _ZN8S2488C223v15Ev();
extern void _ZN8S2488C22D1Ev();
extern void _ZN8S2488C22D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C228S2488C15__7S2488C1[] = {
  ABISELECT(57792,31480),
  ABISELECT(5584,3048),
  ABISELECT(-16848,-9180),
  ABISELECT(-19056,-10388),
  ABISELECT(-17360,-9460),
  ABISELECT(-17232,-9380),
  ABISELECT(66720,36332),
  ABISELECT(60400,32896),
  ABISELECT(-17488,-9532),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
  (VTBL_ENTRY)&_ZN8S2488C223v14Ev,
  (VTBL_ENTRY)&_ZN8S2488C223v15Ev,
  (VTBL_ENTRY)&_ZN8S2488C22D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C22D0Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C58S2488C228S2488C15__A1__7S2488C1[] = {
  ABISELECT(-17488,-9532),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C5[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C67S2488C58S2488C228S2488C15__A5__7S2488C1[] = {
  ABISELECT(-17488,-9532),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n88_N8S2488C22D1Ev,_ZTv0_n44_N8S2488C22D1Ev)();
extern void ABISELECT(_ZThn60400_N8S2488C22D1Ev,_ZThn32896_N8S2488C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S2488C22D0Ev,_ZTv0_n44_N8S2488C22D0Ev)();
extern void ABISELECT(_ZThn60400_N8S2488C22D0Ev,_ZThn32896_N8S2488C22D0Ev)() __attribute__((weak));
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C23__8S2488C228S2488C15__7S2488C1[] = {
  ABISELECT(512,284),
  ABISELECT(512,284),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-60400,-32896),
  ABISELECT(6320,3436),
  ABISELECT(-2608,-1416),
  ABISELECT(-77248,-42076),
  ABISELECT(-54816,-29848),
  ABISELECT(-79456,-43284),
  ABISELECT(-77632,-42276),
  ABISELECT(-77888,-42428),
  ABISELECT(-77760,-42356),
  ABISELECT(-60400,-32896),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2488C22D1Ev,_ZTv0_n44_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2488C22D0Ev,_ZTv0_n44_N8S2488C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2488C22D1Ev,_ZTv0_n28_N8S2488C22D1Ev)();
extern void ABISELECT(_ZThn66720_N8S2488C22D1Ev,_ZThn36332_N8S2488C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C22D0Ev,_ZTv0_n28_N8S2488C22D0Ev)();
extern void ABISELECT(_ZThn66720_N8S2488C22D0Ev,_ZThn36332_N8S2488C22D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C10__8S2488C228S2488C15__7S2488C1[] = {
  0,
  ABISELECT(-66720,-36332),
  ABISELECT(-85776,-46720),
  ABISELECT(-84080,-45792),
  ABISELECT(-84208,-45864),
  ABISELECT(-83952,-45712),
  ABISELECT(-66720,-36332),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C22D1Ev,_ZTv0_n28_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C22D0Ev,_ZTv0_n28_N8S2488C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C228S2488C15__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(17232,9380),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C22D1Ev,_ZTv0_n20_N8S2488C22D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C22D0Ev,_ZTv0_n20_N8S2488C22D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C228S2488C15__7S2488C1[] = {
  0,
  ABISELECT(17360,9460),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(17360,9460),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C22D1Ev,_ZTv0_n20_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C22D0Ev,_ZTv0_n20_N8S2488C22D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C228S2488C15__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(19056,10388),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C228S2488C15__7S2488C1[] = {
  0,
  ABISELECT(16848,9180),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void ABISELECT(_ZTvn96_n88_N8S2488C22D1Ev,_ZTvn44_n44_N8S2488C22D1Ev)();
extern void ABISELECT(_ZTvn96_n88_N8S2488C22D0Ev,_ZTvn44_n44_N8S2488C22D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C198S2488C178S2488C23__8S2488C228S2488C15__7S2488C1[] = {
  ABISELECT(-79552,-43328),
  ABISELECT(-77856,-42400),
  ABISELECT(-77984,-42472),
  ABISELECT(-77728,-42320),
  ABISELECT(-60496,-32940),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2488C22D1Ev,_ZTvn44_n44_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2488C22D0Ev,_ZTvn44_n44_N8S2488C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C198S2488C178S2488C23__A2__8S2488C228S2488C15__7S2488C1[] = {
  ABISELECT(-78400,-42712),
  ABISELECT(-60912,-33180),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2488C22D1Ev,_ZTv0_n32_N8S2488C22D1Ev)();
extern void ABISELECT(_ZThn5584_N8S2488C22D1Ev,_ZThn3048_N8S2488C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2488C22D0Ev,_ZTv0_n32_N8S2488C22D0Ev)();
extern void ABISELECT(_ZThn5584_N8S2488C22D0Ev,_ZThn3048_N8S2488C22D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C228S2488C15__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(-5584,-3048),
  ABISELECT(-22432,-12228),
  ABISELECT(-24640,-13436),
  ABISELECT(-22944,-12508),
  ABISELECT(-23072,-12580),
  ABISELECT(-22816,-12428),
  ABISELECT(-5584,-3048),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C22D1Ev,_ZTv0_n32_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C22D0Ev,_ZTv0_n32_N8S2488C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void ABISELECT(_ZTvn2704_n88_N8S2488C22D1Ev,_ZTvn1460_n44_N8S2488C22D1Ev)();
extern void ABISELECT(_ZTvn2704_n88_N8S2488C22D0Ev,_ZTvn1460_n44_N8S2488C22D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2488C218S2488C178S2488C23__8S2488C228S2488C15__7S2488C1[] = {
  ABISELECT(-5312,-2876),
  ABISELECT(-82160,-44744),
  ABISELECT(-80464,-43816),
  ABISELECT(-80592,-43888),
  ABISELECT(-80336,-43736),
  ABISELECT(-63104,-34356),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2488C22D1Ev,_ZTvn1460_n44_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2488C22D0Ev,_ZTvn1460_n44_N8S2488C22D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2488C22D1Ev,_ZTv0_n28_N8S2488C22D1Ev)();
extern void ABISELECT(_ZThn57792_N8S2488C22D1Ev,_ZThn31480_N8S2488C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C22D0Ev,_ZTv0_n28_N8S2488C22D0Ev)();
extern void ABISELECT(_ZThn57792_N8S2488C22D0Ev,_ZThn31480_N8S2488C22D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C228S2488C15__7S2488C1[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-57792,-31480),
  ABISELECT(-76848,-41868),
  ABISELECT(-75152,-40940),
  ABISELECT(-75280,-41012),
  ABISELECT(-75024,-40860),
  ABISELECT(-57792,-31480),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C22D1Ev,_ZTv0_n28_N8S2488C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C22D0Ev,_ZTv0_n28_N8S2488C22D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C228S2488C15__7S2488C1[] = {
  ABISELECT(-75696,-41252),
  ABISELECT(-58208,-31720),
  (VTBL_ENTRY)&(_ZTI8S2488C22[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C21D1Ev();
extern void _ZN8S2488C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C218S2488C15__A2__7S2488C1[] = {
  ABISELECT(55984,30464),
  ABISELECT(-20864,-11404),
  ABISELECT(-19168,-10476),
  ABISELECT(-19296,-10548),
  ABISELECT(-19040,-10396),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN8S2488C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C21D0Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C218S2488C15__A2__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(19040,10396),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C218S2488C15__A2__7S2488C1[] = {
  0,
  ABISELECT(19168,10476),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(19168,10476),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C218S2488C15__A2__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(20864,11404),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev)();
extern void ABISELECT(_ZThn55984_N8S2488C21D1Ev,_ZThn30464_N8S2488C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev)();
extern void ABISELECT(_ZThn55984_N8S2488C21D0Ev,_ZThn30464_N8S2488C21D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__8S2488C218S2488C15__A2__7S2488C1[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-55984,-30464),
  ABISELECT(-76848,-41868),
  ABISELECT(-75152,-40940),
  ABISELECT(-75280,-41012),
  ABISELECT(-75024,-40860),
  ABISELECT(-55984,-30464),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A2__8S2488C218S2488C15__A2__7S2488C1[] = {
  ABISELECT(-75696,-41252),
  ABISELECT(-56400,-30704),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C15__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(16176,8800),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C15D1Ev,_ZTv0_n20_N8S2488C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C15D0Ev,_ZTv0_n20_N8S2488C15D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C15__7S2488C1[] = {
  0,
  ABISELECT(14480,7872),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(14480,7872),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C15D1Ev,_ZTv0_n20_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C15D0Ev,_ZTv0_n20_N8S2488C15D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A1__8S2488C15__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(14352,7792),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZThn96_N8S2488C15D1Ev,_ZThn44_N8S2488C15D1Ev)();
extern void ABISELECT(_ZThn96_N8S2488C15D0Ev,_ZThn44_N8S2488C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2488C16__8S2488C15__7S2488C1[] = {
  ABISELECT(60576,33024),
  ABISELECT(-14064,-7636),
  ABISELECT(8368,4592),
  ABISELECT(-16272,-8844),
  ABISELECT(-14448,-7836),
  ABISELECT(-14704,-7988),
  ABISELECT(-14576,-7916),
  ABISELECT(4912,2732),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C15D1Ev,_ZThn44_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C15D0Ev,_ZThn44_N8S2488C15D0Ev),
};
extern void ABISELECT(_ZTv0_n80_N8S2488C15D1Ev,_ZTv0_n40_N8S2488C15D1Ev)();
extern void ABISELECT(_ZThn5008_N8S2488C15D1Ev,_ZThn2776_N8S2488C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S2488C15D0Ev,_ZTv0_n40_N8S2488C15D0Ev)();
extern void ABISELECT(_ZThn5008_N8S2488C15D0Ev,_ZThn2776_N8S2488C15D0Ev)() __attribute__((weak));
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C17__8S2488C15__7S2488C1[] = {
  ABISELECT(512,284),
  ABISELECT(512,284),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-5008,-2776),
  ABISELECT(55664,30292),
  ABISELECT(-18976,-10368),
  ABISELECT(3456,1860),
  ABISELECT(-21184,-11576),
  ABISELECT(-19360,-10568),
  ABISELECT(-19616,-10720),
  ABISELECT(-19488,-10648),
  ABISELECT(-5008,-2776),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2488C15D1Ev,_ZTv0_n40_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2488C15D0Ev,_ZTv0_n40_N8S2488C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
};
extern void ABISELECT(_ZTvn96_n80_N8S2488C15D1Ev,_ZTvn44_n40_N8S2488C15D1Ev)();
extern void ABISELECT(_ZTvn96_n80_N8S2488C15D0Ev,_ZTvn44_n40_N8S2488C15D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C198S2488C17__8S2488C15__7S2488C1[] = {
  ABISELECT(-21280,-11620),
  ABISELECT(-19584,-10692),
  ABISELECT(-19712,-10764),
  ABISELECT(-19456,-10612),
  ABISELECT(-5104,-2820),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2488C15D1Ev,_ZTvn44_n40_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n80_N8S2488C15D0Ev,_ZTvn44_n40_N8S2488C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C198S2488C17__A2__8S2488C15__7S2488C1[] = {
  ABISELECT(-20128,-11004),
  ABISELECT(-5520,-3060),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2488C15D1Ev,_ZTv0_n32_N8S2488C15D1Ev)();
extern void ABISELECT(_ZThn8464_N8S2488C15D1Ev,_ZThn4636_N8S2488C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2488C15D0Ev,_ZTv0_n32_N8S2488C15D0Ev)();
extern void ABISELECT(_ZThn8464_N8S2488C15D0Ev,_ZThn4636_N8S2488C15D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C15__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(-8464,-4636),
  ABISELECT(-22432,-12228),
  ABISELECT(-24640,-13436),
  ABISELECT(-22944,-12508),
  ABISELECT(-23072,-12580),
  ABISELECT(-22816,-12428),
  ABISELECT(-8464,-4636),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C15D1Ev,_ZTv0_n32_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C15D0Ev,_ZTv0_n32_N8S2488C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C15__7S2488C1[] = {
  0,
  ABISELECT(13968,7592),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void ABISELECT(_ZTvn2704_n80_N8S2488C15D1Ev,_ZTvn1460_n40_N8S2488C15D1Ev)();
extern void ABISELECT(_ZTvn2704_n80_N8S2488C15D0Ev,_ZTvn1460_n40_N8S2488C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2488C218S2488C17__8S2488C15__7S2488C1[] = {
  ABISELECT(52960,28832),
  ABISELECT(-23888,-13036),
  ABISELECT(-22192,-12108),
  ABISELECT(-22320,-12180),
  ABISELECT(-22064,-12028),
  ABISELECT(-7712,-4236),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2488C15D1Ev,_ZTvn1460_n40_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n80_N8S2488C15D0Ev,_ZTvn1460_n40_N8S2488C15D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2488C15D1Ev,_ZTv0_n28_N8S2488C15D1Ev)();
extern void ABISELECT(_ZThn60672_N8S2488C15D1Ev,_ZThn33068_N8S2488C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C15D0Ev,_ZTv0_n28_N8S2488C15D0Ev)();
extern void ABISELECT(_ZThn60672_N8S2488C15D0Ev,_ZThn33068_N8S2488C15D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C15__7S2488C1[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-60672,-33068),
  ABISELECT(-76848,-41868),
  ABISELECT(-75152,-40940),
  ABISELECT(-75280,-41012),
  ABISELECT(-75024,-40860),
  ABISELECT(-60672,-33068),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C15D1Ev,_ZTv0_n28_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C15D0Ev,_ZTv0_n28_N8S2488C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C15__7S2488C1[] = {
  ABISELECT(-75696,-41252),
  ABISELECT(-61088,-33308),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
extern void _ZN8S2488C223v14Ev();
extern void _ZN8S2488C223v15Ev();
extern void ABISELECT(_ZThn2880_N8S2488C15D1Ev,_ZThn1588_N8S2488C15D1Ev)();
extern void ABISELECT(_ZThn2880_N8S2488C15D0Ev,_ZThn1588_N8S2488C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2488C22__8S2488C15__7S2488C1[] = {
  ABISELECT(57792,31480),
  ABISELECT(5584,3048),
  ABISELECT(-16848,-9180),
  ABISELECT(-19056,-10388),
  ABISELECT(-17360,-9460),
  ABISELECT(-17232,-9380),
  ABISELECT(66720,36332),
  ABISELECT(60400,32896),
  ABISELECT(-17488,-9532),
  ABISELECT(-2880,-1588),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
  (VTBL_ENTRY)&_ZN8S2488C223v14Ev,
  (VTBL_ENTRY)&_ZN8S2488C223v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2880_N8S2488C15D1Ev,_ZThn1588_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2880_N8S2488C15D0Ev,_ZThn1588_N8S2488C15D0Ev),
};
extern void ABISELECT(_ZTv0_n88_N8S2488C15D1Ev,_ZTv0_n44_N8S2488C15D1Ev)();
extern void ABISELECT(_ZThn63280_N8S2488C15D1Ev,_ZThn34484_N8S2488C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S2488C15D0Ev,_ZTv0_n44_N8S2488C15D0Ev)();
extern void ABISELECT(_ZThn63280_N8S2488C15D0Ev,_ZThn34484_N8S2488C15D0Ev)() __attribute__((weak));
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C23__8S2488C15__7S2488C1[] = {
  ABISELECT(512,284),
  ABISELECT(512,284),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(-63280,-34484),
  ABISELECT(6320,3436),
  ABISELECT(-2608,-1416),
  ABISELECT(-77248,-42076),
  ABISELECT(-54816,-29848),
  ABISELECT(-79456,-43284),
  ABISELECT(-77632,-42276),
  ABISELECT(-77888,-42428),
  ABISELECT(-77760,-42356),
  ABISELECT(-63280,-34484),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2488C15D1Ev,_ZTv0_n44_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S2488C15D0Ev,_ZTv0_n44_N8S2488C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2488C15D1Ev,_ZTv0_n28_N8S2488C15D1Ev)();
extern void ABISELECT(_ZThn69600_N8S2488C15D1Ev,_ZThn37920_N8S2488C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C15D0Ev,_ZTv0_n28_N8S2488C15D0Ev)();
extern void ABISELECT(_ZThn69600_N8S2488C15D0Ev,_ZThn37920_N8S2488C15D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C10__A3__8S2488C15__7S2488C1[] = {
  0,
  ABISELECT(-69600,-37920),
  ABISELECT(-85776,-46720),
  ABISELECT(-84080,-45792),
  ABISELECT(-84208,-45864),
  ABISELECT(-83952,-45712),
  ABISELECT(-69600,-37920),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C15D1Ev,_ZTv0_n28_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C15D0Ev,_ZTv0_n28_N8S2488C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void ABISELECT(_ZTvn96_n88_N8S2488C15D1Ev,_ZTvn44_n44_N8S2488C15D1Ev)();
extern void ABISELECT(_ZTvn96_n88_N8S2488C15D0Ev,_ZTvn44_n44_N8S2488C15D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C198S2488C178S2488C23__A2__8S2488C15__7S2488C1[] = {
  ABISELECT(-79552,-43328),
  ABISELECT(-77856,-42400),
  ABISELECT(-77984,-42472),
  ABISELECT(-77728,-42320),
  ABISELECT(-63376,-34528),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2488C15D1Ev,_ZTvn44_n44_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn96_n88_N8S2488C15D0Ev,_ZTvn44_n44_N8S2488C15D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C198S2488C178S2488C23__A4__8S2488C15__7S2488C1[] = {
  ABISELECT(-78400,-42712),
  ABISELECT(-63792,-34768),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTvn2704_n88_N8S2488C15D1Ev,_ZTvn1460_n44_N8S2488C15D1Ev)();
extern void ABISELECT(_ZTvn2704_n88_N8S2488C15D0Ev,_ZTvn1460_n44_N8S2488C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2488C218S2488C178S2488C23__A1__8S2488C15__7S2488C1[] = {
  ABISELECT(-5312,-2876),
  ABISELECT(-82160,-44744),
  ABISELECT(-80464,-43816),
  ABISELECT(-80592,-43888),
  ABISELECT(-80336,-43736),
  ABISELECT(-65984,-35944),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2488C15D1Ev,_ZTvn1460_n44_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n88_N8S2488C15D0Ev,_ZTvn1460_n44_N8S2488C15D0Ev),
};
extern void ABISELECT(_ZThn4688_N8S2488C15D1Ev,_ZThn2604_N8S2488C15D1Ev)();
extern void ABISELECT(_ZThn4688_N8S2488C15D0Ev,_ZThn2604_N8S2488C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2488C21__A2__8S2488C15__7S2488C1[] = {
  ABISELECT(55984,30464),
  ABISELECT(-20864,-11404),
  ABISELECT(-19168,-10476),
  ABISELECT(-19296,-10548),
  ABISELECT(-19040,-10396),
  ABISELECT(-4688,-2604),
  (VTBL_ENTRY)&(_ZTI8S2488C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4688_N8S2488C15D1Ev,_ZThn2604_N8S2488C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4688_N8S2488C15D0Ev,_ZThn2604_N8S2488C15D0Ev),
};
extern void _ZN8S2488C17D1Ev();
extern void _ZN8S2488C17D0Ev();
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C17__7S2488C1[] = {
  ABISELECT(55664,30292),
  ABISELECT(-18976,-10368),
  ABISELECT(3456,1860),
  ABISELECT(-21184,-11576),
  ABISELECT(-19360,-10568),
  ABISELECT(-19616,-10720),
  ABISELECT(-19488,-10648),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN8S2488C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C17D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
};
extern void _ZN8S2488C19D1Ev();
extern void _ZN8S2488C19D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C198S2488C17__7S2488C1[] = {
  ABISELECT(-21280,-11620),
  ABISELECT(-19584,-10692),
  ABISELECT(-19712,-10764),
  ABISELECT(-19456,-10612),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN8S2488C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C108S2488C198S2488C17__A1__7S2488C1[] = {
  ABISELECT(-21280,-11620),
  ABISELECT(-19584,-10692),
  ABISELECT(-19712,-10764),
  ABISELECT(-19456,-10612),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C108S2488C198S2488C17__A1__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(19456,10612),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C108S2488C198S2488C17__A1__7S2488C1[] = {
  0,
  ABISELECT(19584,10692),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(19584,10692),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C108S2488C198S2488C17__A1__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(21280,11620),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C198S2488C17__A2__7S2488C1[] = {
  ABISELECT(-20128,-11004),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C198S2488C17__7S2488C1[] = {
  0,
  ABISELECT(19584,10692),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(19584,10692),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C198S2488C17__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(19456,10612),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C198S2488C17__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(21280,11620),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A__8S2488C198S2488C17__7S2488C1[] = {
  ABISELECT(-20128,-11004),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C21D1Ev();
extern void _ZN8S2488C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C218S2488C17__7S2488C1[] = {
  ABISELECT(52960,28832),
  ABISELECT(-23888,-13036),
  ABISELECT(-22192,-12108),
  ABISELECT(-22320,-12180),
  ABISELECT(-22064,-12028),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN8S2488C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C21D0Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C218S2488C17__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(22064,12028),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C218S2488C17__7S2488C1[] = {
  0,
  ABISELECT(22192,12108),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(22192,12108),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C218S2488C17__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(23888,13036),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev)();
extern void ABISELECT(_ZThn52960_N8S2488C21D1Ev,_ZThn28832_N8S2488C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev)();
extern void ABISELECT(_ZThn52960_N8S2488C21D0Ev,_ZThn28832_N8S2488C21D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__8S2488C218S2488C17__7S2488C1[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-52960,-28832),
  ABISELECT(-76848,-41868),
  ABISELECT(-75152,-40940),
  ABISELECT(-75280,-41012),
  ABISELECT(-75024,-40860),
  ABISELECT(-52960,-28832),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A2__8S2488C218S2488C17__7S2488C1[] = {
  ABISELECT(-75696,-41252),
  ABISELECT(-53376,-29072),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZThn96_N8S2488C17D1Ev,_ZThn44_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S2488C17D0Ev,_ZThn44_N8S2488C17D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A__8S2488C17__7S2488C1[] = {
  ABISELECT(-21280,-11620),
  ABISELECT(-19584,-10692),
  ABISELECT(-19712,-10764),
  ABISELECT(-19456,-10612),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C17D1Ev,_ZThn44_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C17D0Ev,_ZThn44_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C17__7S2488C1[] = {
  0,
  ABISELECT(19488,10648),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(19488,10648),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C17__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(19360,10568),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C17__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(21184,11576),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A2__8S2488C17__7S2488C1[] = {
  ABISELECT(-20128,-11004),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn3456_N8S2488C17D1Ev,_ZThn1860_N8S2488C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev)();
extern void ABISELECT(_ZThn3456_N8S2488C17D0Ev,_ZThn1860_N8S2488C17D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C17__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(-3456,-1860),
  ABISELECT(-22432,-12228),
  ABISELECT(-24640,-13436),
  ABISELECT(-22944,-12508),
  ABISELECT(-23072,-12580),
  ABISELECT(-22816,-12428),
  ABISELECT(-3456,-1860),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C17__7S2488C1[] = {
  0,
  ABISELECT(18976,10368),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void ABISELECT(_ZThn2704_N8S2488C17D1Ev,_ZThn1460_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2488C17D0Ev,_ZThn1460_N8S2488C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2488C21__8S2488C17__7S2488C1[] = {
  ABISELECT(52960,28832),
  ABISELECT(-23888,-13036),
  ABISELECT(-22192,-12108),
  ABISELECT(-22320,-12180),
  ABISELECT(-22064,-12028),
  ABISELECT(-2704,-1460),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C17D1Ev,_ZThn1460_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C17D0Ev,_ZThn1460_N8S2488C17D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn55664_N8S2488C17D1Ev,_ZThn30292_N8S2488C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev)();
extern void ABISELECT(_ZThn55664_N8S2488C17D0Ev,_ZThn30292_N8S2488C17D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C17__7S2488C1[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-55664,-30292),
  ABISELECT(-76848,-41868),
  ABISELECT(-75152,-40940),
  ABISELECT(-75280,-41012),
  ABISELECT(-75024,-40860),
  ABISELECT(-55664,-30292),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C17__7S2488C1[] = {
  ABISELECT(-75696,-41252),
  ABISELECT(-56080,-30532),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C20D1Ev();
extern void _ZN8S2488C20D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__7S2488C1[] = {
  ABISELECT(-22432,-12228),
  ABISELECT(-24640,-13436),
  ABISELECT(-22944,-12508),
  ABISELECT(-23072,-12580),
  ABISELECT(-22816,-12428),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN8S2488C20D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C20D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN7S2488C9D1Ev();
extern void _ZN7S2488C9D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C98S2488C20__A1__7S2488C1[] = {
  ABISELECT(-24640,-13436),
  ABISELECT(-22944,-12508),
  ABISELECT(-23072,-12580),
  ABISELECT(-22816,-12428),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2488C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C107S2488C98S2488C20__A2__7S2488C1[] = {
  ABISELECT(-24640,-13436),
  ABISELECT(-22944,-12508),
  ABISELECT(-23072,-12580),
  ABISELECT(-22816,-12428),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C107S2488C98S2488C20__A2__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(22816,12428),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C107S2488C98S2488C20__A2__7S2488C1[] = {
  0,
  ABISELECT(22944,12508),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(22944,12508),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C107S2488C98S2488C20__A2__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(24640,13436),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__7S2488C98S2488C20__A1__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(22816,12428),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__7S2488C98S2488C20__A1__7S2488C1[] = {
  0,
  ABISELECT(22944,12508),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(22944,12508),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__7S2488C98S2488C20__A1__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(24640,13436),
  (VTBL_ENTRY)&(_ZTI7S2488C9[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C20__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(24640,13436),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A1__8S2488C20__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(22816,12428),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C20D1Ev,_ZTv0_n20_N8S2488C20D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C20D0Ev,_ZTv0_n20_N8S2488C20D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C20__7S2488C1[] = {
  0,
  ABISELECT(22944,12508),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(22944,12508),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C20D1Ev,_ZTv0_n20_N8S2488C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C20D0Ev,_ZTv0_n20_N8S2488C20D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C20__7S2488C1[] = {
  0,
  ABISELECT(22432,12228),
  (VTBL_ENTRY)&(_ZTI8S2488C20[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void _ZN8S2488C19D1Ev();
extern void _ZN8S2488C19D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__7S2488C1[] = {
  ABISELECT(-76848,-41868),
  ABISELECT(-75152,-40940),
  ABISELECT(-75280,-41012),
  ABISELECT(-75024,-40860),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN8S2488C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C108S2488C19__A3__7S2488C1[] = {
  ABISELECT(-76848,-41868),
  ABISELECT(-75152,-40940),
  ABISELECT(-75280,-41012),
  ABISELECT(-75024,-40860),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C108S2488C19__A3__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(75024,40860),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C108S2488C19__A3__7S2488C1[] = {
  0,
  ABISELECT(75152,40940),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(75152,40940),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C108S2488C19__A3__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(76848,41868),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__7S2488C1[] = {
  ABISELECT(-75696,-41252),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C19__A1__7S2488C1[] = {
  0,
  ABISELECT(75152,40940),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(75152,40940),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C19__A1__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(75024,40860),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C19__A1__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(76848,41868),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A__8S2488C19__A1__7S2488C1[] = {
  ABISELECT(-75696,-41252),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C23D1Ev();
extern void _ZN8S2488C23D0Ev();
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C23__7S2488C1[] = {
  ABISELECT(6320,3436),
  ABISELECT(-2608,-1416),
  ABISELECT(-77248,-42076),
  ABISELECT(-54816,-29848),
  ABISELECT(-79456,-43284),
  ABISELECT(-77632,-42276),
  ABISELECT(-77888,-42428),
  ABISELECT(-77760,-42356),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN8S2488C23D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C23D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
};
extern void _ZN8S2488C17D1Ev();
extern void _ZN8S2488C17D0Ev();
extern void _ZN8S2488C173v12Ev();
extern void _ZN8S2488C173v13Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C178S2488C23__A1__7S2488C1[] = {
  ABISELECT(-2608,-1416),
  ABISELECT(-77248,-42076),
  ABISELECT(-54816,-29848),
  ABISELECT(-79456,-43284),
  ABISELECT(-77632,-42276),
  ABISELECT(-77888,-42428),
  ABISELECT(-77760,-42356),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN8S2488C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C17D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v12Ev,
  (VTBL_ENTRY)&_ZN8S2488C173v13Ev,
};
extern void _ZN8S2488C19D1Ev();
extern void _ZN8S2488C19D0Ev();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C198S2488C178S2488C23__A2__7S2488C1[] = {
  ABISELECT(-79552,-43328),
  ABISELECT(-77856,-42400),
  ABISELECT(-77984,-42472),
  ABISELECT(-77728,-42320),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN8S2488C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C19D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C108S2488C198S2488C178S2488C23__A5__7S2488C1[] = {
  ABISELECT(-79552,-43328),
  ABISELECT(-77856,-42400),
  ABISELECT(-77984,-42472),
  ABISELECT(-77728,-42320),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C108S2488C198S2488C178S2488C23__A5__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(77728,42320),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C108S2488C198S2488C178S2488C23__A5__7S2488C1[] = {
  0,
  ABISELECT(77856,42400),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(77856,42400),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C108S2488C198S2488C178S2488C23__A5__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(79552,43328),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C198S2488C178S2488C23__A4__7S2488C1[] = {
  ABISELECT(-78400,-42712),
  0,
  (VTBL_ENTRY)&(_ZTI7S2488C6[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C198S2488C178S2488C23__A2__7S2488C1[] = {
  0,
  ABISELECT(77856,42400),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(77856,42400),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D1Ev,_ZTv0_n20_N8S2488C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C19D0Ev,_ZTv0_n20_N8S2488C19D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C198S2488C178S2488C23__A2__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(77728,42320),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C198S2488C178S2488C23__A2__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(79552,43328),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__A__8S2488C198S2488C178S2488C23__A2__7S2488C1[] = {
  ABISELECT(-78400,-42712),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S2488C19[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C21D1Ev();
extern void _ZN8S2488C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C218S2488C178S2488C23__A1__7S2488C1[] = {
  ABISELECT(-5312,-2876),
  ABISELECT(-82160,-44744),
  ABISELECT(-80464,-43816),
  ABISELECT(-80592,-43888),
  ABISELECT(-80336,-43736),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN8S2488C21D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C21D0Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C218S2488C178S2488C23__A1__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(80336,43736),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C218S2488C178S2488C23__A1__7S2488C1[] = {
  0,
  ABISELECT(80464,43816),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(80464,43816),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D1Ev,_ZTv0_n20_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C21D0Ev,_ZTv0_n20_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C218S2488C178S2488C23__A1__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(82160,44744),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__8S2488C218S2488C178S2488C23__A1__7S2488C1[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(5312,2876),
  ABISELECT(-76848,-41868),
  ABISELECT(-75152,-40940),
  ABISELECT(-75280,-41012),
  ABISELECT(-75024,-40860),
  ABISELECT(5312,2876),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A2__8S2488C218S2488C178S2488C23__A1__7S2488C1[] = {
  ABISELECT(-75696,-41252),
  ABISELECT(4896,2636),
  (VTBL_ENTRY)&(_ZTI8S2488C21[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZThn96_N8S2488C17D1Ev,_ZThn44_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S2488C17D0Ev,_ZThn44_N8S2488C17D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A__8S2488C178S2488C23__A1__7S2488C1[] = {
  ABISELECT(-79552,-43328),
  ABISELECT(-77856,-42400),
  ABISELECT(-77984,-42472),
  ABISELECT(-77728,-42320),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C17D1Ev,_ZThn44_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C17D0Ev,_ZThn44_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C178S2488C23__A1__7S2488C1[] = {
  0,
  ABISELECT(77760,42356),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(77760,42356),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C17D1Ev,_ZTv0_n20_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C17D0Ev,_ZTv0_n20_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C178S2488C23__A1__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(77632,42276),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C178S2488C23__A1__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(79456,43284),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A2__8S2488C178S2488C23__A1__7S2488C1[] = {
  ABISELECT(-78400,-42712),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C178S2488C23__A1__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(54816,29848),
  ABISELECT(-22432,-12228),
  ABISELECT(-24640,-13436),
  ABISELECT(-22944,-12508),
  ABISELECT(-23072,-12580),
  ABISELECT(-22816,-12428),
  ABISELECT(54816,29848),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C178S2488C23__A1__7S2488C1[] = {
  0,
  ABISELECT(77248,42076),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void ABISELECT(_ZThn2704_N8S2488C17D1Ev,_ZThn1460_N8S2488C17D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2488C17D0Ev,_ZThn1460_N8S2488C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2488C21__8S2488C178S2488C23__A1__7S2488C1[] = {
  ABISELECT(-5312,-2876),
  ABISELECT(-82160,-44744),
  ABISELECT(-80464,-43816),
  ABISELECT(-80592,-43888),
  ABISELECT(-80336,-43736),
  ABISELECT(-2704,-1460),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C17D1Ev,_ZThn1460_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C17D0Ev,_ZThn1460_N8S2488C17D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C178S2488C23__A1__7S2488C1[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(2608,1416),
  ABISELECT(-76848,-41868),
  ABISELECT(-75152,-40940),
  ABISELECT(-75280,-41012),
  ABISELECT(-75024,-40860),
  ABISELECT(2608,1416),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C178S2488C23__A1__7S2488C1[] = {
  ABISELECT(-75696,-41252),
  ABISELECT(2192,1176),
  (VTBL_ENTRY)&(_ZTI8S2488C17[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev)();
extern void ABISELECT(_ZThn6320_N8S2488C23D1Ev,_ZThn3436_N8S2488C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev)();
extern void ABISELECT(_ZThn6320_N8S2488C23D0Ev,_ZThn3436_N8S2488C23D0Ev)() __attribute__((weak));
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C10__8S2488C23__7S2488C1[] = {
  0,
  ABISELECT(-6320,-3436),
  ABISELECT(-85776,-46720),
  ABISELECT(-84080,-45792),
  ABISELECT(-84208,-45864),
  ABISELECT(-83952,-45712),
  ABISELECT(-6320,-3436),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C23__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(77632,42276),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C23D1Ev,_ZTv0_n20_N8S2488C23D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C23D0Ev,_ZTv0_n20_N8S2488C23D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C23__7S2488C1[] = {
  0,
  ABISELECT(77760,42356),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(77760,42356),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C23D1Ev,_ZTv0_n20_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C23D0Ev,_ZTv0_n20_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C23__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(79456,43284),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
extern void _ZN8S2488C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C13__8S2488C23__7S2488C1[] = {
  0,
  ABISELECT(77248,42076),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN8S2488C133v11Ev,
};
extern void ABISELECT(_ZThn96_N8S2488C23D1Ev,_ZThn44_N8S2488C23D1Ev)();
extern void ABISELECT(_ZThn96_N8S2488C23D0Ev,_ZThn44_N8S2488C23D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C198S2488C17__8S2488C23__7S2488C1[] = {
  ABISELECT(-79552,-43328),
  ABISELECT(-77856,-42400),
  ABISELECT(-77984,-42472),
  ABISELECT(-77728,-42320),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C23D1Ev,_ZThn44_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S2488C23D0Ev,_ZThn44_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C198S2488C17__A2__8S2488C23__7S2488C1[] = {
  ABISELECT(-78400,-42712),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S2488C23D1Ev,_ZTv0_n32_N8S2488C23D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S2488C23D0Ev,_ZTv0_n32_N8S2488C23D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN7S2488C92v6Ev();
extern void _ZN7S2488C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C20__8S2488C23__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(54816,29848),
  ABISELECT(-22432,-12228),
  ABISELECT(-24640,-13436),
  ABISELECT(-22944,-12508),
  ABISELECT(-23072,-12580),
  ABISELECT(-22816,-12428),
  ABISELECT(54816,29848),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C23D1Ev,_ZTv0_n32_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S2488C23D0Ev,_ZTv0_n32_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v6Ev,
  (VTBL_ENTRY)&_ZN7S2488C92v7Ev,
};
extern void ABISELECT(_ZThn2704_N8S2488C23D1Ev,_ZThn1460_N8S2488C23D1Ev)();
extern void ABISELECT(_ZThn2704_N8S2488C23D0Ev,_ZThn1460_N8S2488C23D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2488C218S2488C17__8S2488C23__7S2488C1[] = {
  ABISELECT(-5312,-2876),
  ABISELECT(-82160,-44744),
  ABISELECT(-80464,-43816),
  ABISELECT(-80592,-43888),
  ABISELECT(-80336,-43736),
  ABISELECT(-2704,-1460),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C23D1Ev,_ZThn1460_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S2488C23D0Ev,_ZThn1460_N8S2488C23D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev)();
extern void _ZN8S2488C102v5Ev();
extern void _ZN8S2488C192v8Ev();
extern void _ZN8S2488C192v9Ev();
extern void _ZN8S2488C193v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C19__A1__8S2488C23__7S2488C1[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(2608,1416),
  ABISELECT(-76848,-41868),
  ABISELECT(-75152,-40940),
  ABISELECT(-75280,-41012),
  ABISELECT(-75024,-40860),
  ABISELECT(2608,1416),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev),
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v8Ev,
  (VTBL_ENTRY)&_ZN8S2488C192v9Ev,
  (VTBL_ENTRY)&_ZN8S2488C193v10Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C68S2488C19__A3__8S2488C23__7S2488C1[] = {
  ABISELECT(-75696,-41252),
  ABISELECT(2192,1176),
  (VTBL_ENTRY)&(_ZTI8S2488C23[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void _ZN8S2488C10D1Ev();
extern void _ZN8S2488C10D0Ev();
extern void _ZN8S2488C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S2488C10__A4__7S2488C1[] = {
  ABISELECT(-85776,-46720),
  ABISELECT(-84080,-45792),
  ABISELECT(-84208,-45864),
  ABISELECT(-83952,-45712),
  0,
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN8S2488C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2488C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2488C102v5Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C6__8S2488C10__A4__7S2488C1[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(83952,45712),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev)();
extern void _ZN7S2488C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C8__8S2488C10__A4__7S2488C1[] = {
  0,
  ABISELECT(84080,45792),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(84080,45792),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev),
  (VTBL_ENTRY)&_ZN7S2488C82v4Ev,
};
extern void _ZN7S2488C62v1Ev();
extern void _ZN7S2488C62v2Ev();
extern void _ZN7S2488C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2488C5__8S2488C10__A4__7S2488C1[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(85776,46720),
  (VTBL_ENTRY)&(_ZTI8S2488C10[0]),
  (VTBL_ENTRY)&_ZN7S2488C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2488C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2488C52v3Ev,
};
static  VTT_ENTRY vtt_S2488C1[] = {
  {&(_ZTV7S2488C1[13]),  13,254},
  {&(_tg__ZTV7S2488C2__7S2488C1[6]),  6,11},
  {&(_tg__ZTV7S2488C97S2488C2__7S2488C1[6]),  6,11},
  {&(_tg__ZTV8S2488C107S2488C97S2488C2__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C107S2488C97S2488C2__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C107S2488C97S2488C2__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C107S2488C97S2488C2__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__7S2488C97S2488C2__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C8__7S2488C97S2488C2__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C5__7S2488C97S2488C2__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C5__7S2488C2__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C8__7S2488C2__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A1__7S2488C2__7S2488C1[5]),  5,7},
  {&(_ZTV7S2488C1[24]),  24,254},
  {&(_ZTV7S2488C1[33]),  33,254},
  {&(_ZTV7S2488C1[41]),  41,254},
  {&(_ZTV7S2488C1[46]),  46,254},
  {&(_ZTV7S2488C1[65]),  65,254},
  {&(_ZTV7S2488C1[77]),  77,254},
  {&(_ZTV7S2488C1[124]),  124,254},
  {&(_ZTV7S2488C1[134]),  134,254},
  {&(_ZTV7S2488C1[143]),  143,254},
  {&(_ZTV7S2488C1[165]),  165,254},
  {&(_ZTV7S2488C1[152]),  152,254},
  {&(_ZTV7S2488C1[183]),  183,254},
  {&(_ZTV7S2488C1[192]),  192,254},
  {&(_ZTV7S2488C1[90]),  90,254},
  {&(_ZTV7S2488C1[213]),  213,254},
  {&(_ZTV7S2488C1[251]),  251,254},
  {&(_ZTV7S2488C1[223]),  223,254},
  {&(_ZTV7S2488C1[232]),  232,254},
  {&(_ZTV7S2488C1[241]),  241,254},
  {&(_ZTV7S2488C1[104]),  104,254},
  {&(_tg__ZTV7S2488C5__7S2488C1[3]),  3,6},
  {&(_tg__ZTV7S2488C67S2488C5__7S2488C1[3]),  3,5},
  {&(_tg__ZTV7S2488C8__7S2488C1[4]),  4,7},
  {&(_tg__ZTV7S2488C6__7S2488C8__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C6__A1__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C15__7S2488C1[12]),  12,14},
  {&(_tg__ZTV8S2488C148S2488C15__7S2488C1[6]),  6,8},
  {&(_tg__ZTV7S2488C5__8S2488C148S2488C15__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C8__8S2488C148S2488C15__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A1__8S2488C148S2488C15__7S2488C1[5]),  5,7},
  {&(_tg__ZTV8S2488C168S2488C15__7S2488C1[10]),  10,12},
  {&(_tg__ZTV8S2488C17__8S2488C168S2488C15__7S2488C1[18]),  18,22},
  {&(_tg__ZTV8S2488C198S2488C17__8S2488C168S2488C15__7S2488C1[6]),  6,12},
  {&(_tg__ZTV7S2488C8__8S2488C168S2488C15__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C168S2488C15__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C168S2488C15__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C198S2488C17__A2__8S2488C168S2488C15__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C168S2488C15__7S2488C1[11]),  11,16},
  {&(_tg__ZTV8S2488C13__8S2488C168S2488C15__7S2488C1[3]),  3,4},
  {&(_tg__ZTV8S2488C218S2488C17__8S2488C168S2488C15__7S2488C1[7]),  7,9},
  {&(_tg__ZTV8S2488C19__A1__8S2488C168S2488C15__7S2488C1[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C168S2488C15__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C228S2488C15__7S2488C1[11]),  11,18},
  {&(_tg__ZTV7S2488C58S2488C228S2488C15__A1__7S2488C1[3]),  3,6},
  {&(_tg__ZTV7S2488C67S2488C58S2488C228S2488C15__A5__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C23__8S2488C228S2488C15__7S2488C1[19]),  19,23},
  {&(_tg__ZTV8S2488C10__8S2488C228S2488C15__7S2488C1[8]),  8,11},
  {&(_tg__ZTV7S2488C6__8S2488C228S2488C15__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C228S2488C15__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C228S2488C15__7S2488C1[6]),  6,9},
  {&(_tg__ZTV8S2488C13__8S2488C228S2488C15__7S2488C1[3]),  3,4},
  {&(_tg__ZTV8S2488C198S2488C178S2488C23__8S2488C228S2488C15__7S2488C1[6]),  6,12},
  {&(_tg__ZTV7S2488C68S2488C198S2488C178S2488C23__A2__8S2488C228S2488C15__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C228S2488C15__7S2488C1[11]),  11,16},
  {&(_tg__ZTV8S2488C218S2488C178S2488C23__8S2488C228S2488C15__7S2488C1[7]),  7,9},
  {&(_tg__ZTV8S2488C19__A1__8S2488C228S2488C15__7S2488C1[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C228S2488C15__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C218S2488C15__A2__7S2488C1[7]),  7,9},
  {&(_tg__ZTV7S2488C6__8S2488C218S2488C15__A2__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C218S2488C15__A2__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C218S2488C15__A2__7S2488C1[6]),  6,9},
  {&(_tg__ZTV8S2488C19__8S2488C218S2488C15__A2__7S2488C1[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A2__8S2488C218S2488C15__A2__7S2488C1[3]),  3,5},
  {&(_tg__ZTV7S2488C5__8S2488C15__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C8__8S2488C15__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A1__8S2488C15__7S2488C1[5]),  5,7},
  {&(_tg__ZTV8S2488C16__8S2488C15__7S2488C1[10]),  10,12},
  {&(_tg__ZTV8S2488C17__8S2488C15__7S2488C1[18]),  18,22},
  {&(_tg__ZTV8S2488C198S2488C17__8S2488C15__7S2488C1[6]),  6,12},
  {&(_tg__ZTV7S2488C68S2488C198S2488C17__A2__8S2488C15__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C15__7S2488C1[11]),  11,16},
  {&(_tg__ZTV8S2488C13__8S2488C15__7S2488C1[3]),  3,4},
  {&(_tg__ZTV8S2488C218S2488C17__8S2488C15__7S2488C1[7]),  7,9},
  {&(_tg__ZTV8S2488C19__A1__8S2488C15__7S2488C1[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C15__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C22__8S2488C15__7S2488C1[11]),  11,18},
  {&(_tg__ZTV8S2488C23__8S2488C15__7S2488C1[19]),  19,23},
  {&(_tg__ZTV8S2488C10__A3__8S2488C15__7S2488C1[8]),  8,11},
  {&(_tg__ZTV8S2488C198S2488C178S2488C23__A2__8S2488C15__7S2488C1[6]),  6,12},
  {&(_tg__ZTV7S2488C68S2488C198S2488C178S2488C23__A4__8S2488C15__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C218S2488C178S2488C23__A1__8S2488C15__7S2488C1[7]),  7,9},
  {&(_tg__ZTV8S2488C21__A2__8S2488C15__7S2488C1[7]),  7,9},
  {&(_tg__ZTV8S2488C17__7S2488C1[9]),  9,13},
  {&(_tg__ZTV8S2488C198S2488C17__7S2488C1[6]),  6,12},
  {&(_tg__ZTV8S2488C108S2488C198S2488C17__A1__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C108S2488C198S2488C17__A1__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C108S2488C198S2488C17__A1__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C108S2488C198S2488C17__A1__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C198S2488C17__A2__7S2488C1[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C198S2488C17__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C198S2488C17__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C198S2488C17__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A__8S2488C198S2488C17__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C218S2488C17__7S2488C1[7]),  7,9},
  {&(_tg__ZTV7S2488C6__8S2488C218S2488C17__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C218S2488C17__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C218S2488C17__7S2488C1[6]),  6,9},
  {&(_tg__ZTV8S2488C19__8S2488C218S2488C17__7S2488C1[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A2__8S2488C218S2488C17__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C19__A__8S2488C17__7S2488C1[6]),  6,12},
  {&(_tg__ZTV7S2488C8__8S2488C17__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C17__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C17__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C19__A2__8S2488C17__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C17__7S2488C1[11]),  11,16},
  {&(_tg__ZTV8S2488C13__8S2488C17__7S2488C1[3]),  3,4},
  {&(_tg__ZTV8S2488C21__8S2488C17__7S2488C1[7]),  7,9},
  {&(_tg__ZTV8S2488C19__A1__8S2488C17__7S2488C1[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C17__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C20__7S2488C1[7]),  7,12},
  {&(_tg__ZTV7S2488C98S2488C20__A1__7S2488C1[6]),  6,11},
  {&(_tg__ZTV8S2488C107S2488C98S2488C20__A2__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C107S2488C98S2488C20__A2__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C107S2488C98S2488C20__A2__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C107S2488C98S2488C20__A2__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__7S2488C98S2488C20__A1__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C8__7S2488C98S2488C20__A1__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C5__7S2488C98S2488C20__A1__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C20__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A1__8S2488C20__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C20__7S2488C1[6]),  6,9},
  {&(_tg__ZTV8S2488C13__8S2488C20__7S2488C1[3]),  3,4},
  {&(_tg__ZTV8S2488C19__A1__7S2488C1[6]),  6,12},
  {&(_tg__ZTV8S2488C108S2488C19__A3__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C108S2488C19__A3__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C108S2488C19__A3__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C108S2488C19__A3__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C19__A3__7S2488C1[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C19__A1__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C19__A1__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C19__A1__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A__8S2488C19__A1__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C23__7S2488C1[10]),  10,14},
  {&(_tg__ZTV8S2488C178S2488C23__A1__7S2488C1[9]),  9,13},
  {&(_tg__ZTV8S2488C198S2488C178S2488C23__A2__7S2488C1[6]),  6,12},
  {&(_tg__ZTV8S2488C108S2488C198S2488C178S2488C23__A5__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C108S2488C198S2488C178S2488C23__A5__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C108S2488C198S2488C178S2488C23__A5__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C108S2488C198S2488C178S2488C23__A5__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C198S2488C178S2488C23__A4__7S2488C1[3]),  3,5},
  {&(_tg__ZTV7S2488C8__8S2488C198S2488C178S2488C23__A2__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C198S2488C178S2488C23__A2__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C198S2488C178S2488C23__A2__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__A__8S2488C198S2488C178S2488C23__A2__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C218S2488C178S2488C23__A1__7S2488C1[7]),  7,9},
  {&(_tg__ZTV7S2488C6__8S2488C218S2488C178S2488C23__A1__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C218S2488C178S2488C23__A1__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C218S2488C178S2488C23__A1__7S2488C1[6]),  6,9},
  {&(_tg__ZTV8S2488C19__8S2488C218S2488C178S2488C23__A1__7S2488C1[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A2__8S2488C218S2488C178S2488C23__A1__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C19__A__8S2488C178S2488C23__A1__7S2488C1[6]),  6,12},
  {&(_tg__ZTV7S2488C8__8S2488C178S2488C23__A1__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C178S2488C23__A1__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C5__8S2488C178S2488C23__A1__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C68S2488C19__A2__8S2488C178S2488C23__A1__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C178S2488C23__A1__7S2488C1[11]),  11,16},
  {&(_tg__ZTV8S2488C13__8S2488C178S2488C23__A1__7S2488C1[3]),  3,4},
  {&(_tg__ZTV8S2488C21__8S2488C178S2488C23__A1__7S2488C1[7]),  7,9},
  {&(_tg__ZTV8S2488C19__A1__8S2488C178S2488C23__A1__7S2488C1[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C178S2488C23__A1__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C10__8S2488C23__7S2488C1[8]),  8,11},
  {&(_tg__ZTV7S2488C6__8S2488C23__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C23__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C23__7S2488C1[6]),  6,9},
  {&(_tg__ZTV8S2488C13__8S2488C23__7S2488C1[3]),  3,4},
  {&(_tg__ZTV8S2488C198S2488C17__8S2488C23__7S2488C1[6]),  6,12},
  {&(_tg__ZTV7S2488C68S2488C198S2488C17__A2__8S2488C23__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C20__8S2488C23__7S2488C1[11]),  11,16},
  {&(_tg__ZTV8S2488C218S2488C17__8S2488C23__7S2488C1[7]),  7,9},
  {&(_tg__ZTV8S2488C19__A1__8S2488C23__7S2488C1[13]),  13,19},
  {&(_tg__ZTV7S2488C68S2488C19__A3__8S2488C23__7S2488C1[3]),  3,5},
  {&(_tg__ZTV8S2488C10__A4__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C6__8S2488C10__A4__7S2488C1[5]),  5,7},
  {&(_tg__ZTV7S2488C8__8S2488C10__A4__7S2488C1[6]),  6,9},
  {&(_tg__ZTV7S2488C5__8S2488C10__A4__7S2488C1[6]),  6,9},
};
extern VTBL_ENTRY _ZTI7S2488C1[];
extern  VTBL_ENTRY _ZTV7S2488C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2488C1[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C23D0Ev,_ZTv0_n28_N8S2488C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N8S2488C23D0Ev,_ZThn3436_N8S2488C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C23D1Ev,_ZTv0_n28_N8S2488C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N8S2488C23D1Ev,_ZThn3436_N8S2488C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C17D0Ev,_ZTv0_n28_N8S2488C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn55664_N8S2488C17D0Ev,_ZThn30292_N8S2488C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C17D1Ev,_ZTv0_n28_N8S2488C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn55664_N8S2488C17D1Ev,_ZThn30292_N8S2488C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C17D0Ev,_ZTv0_n32_N8S2488C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N8S2488C17D0Ev,_ZThn1860_N8S2488C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C17D1Ev,_ZTv0_n32_N8S2488C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N8S2488C17D1Ev,_ZThn1860_N8S2488C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2488C15D0Ev,_ZTv0_n44_N8S2488C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn63280_N8S2488C15D0Ev,_ZThn34484_N8S2488C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2488C15D1Ev,_ZTv0_n44_N8S2488C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn63280_N8S2488C15D1Ev,_ZThn34484_N8S2488C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C15D0Ev,_ZTv0_n28_N8S2488C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn69600_N8S2488C15D0Ev,_ZThn37920_N8S2488C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn60672_N8S2488C15D0Ev,_ZThn33068_N8S2488C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C15D1Ev,_ZTv0_n28_N8S2488C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn69600_N8S2488C15D1Ev,_ZThn37920_N8S2488C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn60672_N8S2488C15D1Ev,_ZThn33068_N8S2488C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C15D0Ev,_ZTv0_n32_N8S2488C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8464_N8S2488C15D0Ev,_ZThn4636_N8S2488C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C15D1Ev,_ZTv0_n32_N8S2488C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8464_N8S2488C15D1Ev,_ZThn4636_N8S2488C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2488C15D0Ev,_ZTv0_n40_N8S2488C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5008_N8S2488C15D0Ev,_ZThn2776_N8S2488C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2488C15D1Ev,_ZTv0_n40_N8S2488C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5008_N8S2488C15D1Ev,_ZThn2776_N8S2488C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C21D0Ev,_ZTv0_n28_N8S2488C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N8S2488C21D0Ev,_ZThn28832_N8S2488C21D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn55984_N8S2488C21D0Ev,_ZThn30464_N8S2488C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C21D1Ev,_ZTv0_n28_N8S2488C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N8S2488C21D1Ev,_ZThn28832_N8S2488C21D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn55984_N8S2488C21D1Ev,_ZThn30464_N8S2488C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C22D0Ev,_ZTv0_n32_N8S2488C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5584_N8S2488C22D0Ev,_ZThn3048_N8S2488C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C22D1Ev,_ZTv0_n32_N8S2488C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5584_N8S2488C22D1Ev,_ZThn3048_N8S2488C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C22D0Ev,_ZTv0_n28_N8S2488C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn57792_N8S2488C22D0Ev,_ZThn31480_N8S2488C22D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn66720_N8S2488C22D0Ev,_ZThn36332_N8S2488C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C22D1Ev,_ZTv0_n28_N8S2488C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn57792_N8S2488C22D1Ev,_ZThn31480_N8S2488C22D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn66720_N8S2488C22D1Ev,_ZThn36332_N8S2488C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2488C22D0Ev,_ZTv0_n44_N8S2488C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn60400_N8S2488C22D0Ev,_ZThn32896_N8S2488C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S2488C22D1Ev,_ZTv0_n44_N8S2488C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn60400_N8S2488C22D1Ev,_ZThn32896_N8S2488C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C16D0Ev,_ZTv0_n28_N8S2488C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn60576_N8S2488C16D0Ev,_ZThn33024_N8S2488C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2488C16D1Ev,_ZTv0_n28_N8S2488C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn60576_N8S2488C16D1Ev,_ZThn33024_N8S2488C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C16D0Ev,_ZTv0_n32_N8S2488C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8368_N8S2488C16D0Ev,_ZThn4592_N8S2488C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S2488C16D1Ev,_ZTv0_n32_N8S2488C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8368_N8S2488C16D1Ev,_ZThn4592_N8S2488C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2488C16D0Ev,_ZTv0_n40_N8S2488C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4912_N8S2488C16D0Ev,_ZThn2732_N8S2488C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2488C16D1Ev,_ZTv0_n40_N8S2488C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4912_N8S2488C16D1Ev,_ZThn2732_N8S2488C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2488C2D0Ev,_ZTv0_n20_N7S2488C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn70816_N7S2488C2D0Ev,_ZThn38588_N7S2488C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2488C2D1Ev,_ZTv0_n20_N7S2488C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn70816_N7S2488C2D1Ev,_ZThn38588_N7S2488C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2488C9D0Ev,_ZTv0_n20_N7S2488C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn70816_N7S2488C9D0Ev,_ZThn38588_N7S2488C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2488C9D1Ev,_ZTv0_n20_N7S2488C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn70816_N7S2488C9D1Ev,_ZThn38588_N7S2488C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D0Ev,_ZTv0_n20_N8S2488C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn70816_N8S2488C10D0Ev,_ZThn38588_N8S2488C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2488C10D1Ev,_ZTv0_n20_N8S2488C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn70816_N8S2488C10D1Ev,_ZThn38588_N8S2488C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S2488C1D0Ev,_ZTv0_n44_N7S2488C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn148576_N7S2488C1D0Ev,_ZThn80944_N7S2488C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S2488C1D1Ev,_ZTv0_n44_N7S2488C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn148576_N7S2488C1D1Ev,_ZThn80944_N7S2488C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2488C1D0Ev,_ZTv0_n28_N7S2488C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn154896_N7S2488C1D0Ev,_ZThn84380_N7S2488C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn145968_N7S2488C1D0Ev,_ZThn79528_N7S2488C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2488C1D1Ev,_ZTv0_n28_N7S2488C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn154896_N7S2488C1D1Ev,_ZThn84380_N7S2488C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn145968_N7S2488C1D1Ev,_ZThn79528_N7S2488C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2488C1D0Ev,_ZTv0_n32_N7S2488C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn93760_N7S2488C1D0Ev,_ZThn51096_N7S2488C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2488C1D1Ev,_ZTv0_n32_N7S2488C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn93760_N7S2488C1D1Ev,_ZThn51096_N7S2488C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S2488C1D0Ev,_ZTv0_n40_N7S2488C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn90304_N7S2488C1D0Ev,_ZThn49236_N7S2488C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S2488C1D1Ev,_ZTv0_n40_N7S2488C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn90304_N7S2488C1D1Ev,_ZThn49236_N7S2488C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S2488C1D0Ev,_ZTv0_n52_N7S2488C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn85296_N7S2488C1D0Ev,_ZThn46460_N7S2488C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S2488C1D1Ev,_ZTv0_n52_N7S2488C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn85296_N7S2488C1D1Ev,_ZThn46460_N7S2488C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2488C1D0Ev,_ZTv0_n20_N7S2488C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn70816_N7S2488C1D0Ev,_ZThn38588_N7S2488C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2488C1D1Ev,_ZTv0_n20_N7S2488C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn70816_N7S2488C1D1Ev,_ZThn38588_N7S2488C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2488C1 = {  "S2488C1", // class name
  bases_S2488C1, 51,
  &(vtc_S2488C1[0]), // expected_vtbl_contents
  &(vtt_S2488C1[0]), // expected_vtt_contents
  ABISELECT(155184,84548), // object size
  NSPAIRA(_ZTI7S2488C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2488C1),254, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2488C1),188, //virtual table table var
  35, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19560C7  : virtual S2489C3 {
  void *s19560c7f0;
  void *s19560c7f1;
  int s19560c7f2;
  int s19560c7f3;
  ::S2489C7 s19560c7f4;
  __tsi64  :0;
  long double s19560c7f6;
  ::S2489C7 s19560c7f7;
  void *s19560c7f8;
  __tsi64 s19560c7f9:3;
  ::S2489C3 s19560c7f10;
  __tsi64 s19560c7f11;
  ::S2489C7 s19560c7f12;
  virtual void  v2(); // _ZN8S19560C72v2Ev
  virtual void  v3(); // _ZN8S19560C72v3Ev
  ~S19560C7(); // tgen
  S19560C7(); // tgen
};
//SIG(-1 S19560C7) C1{ VBC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} v1 v2 Fp Fp Fi Fi FU4{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU4 Fp FL:3 FC2 FL FU4}


void  S19560C7 ::v2(){vfunc_called(this, "_ZN8S19560C72v2Ev");}
void  S19560C7 ::v3(){vfunc_called(this, "_ZN8S19560C72v3Ev");}
S19560C7 ::~S19560C7(){ note_dtor("S19560C7", this);} // tgen
S19560C7 ::S19560C7(){ note_ctor("S19560C7", this);} // tgen

static void Test_S19560C7()
{
  extern Class_Descriptor cd_S19560C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,70)];
    init_test(&cd_S19560C7, buf);
    S19560C7 *dp, &lv = *(dp=new (buf) S19560C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,276), "sizeof(S19560C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19560C7)");
    check_base_class_offset(lv, (S2489C3*), ABISELECT(384,204), "S19560C7");
    check_field_offset(lv, s19560c7f0, ABISELECT(8,4), "S19560C7.s19560c7f0");
    check_field_offset(lv, s19560c7f1, ABISELECT(16,8), "S19560C7.s19560c7f1");
    check_field_offset(lv, s19560c7f2, ABISELECT(24,12), "S19560C7.s19560c7f2");
    check_field_offset(lv, s19560c7f3, ABISELECT(28,16), "S19560C7.s19560c7f3");
    check_field_offset(lv, s19560c7f4, ABISELECT(32,20), "S19560C7.s19560c7f4");
    check_field_offset(lv, s19560c7f6, ABISELECT(96,48), "S19560C7.s19560c7f6");
    check_field_offset(lv, s19560c7f7, ABISELECT(112,60), "S19560C7.s19560c7f7");
    check_field_offset(lv, s19560c7f8, ABISELECT(168,88), "S19560C7.s19560c7f8");
    set_bf_and_test(lv, s19560c7f9, ABISELECT(176,92), 0, 3, 1, "S19560C7");
    set_bf_and_test(lv, s19560c7f9, ABISELECT(176,92), 0, 3, hide_sll(1LL<<2), "S19560C7");
    check_field_offset(lv, s19560c7f10, ABISELECT(192,96), "S19560C7.s19560c7f10");
    check_field_offset(lv, s19560c7f11, ABISELECT(320,168), "S19560C7.s19560c7f11");
    check_field_offset(lv, s19560c7f12, ABISELECT(328,176), "S19560C7.s19560c7f12");
    test_class_info(&lv, &cd_S19560C7);
    dp->~S19560C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19560C7(Test_S19560C7, "S19560C7", ABISELECT(512,276));

#else // __cplusplus

extern void _ZN8S19560C7C1Ev();
extern void _ZN8S19560C7D1Ev();
Name_Map name_map_S19560C7[] = {
  NSPAIR(_ZN8S19560C7C1Ev),
  NSPAIR(_ZN8S19560C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
static Base_Class bases_S19560C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(384,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19560C7[];
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY vtc_S19560C7[] = {
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern VTBL_ENTRY _ZTV8S19560C7[];
static  VTT_ENTRY vtt_S19560C7[] = {
  {&(_ZTV8S19560C7[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
Class_Descriptor cd_S19560C7 = {  "S19560C7", // class name
  bases_S19560C7, 1,
  &(vtc_S19560C7[0]), // expected_vtbl_contents
  &(vtt_S19560C7[0]), // expected_vtt_contents
  ABISELECT(512,276), // object size
  NSPAIRA(_ZTI8S19560C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19560C7),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19560C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19560C4  : virtual S2489C3 , virtual S19560C7 {
  __tsi64 s19560c4f0;
  __tsi64 s19560c4f1;
  __tsi64 s19560c4f2;
  __tsi64 s19560c4f3;
  int s19560c4f4;
  ::S2489C7 s19560c4f5;
  char s19560c4f6[10];
  int s19560c4f7;
  virtual  ~S19560C4(); // _ZN8S19560C4D2Ev
  virtual void  v4(); // _ZN8S19560C42v4Ev
  S19560C4(); // tgen
};
//SIG(-1 S19560C4) C1{ VBC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 FL FU5} vd v1 FL FL FL FL Fi FU5 Fc[10] Fi}


 S19560C4 ::~S19560C4(){ note_dtor("S19560C4", this);}
void  S19560C4 ::v4(){vfunc_called(this, "_ZN8S19560C42v4Ev");}
S19560C4 ::S19560C4(){ note_ctor("S19560C4", this);} // tgen

static void Test_S19560C4()
{
  extern Class_Descriptor cd_S19560C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,91)];
    init_test(&cd_S19560C4, buf);
    S19560C4 *dp, &lv = *(dp=new (buf) S19560C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,360), "sizeof(S19560C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19560C4)");
    check_base_class_offset(lv, (S2489C3*), ABISELECT(128,84), "S19560C4");
    check_base_class_offset(lv, (S2489C3*)(S19560C7*), ABISELECT(128,84), "S19560C4");
    check_base_class_offset(lv, (S19560C7*), ABISELECT(256,156), "S19560C4");
    check_field_offset(lv, s19560c4f0, ABISELECT(8,4), "S19560C4.s19560c4f0");
    check_field_offset(lv, s19560c4f1, ABISELECT(16,12), "S19560C4.s19560c4f1");
    check_field_offset(lv, s19560c4f2, ABISELECT(24,20), "S19560C4.s19560c4f2");
    check_field_offset(lv, s19560c4f3, ABISELECT(32,28), "S19560C4.s19560c4f3");
    check_field_offset(lv, s19560c4f4, ABISELECT(40,36), "S19560C4.s19560c4f4");
    check_field_offset(lv, s19560c4f5, ABISELECT(48,40), "S19560C4.s19560c4f5");
    check_field_offset(lv, s19560c4f6, ABISELECT(104,68), "S19560C4.s19560c4f6");
    check_field_offset(lv, s19560c4f7, ABISELECT(116,80), "S19560C4.s19560c4f7");
    test_class_info(&lv, &cd_S19560C4);
    dp->~S19560C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19560C4(Test_S19560C4, "S19560C4", ABISELECT(640,360));

#else // __cplusplus

extern void _ZN8S19560C4C1Ev();
extern void _ZN8S19560C4D2Ev();
Name_Map name_map_S19560C4[] = {
  NSPAIR(_ZN8S19560C4C1Ev),
  NSPAIR(_ZN8S19560C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
static Base_Class bases_S19560C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(128,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19560C7,    ABISELECT(256,156), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19560C4[];
extern void _ZN8S19560C4D1Ev();
extern void _ZN8S19560C4D0Ev();
extern void _ZN8S19560C42v4Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY vtc_S19560C4[] = {
  ABISELECT(256,156),
  ABISELECT(128,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C4[0]),
  (VTBL_ENTRY)&_ZN8S19560C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-256,-156),
  (VTBL_ENTRY)&(_ZTI8S19560C4[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern VTBL_ENTRY _ZTV8S19560C4[];
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C4[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
static  VTT_ENTRY vtt_S19560C4[] = {
  {&(_ZTV8S19560C4[4]),  4,14},
  {&(_ZTV8S19560C4[12]),  12,14},
  {&(_tg__ZTV8S19560C7__8S19560C4[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19560C4[];
extern  VTBL_ENTRY _ZTV8S19560C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C4[];
Class_Descriptor cd_S19560C4 = {  "S19560C4", // class name
  bases_S19560C4, 2,
  &(vtc_S19560C4[0]), // expected_vtbl_contents
  &(vtt_S19560C4[0]), // expected_vtt_contents
  ABISELECT(640,360), // object size
  NSPAIRA(_ZTI8S19560C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19560C4),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19560C4),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19560C10  : S2489C3 , S19560C7 {
  void *s19560c10f0;
  long double s19560c10f1;
  ::S2489C3 s19560c10f2[7];
  long double s19560c10f3;
  ::S2489C4 s19560c10f4;
  short s19560c10f5;
  __tsi64 s19560c10f6;
  __tsi64 s19560c10f7;
  virtual void  v5(); // _ZN9S19560C102v5Ev
  ~S19560C10(); // tgen
  S19560C10(); // tgen
};
//SIG(-1 S19560C10) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 FL FU5} v1 Fp FD FC2[7] FD FU3 Fs FL FL}


void  S19560C10 ::v5(){vfunc_called(this, "_ZN9S19560C102v5Ev");}
S19560C10 ::~S19560C10(){ note_dtor("S19560C10", this);} // tgen
S19560C10 ::S19560C10(){ note_ctor("S19560C10", this);} // tgen

static void Test_S19560C10()
{
  extern Class_Descriptor cd_S19560C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(107,236)];
    init_test(&cd_S19560C10, buf);
    S19560C10 *dp, &lv = *(dp=new (buf) S19560C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1696,940), "sizeof(S19560C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19560C10)");
    /*is_ambiguous_... S19560C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(384,204), "S19560C10");
    check_base_class_offset(lv, (S2489C3*)(S19560C7*), ABISELECT(1568,868), "S19560C10");
    check_base_class_offset(lv, (S19560C7*), 0, "S19560C10");
    check_field_offset(lv, s19560c10f0, ABISELECT(512,276), "S19560C10.s19560c10f0");
    check_field_offset(lv, s19560c10f1, ABISELECT(528,280), "S19560C10.s19560c10f1");
    check_field_offset(lv, s19560c10f2, ABISELECT(544,292), "S19560C10.s19560c10f2");
    check_field_offset(lv, s19560c10f3, ABISELECT(1440,796), "S19560C10.s19560c10f3");
    check_field_offset(lv, s19560c10f4, ABISELECT(1456,808), "S19560C10.s19560c10f4");
    check_field_offset(lv, s19560c10f5, ABISELECT(1536,848), "S19560C10.s19560c10f5");
    check_field_offset(lv, s19560c10f6, ABISELECT(1544,852), "S19560C10.s19560c10f6");
    check_field_offset(lv, s19560c10f7, ABISELECT(1552,860), "S19560C10.s19560c10f7");
    test_class_info(&lv, &cd_S19560C10);
    dp->~S19560C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19560C10(Test_S19560C10, "S19560C10", ABISELECT(1696,940));

#else // __cplusplus

extern void _ZN9S19560C10C1Ev();
extern void _ZN9S19560C10D1Ev();
Name_Map name_map_S19560C10[] = {
  NSPAIR(_ZN9S19560C10C1Ev),
  NSPAIR(_ZN9S19560C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
static Base_Class bases_S19560C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(384,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(1568,868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19560C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19560C10[];
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY vtc_S19560C10[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C10[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern VTBL_ENTRY _ZTV9S19560C10[];
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__9S19560C10[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
static  VTT_ENTRY vtt_S19560C10[] = {
  {&(_ZTV9S19560C10[3]),  3,6},
  {&(_tg__ZTV8S19560C7__9S19560C10[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19560C10[];
extern  VTBL_ENTRY _ZTV9S19560C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C10[];
Class_Descriptor cd_S19560C10 = {  "S19560C10", // class name
  bases_S19560C10, 3,
  &(vtc_S19560C10[0]), // expected_vtbl_contents
  &(vtt_S19560C10[0]), // expected_vtt_contents
  ABISELECT(1696,940), // object size
  NSPAIRA(_ZTI9S19560C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19560C10),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19560C10),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19560C9  : S2489C3 , virtual S19560C7 , virtual S19560C4 , virtual S19560C10 {
  char s19560c9f0;
  int s19560c9f1[7];
  long s19560c9f2[5];
  __tsi64 s19560c9f3;
  __tsi64 s19560c9f4;
  __tsi64 s19560c9f5;
  ::S2489C11 s19560c9f6;
  virtual  ~S19560C9(); // _ZN8S19560C9D2Ev
  virtual void  v6(); // _ZN8S19560C92v6Ev
  S19560C9(); // tgen
};
//SIG(-1 S19560C9) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 FL FU5} VBC6{ VBC2 VBC4 vd v4 FL FL FL FL Fi FU5 Fc[10] Fi} VBC7{ BC2 BC4 v5 Fp FD FC2[7] FD FU3 Fs FL FL} vd v1 Fc Fi[7] Fl[5] FL FL FL FU8{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}}


 S19560C9 ::~S19560C9(){ note_dtor("S19560C9", this);}
void  S19560C9 ::v6(){vfunc_called(this, "_ZN8S19560C92v6Ev");}
S19560C9 ::S19560C9(){ note_ctor("S19560C9", this);} // tgen

static void Test_S19560C9()
{
  extern Class_Descriptor cd_S19560C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(157,356)];
    init_test(&cd_S19560C9, buf);
    S19560C9 *dp, &lv = *(dp=new (buf) S19560C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2496,1420), "sizeof(S19560C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19560C9)");
    /*is_ambiguous_... S19560C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(16,4), "S19560C9");
    /*is_ambiguous_... S19560C9::S19560C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C7*), ABISELECT(672,396), "S19560C9");
    check_base_class_offset(lv, (S2489C3*)(S19560C4*), ABISELECT(672,396), "S19560C9");
    check_base_class_offset(lv, (S2489C3*)(S19560C7*)(S19560C10*), ABISELECT(672,396), "S19560C9");
    /*is_ambiguous_... S19560C9::S19560C7 */ AMB_check_base_class_offset(lv, (S19560C7*), ABISELECT(288,192), "S19560C9");
    check_base_class_offset(lv, (S19560C7*)(S19560C4*), ABISELECT(288,192), "S19560C9");
    check_base_class_offset(lv, (S19560C4*), ABISELECT(800,468), "S19560C9");
    /*is_ambiguous_... S19560C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C10*), ABISELECT(1312,756), "S19560C9");
    check_base_class_offset(lv, (S19560C7*)(S19560C10*), ABISELECT(928,552), "S19560C9");
    check_base_class_offset(lv, (S19560C10*), ABISELECT(928,552), "S19560C9");
    check_field_offset(lv, s19560c9f0, ABISELECT(144,76), "S19560C9.s19560c9f0");
    check_field_offset(lv, s19560c9f1, ABISELECT(148,80), "S19560C9.s19560c9f1");
    check_field_offset(lv, s19560c9f2, ABISELECT(176,108), "S19560C9.s19560c9f2");
    check_field_offset(lv, s19560c9f3, ABISELECT(216,128), "S19560C9.s19560c9f3");
    check_field_offset(lv, s19560c9f4, ABISELECT(224,136), "S19560C9.s19560c9f4");
    check_field_offset(lv, s19560c9f5, ABISELECT(232,144), "S19560C9.s19560c9f5");
    check_field_offset(lv, s19560c9f6, ABISELECT(240,152), "S19560C9.s19560c9f6");
    test_class_info(&lv, &cd_S19560C9);
    dp->~S19560C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19560C9(Test_S19560C9, "S19560C9", ABISELECT(2496,1420));

#else // __cplusplus

extern void _ZN8S19560C9C1Ev();
extern void _ZN8S19560C9D2Ev();
Name_Map name_map_S19560C9[] = {
  NSPAIR(_ZN8S19560C9C1Ev),
  NSPAIR(_ZN8S19560C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C4;
extern VTBL_ENTRY _ZTI8S19560C4[];
extern  VTBL_ENTRY _ZTV8S19560C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C4[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C10;
extern VTBL_ENTRY _ZTI9S19560C10[];
extern  VTBL_ENTRY _ZTV9S19560C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C10[];
static Base_Class bases_S19560C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(672,396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19560C7,    ABISELECT(288,192), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19560C4,    ABISELECT(800,468), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(1312,756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19560C7,    ABISELECT(928,552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19560C10,    ABISELECT(928,552), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19560C9[];
extern void _ZN8S19560C9D1Ev();
extern void _ZN8S19560C9D0Ev();
extern void _ZN8S19560C92v6Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev)();
extern void ABISELECT(_ZThn800_N8S19560C9D1Ev,_ZThn468_N8S19560C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev)();
extern void ABISELECT(_ZThn800_N8S19560C9D0Ev,_ZThn468_N8S19560C9D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY vtc_S19560C9[] = {
  ABISELECT(928,552),
  ABISELECT(800,468),
  ABISELECT(672,396),
  ABISELECT(288,192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  0,
  ABISELECT(-800,-468),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-800,-468),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-928,-552),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S19560C9[];
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C9[] = {
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C4D1Ev();
extern void _ZN8S19560C4D0Ev();
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__8S19560C9[] = {
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C4[0]),
  (VTBL_ENTRY)&_ZN8S19560C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C4__8S19560C9[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(512,276),
  (VTBL_ENTRY)&(_ZTI8S19560C4[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__8S19560C9[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C10[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C79S19560C10__A1__8S19560C9[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
static  VTT_ENTRY vtt_S19560C9[] = {
  {&(_ZTV8S19560C9[6]),  6,34},
  {&(_ZTV8S19560C9[14]),  14,34},
  {&(_ZTV8S19560C9[22]),  22,34},
  {&(_ZTV8S19560C9[31]),  31,34},
  {&(_tg__ZTV8S19560C7__8S19560C9[3]),  3,5},
  {&(_tg__ZTV8S19560C4__8S19560C9[4]),  4,7},
  {&(_tg__ZTV8S19560C7__8S19560C4__8S19560C9[5]),  5,7},
  {&(_tg__ZTV9S19560C10__8S19560C9[3]),  3,6},
  {&(_tg__ZTV8S19560C79S19560C10__A1__8S19560C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19560C9[];
extern  VTBL_ENTRY _ZTV8S19560C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C9[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S19560C9D0Ev,_ZThn468_N8S19560C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S19560C9D1Ev,_ZThn468_N8S19560C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19560C9 = {  "S19560C9", // class name
  bases_S19560C9, 7,
  &(vtc_S19560C9[0]), // expected_vtbl_contents
  &(vtt_S19560C9[0]), // expected_vtt_contents
  ABISELECT(2496,1420), // object size
  NSPAIRA(_ZTI8S19560C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19560C9),34, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19560C9),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19560C3  : virtual S19560C4 , S19560C9 , S2489C3 , S19560C7 {
  ::S2489C7 s19560c3f0;
  int s19560c3f1;
  long s19560c3f2;
  char s19560c3f3;
  void *s19560c3f4;
  ::S19560C10 s19560c3f5;
  short s19560c3f6;
  virtual  ~S19560C3(); // _ZN8S19560C3D2Ev
  virtual void  v7(); // _ZN8S19560C32v7Ev
  virtual void  v8(); // _ZN8S19560C32v8Ev
  virtual void  v9(); // _ZN8S19560C32v9Ev
  S19560C3(); // tgen
};
//SIG(-1 S19560C3) C1{ VBC2{ VBC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC5{ VBC3 v4 v5 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 FL FU6} vd v6 FL FL FL FL Fi FU6 Fc[10] Fi} BC7{ BC3 VBC5 VBC2 VBC8{ BC3 BC5 v7 Fp FD FC3[7] FD FU4 Fs FL FL} vd v8 Fc Fi[7] Fl[5] FL FL FL FU9{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} BC3 BC5 vd v1 v2 v3 FU6 Fi Fl Fc Fp FC8 Fs}


 S19560C3 ::~S19560C3(){ note_dtor("S19560C3", this);}
void  S19560C3 ::v7(){vfunc_called(this, "_ZN8S19560C32v7Ev");}
void  S19560C3 ::v8(){vfunc_called(this, "_ZN8S19560C32v8Ev");}
void  S19560C3 ::v9(){vfunc_called(this, "_ZN8S19560C32v9Ev");}
S19560C3 ::S19560C3(){ note_ctor("S19560C3", this);} // tgen

static void Test_S19560C3()
{
  extern Class_Descriptor cd_S19560C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(301,672)];
    init_test(&cd_S19560C3, buf);
    S19560C3 *dp, &lv = *(dp=new (buf) S19560C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4800,2684), "sizeof(S19560C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19560C3)");
    check_base_class_offset(lv, (S2489C3*)(S19560C4*), ABISELECT(2720,1540), "S19560C3");
    /*is_ambiguous_... S19560C3::S19560C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C7*), ABISELECT(2720,1540), "S19560C3");
    check_base_class_offset(lv, (S2489C3*)(S19560C7*)(S19560C10*), ABISELECT(2720,1540), "S19560C3");
    /*is_ambiguous_... S19560C3::S19560C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C7*), ABISELECT(2720,1540), "S19560C3");
    check_base_class_offset(lv, (S19560C7*)(S19560C4*), ABISELECT(2848,1612), "S19560C3");
    /*is_ambiguous_... S19560C9::S19560C7 */ AMB_check_base_class_offset(lv, (S19560C7*)(S19560C9*), ABISELECT(2848,1612), "S19560C3");
    check_base_class_offset(lv, (S19560C4*), ABISELECT(2600,1456), "S19560C3");
    check_base_class_offset(lv, (S19560C4*)(S19560C9*), ABISELECT(2600,1456), "S19560C3");
    /*is_ambiguous_... S19560C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C9*), ABISELECT(16,4), "S19560C3");
    /*is_ambiguous_... S19560C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C10*), ABISELECT(3616,2020), "S19560C3");
    check_base_class_offset(lv, (S19560C7*)(S19560C10*), ABISELECT(3232,1816), "S19560C3");
    check_base_class_offset(lv, (S19560C10*)(S19560C9*), ABISELECT(3232,1816), "S19560C3");
    check_base_class_offset(lv, (S19560C9*), 0, "S19560C3");
    /*is_ambiguous_... S19560C3::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(288,192), "S19560C3");
    /*is_ambiguous_... S19560C3::S19560C7 */ AMB_check_base_class_offset(lv, (S19560C7*), ABISELECT(416,264), "S19560C3");
    check_field_offset(lv, s19560c3f0, ABISELECT(800,468), "S19560C3.s19560c3f0");
    check_field_offset(lv, s19560c3f1, ABISELECT(856,496), "S19560C3.s19560c3f1");
    check_field_offset(lv, s19560c3f2, ABISELECT(864,500), "S19560C3.s19560c3f2");
    check_field_offset(lv, s19560c3f3, ABISELECT(872,504), "S19560C3.s19560c3f3");
    check_field_offset(lv, s19560c3f4, ABISELECT(880,508), "S19560C3.s19560c3f4");
    check_field_offset(lv, s19560c3f5, ABISELECT(896,512), "S19560C3.s19560c3f5");
    check_field_offset(lv, s19560c3f6, ABISELECT(2592,1452), "S19560C3.s19560c3f6");
    test_class_info(&lv, &cd_S19560C3);
    dp->~S19560C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19560C3(Test_S19560C3, "S19560C3", ABISELECT(4800,2684));

#else // __cplusplus

extern void _ZN8S19560C3C1Ev();
extern void _ZN8S19560C3D2Ev();
Name_Map name_map_S19560C3[] = {
  NSPAIR(_ZN8S19560C3C1Ev),
  NSPAIR(_ZN8S19560C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C4;
extern VTBL_ENTRY _ZTI8S19560C4[];
extern  VTBL_ENTRY _ZTV8S19560C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C4[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C10;
extern VTBL_ENTRY _ZTI9S19560C10[];
extern  VTBL_ENTRY _ZTV9S19560C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C10[];
extern Class_Descriptor cd_S19560C9;
extern VTBL_ENTRY _ZTI8S19560C9[];
extern  VTBL_ENTRY _ZTV8S19560C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C9[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
static Base_Class bases_S19560C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(2720,1540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19560C7,    ABISELECT(2848,1612), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19560C4,    ABISELECT(2600,1456), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(3616,2020), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19560C7,    ABISELECT(3232,1816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19560C10,    ABISELECT(3232,1816), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19560C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19560C7,    ABISELECT(416,264), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19560C3[];
extern void _ZN8S19560C3D1Ev();
extern void _ZN8S19560C3D0Ev();
extern void _ZN8S19560C92v6Ev();
extern void _ZN8S19560C32v7Ev();
extern void _ZN8S19560C32v8Ev();
extern void _ZN8S19560C32v9Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19560C3D1Ev,_ZTv0_n20_N8S19560C3D1Ev)();
extern void ABISELECT(_ZThn2600_N8S19560C3D1Ev,_ZThn1456_N8S19560C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19560C3D0Ev,_ZTv0_n20_N8S19560C3D0Ev)();
extern void ABISELECT(_ZThn2600_N8S19560C3D0Ev,_ZThn1456_N8S19560C3D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY vtc_S19560C3[] = {
  ABISELECT(3232,1816),
  ABISELECT(2600,1456),
  ABISELECT(2720,1540),
  ABISELECT(2848,1612),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C3[0]),
  (VTBL_ENTRY)&_ZN8S19560C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN8S19560C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19560C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19560C32v9Ev,
  ABISELECT(2304,1276),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S19560C3[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  0,
  ABISELECT(-2600,-1456),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-2600,-1456),
  (VTBL_ENTRY)&(_ZTI8S19560C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C3D1Ev,_ZTv0_n20_N8S19560C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C3D0Ev,_ZTv0_n20_N8S19560C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2848,-1612),
  (VTBL_ENTRY)&(_ZTI8S19560C3[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-3232,-1816),
  (VTBL_ENTRY)&(_ZTI8S19560C3[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S19560C3[];
extern void _ZN8S19560C9D1Ev();
extern void _ZN8S19560C9D0Ev();
extern void _ZN8S19560C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C9__8S19560C3[] = {
  ABISELECT(3232,1816),
  ABISELECT(2600,1456),
  ABISELECT(2720,1540),
  ABISELECT(2848,1612),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C9__8S19560C3[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2848,-1612),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev)();
extern void ABISELECT(_ZThn2600_N8S19560C9D1Ev,_ZThn1456_N8S19560C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev)();
extern void ABISELECT(_ZThn2600_N8S19560C9D0Ev,_ZThn1456_N8S19560C9D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__8S19560C9__8S19560C3[] = {
  0,
  ABISELECT(-2600,-1456),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-2600,-1456),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__8S19560C9__8S19560C3[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-3232,-1816),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__A__8S19560C3[] = {
  ABISELECT(2304,1276),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C4D1Ev();
extern void _ZN8S19560C4D0Ev();
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__8S19560C3[] = {
  ABISELECT(248,156),
  ABISELECT(120,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C4[0]),
  (VTBL_ENTRY)&_ZN8S19560C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C4__8S19560C3[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-248,-156),
  (VTBL_ENTRY)&(_ZTI8S19560C4[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C3[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__8S19560C3[] = {
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C10[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C79S19560C10__A1__8S19560C3[] = {
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
static  VTT_ENTRY vtt_S19560C3[] = {
  {&(_ZTV8S19560C3[6]),  6,42},
  {&(_tg__ZTV8S19560C9__8S19560C3[6]),  6,9},
  {&(_tg__ZTV8S19560C7__8S19560C9__8S19560C3[5]),  5,7},
  {&(_tg__ZTV8S19560C4__8S19560C9__8S19560C3[6]),  6,9},
  {&(_tg__ZTV9S19560C10__8S19560C9__8S19560C3[6]),  6,9},
  {&(_tg__ZTV8S19560C7__A__8S19560C3[3]),  3,5},
  {&(_ZTV8S19560C3[23]),  23,42},
  {&(_ZTV8S19560C3[31]),  31,42},
  {&(_ZTV8S19560C3[39]),  39,42},
  {&(_ZTV8S19560C3[15]),  15,42},
  {&(_tg__ZTV8S19560C4__8S19560C3[4]),  4,7},
  {&(_tg__ZTV8S19560C7__8S19560C4__8S19560C3[5]),  5,7},
  {&(_tg__ZTV8S19560C7__8S19560C3[3]),  3,5},
  {&(_tg__ZTV9S19560C10__8S19560C3[3]),  3,6},
  {&(_tg__ZTV8S19560C79S19560C10__A1__8S19560C3[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19560C3[];
extern  VTBL_ENTRY _ZTV8S19560C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C3[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N8S19560C9D0Ev,_ZThn1456_N8S19560C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N8S19560C9D1Ev,_ZThn1456_N8S19560C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C3D0Ev,_ZTv0_n20_N8S19560C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N8S19560C3D0Ev,_ZThn1456_N8S19560C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C3D1Ev,_ZTv0_n20_N8S19560C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N8S19560C3D1Ev,_ZThn1456_N8S19560C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19560C3 = {  "S19560C3", // class name
  bases_S19560C3, 10,
  &(vtc_S19560C3[0]), // expected_vtbl_contents
  &(vtt_S19560C3[0]), // expected_vtt_contents
  ABISELECT(4800,2684), // object size
  NSPAIRA(_ZTI8S19560C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19560C3),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19560C3),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19560C13  : S19560C9 {
  void *s19560c13f0;
  void *s19560c13f1;
  void *s19560c13f2;
  int s19560c13f3;
  ::S2489C12_nt s19560c13f4;
  __tsi64 s19560c13f5;
  __tsi64 s19560c13f6;
  virtual  ~S19560C13(); // _ZN9S19560C13D2Ev
  virtual void  v10(); // _ZN9S19560C133v10Ev
  virtual void  v11(); // _ZN9S19560C133v11Ev
  S19560C13(); // tgen
};
//SIG(-1 S19560C13) C1{ BC2{ BC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC5{ VBC3 v3 v4 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 FL FU6} VBC7{ VBC3 VBC5 vd v5 FL FL FL FL Fi FU6 Fc[10] Fi} VBC8{ BC3 BC5 v6 Fp FD FC3[7] FD FU4 Fs FL FL} vd v7 Fc Fi[7] Fl[5] FL FL FL FU9{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} vd v1 v2 Fp Fp Fp Fi FC10{} FL FL}


 S19560C13 ::~S19560C13(){ note_dtor("S19560C13", this);}
void  S19560C13 ::v10(){vfunc_called(this, "_ZN9S19560C133v10Ev");}
void  S19560C13 ::v11(){vfunc_called(this, "_ZN9S19560C133v11Ev");}
S19560C13 ::S19560C13(){ note_ctor("S19560C13", this);} // tgen

static void Test_S19560C13()
{
  extern Class_Descriptor cd_S19560C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(160,365)];
    init_test(&cd_S19560C13, buf);
    S19560C13 *dp, &lv = *(dp=new (buf) S19560C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2544,1456), "sizeof(S19560C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19560C13)");
    /*is_ambiguous_... S19560C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C9*), ABISELECT(16,4), "S19560C13");
    /*is_ambiguous_... S19560C13::S19560C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C7*), ABISELECT(720,432), "S19560C13");
    check_base_class_offset(lv, (S2489C3*)(S19560C4*), ABISELECT(720,432), "S19560C13");
    check_base_class_offset(lv, (S2489C3*)(S19560C7*)(S19560C10*), ABISELECT(720,432), "S19560C13");
    /*is_ambiguous_... S19560C9::S19560C7 */ AMB_check_base_class_offset(lv, (S19560C7*)(S19560C9*), ABISELECT(336,228), "S19560C13");
    check_base_class_offset(lv, (S19560C7*)(S19560C4*), ABISELECT(336,228), "S19560C13");
    check_base_class_offset(lv, (S19560C4*)(S19560C9*), ABISELECT(848,504), "S19560C13");
    /*is_ambiguous_... S19560C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C10*), ABISELECT(1360,792), "S19560C13");
    check_base_class_offset(lv, (S19560C7*)(S19560C10*), ABISELECT(976,588), "S19560C13");
    check_base_class_offset(lv, (S19560C10*)(S19560C9*), ABISELECT(976,588), "S19560C13");
    check_base_class_offset(lv, (S19560C9*), 0, "S19560C13");
    check_field_offset(lv, s19560c13f0, ABISELECT(280,192), "S19560C13.s19560c13f0");
    check_field_offset(lv, s19560c13f1, ABISELECT(288,196), "S19560C13.s19560c13f1");
    check_field_offset(lv, s19560c13f2, ABISELECT(296,200), "S19560C13.s19560c13f2");
    check_field_offset(lv, s19560c13f3, ABISELECT(304,204), "S19560C13.s19560c13f3");
    check_field_offset(lv, s19560c13f4, ABISELECT(308,208), "S19560C13.s19560c13f4");
    check_field_offset(lv, s19560c13f5, ABISELECT(312,212), "S19560C13.s19560c13f5");
    check_field_offset(lv, s19560c13f6, ABISELECT(320,220), "S19560C13.s19560c13f6");
    test_class_info(&lv, &cd_S19560C13);
    dp->~S19560C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19560C13(Test_S19560C13, "S19560C13", ABISELECT(2544,1456));

#else // __cplusplus

extern void _ZN9S19560C13C1Ev();
extern void _ZN9S19560C13D2Ev();
Name_Map name_map_S19560C13[] = {
  NSPAIR(_ZN9S19560C13C1Ev),
  NSPAIR(_ZN9S19560C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C4;
extern VTBL_ENTRY _ZTI8S19560C4[];
extern  VTBL_ENTRY _ZTV8S19560C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C4[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C10;
extern VTBL_ENTRY _ZTI9S19560C10[];
extern  VTBL_ENTRY _ZTV9S19560C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C10[];
extern Class_Descriptor cd_S19560C9;
extern VTBL_ENTRY _ZTI8S19560C9[];
extern  VTBL_ENTRY _ZTV8S19560C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C9[];
static Base_Class bases_S19560C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(720,432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19560C7,    ABISELECT(336,228), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19560C4,    ABISELECT(848,504), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(1360,792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19560C7,    ABISELECT(976,588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19560C10,    ABISELECT(976,588), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19560C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19560C13[];
extern void _ZN9S19560C13D1Ev();
extern void _ZN9S19560C13D0Ev();
extern void _ZN8S19560C92v6Ev();
extern void _ZN9S19560C133v10Ev();
extern void _ZN9S19560C133v11Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19560C13D1Ev,_ZTv0_n20_N9S19560C13D1Ev)();
extern void ABISELECT(_ZThn848_N9S19560C13D1Ev,_ZThn504_N9S19560C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19560C13D0Ev,_ZTv0_n20_N9S19560C13D0Ev)();
extern void ABISELECT(_ZThn848_N9S19560C13D0Ev,_ZThn504_N9S19560C13D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY vtc_S19560C13[] = {
  ABISELECT(976,588),
  ABISELECT(848,504),
  ABISELECT(720,432),
  ABISELECT(336,228),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&_ZN9S19560C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19560C13D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v11Ev,
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-336,-228),
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  0,
  ABISELECT(-848,-504),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-848,-504),
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C13D1Ev,_ZTv0_n20_N9S19560C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C13D0Ev,_ZTv0_n20_N9S19560C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-976,-588),
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern VTBL_ENTRY _ZTV9S19560C13[];
extern void _ZN8S19560C9D1Ev();
extern void _ZN8S19560C9D0Ev();
extern void _ZN8S19560C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C9__9S19560C13[] = {
  ABISELECT(976,588),
  ABISELECT(848,504),
  ABISELECT(720,432),
  ABISELECT(336,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C9__9S19560C13[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-336,-228),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev)();
extern void ABISELECT(_ZThn848_N8S19560C9D1Ev,_ZThn504_N8S19560C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev)();
extern void ABISELECT(_ZThn848_N8S19560C9D0Ev,_ZThn504_N8S19560C9D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__8S19560C9__9S19560C13[] = {
  0,
  ABISELECT(-848,-504),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-848,-504),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__8S19560C9__9S19560C13[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-976,-588),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__9S19560C13[] = {
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C4D1Ev();
extern void _ZN8S19560C4D0Ev();
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__9S19560C13[] = {
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C4[0]),
  (VTBL_ENTRY)&_ZN8S19560C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C4__9S19560C13[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(512,276),
  (VTBL_ENTRY)&(_ZTI8S19560C4[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__9S19560C13[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C10[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C79S19560C10__A1__9S19560C13[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
static  VTT_ENTRY vtt_S19560C13[] = {
  {&(_ZTV9S19560C13[6]),  6,36},
  {&(_tg__ZTV8S19560C9__9S19560C13[6]),  6,9},
  {&(_tg__ZTV8S19560C7__8S19560C9__9S19560C13[5]),  5,7},
  {&(_tg__ZTV8S19560C4__8S19560C9__9S19560C13[6]),  6,9},
  {&(_tg__ZTV9S19560C10__8S19560C9__9S19560C13[6]),  6,9},
  {&(_ZTV9S19560C13[16]),  16,36},
  {&(_ZTV9S19560C13[24]),  24,36},
  {&(_ZTV9S19560C13[33]),  33,36},
  {&(_tg__ZTV8S19560C7__9S19560C13[3]),  3,5},
  {&(_tg__ZTV8S19560C4__9S19560C13[4]),  4,7},
  {&(_tg__ZTV8S19560C7__8S19560C4__9S19560C13[5]),  5,7},
  {&(_tg__ZTV9S19560C10__9S19560C13[3]),  3,6},
  {&(_tg__ZTV8S19560C79S19560C10__A1__9S19560C13[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19560C13[];
extern  VTBL_ENTRY _ZTV9S19560C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C13[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19560C9D0Ev,_ZThn504_N8S19560C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19560C9D1Ev,_ZThn504_N8S19560C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C13D0Ev,_ZTv0_n20_N9S19560C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N9S19560C13D0Ev,_ZThn504_N9S19560C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C13D1Ev,_ZTv0_n20_N9S19560C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N9S19560C13D1Ev,_ZThn504_N9S19560C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19560C13 = {  "S19560C13", // class name
  bases_S19560C13, 8,
  &(vtc_S19560C13[0]), // expected_vtbl_contents
  &(vtt_S19560C13[0]), // expected_vtt_contents
  ABISELECT(2544,1456), // object size
  NSPAIRA(_ZTI9S19560C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19560C13),36, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19560C13),13, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19560C12  : S2489C3 , virtual S19560C10 , virtual S19560C4 , S19560C13 {
  long double s19560c12f0;
  virtual  ~S19560C12(); // _ZN9S19560C12D2Ev
  S19560C12(); // tgen
};
//SIG(-1 S19560C12) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ BC2 BC5{ VBC2 v1 v2 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC2 FL FU6} v3 Fp FD FC2[7] FD FU3 Fs FL FL} VBC7{ VBC2 VBC5 vd v4 FL FL FL FL Fi FU6 Fc[10] Fi} BC8{ BC9{ BC2 VBC5 VBC7 VBC4 vd v5 Fc Fi[7] Fl[5] FL FL FL FU10{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} vd v6 v7 Fp Fp Fp Fi FC11{} FL FL} vd FD}


 S19560C12 ::~S19560C12(){ note_dtor("S19560C12", this);}
S19560C12 ::S19560C12(){ note_ctor("S19560C12", this);} // tgen

static void Test_S19560C12()
{
  extern Class_Descriptor cd_S19560C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(169,386)];
    init_test(&cd_S19560C12, buf);
    S19560C12 *dp, &lv = *(dp=new (buf) S19560C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2688,1540), "sizeof(S19560C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19560C12)");
    /*is_ambiguous_... S19560C12::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(336,228), "S19560C12");
    /*is_ambiguous_... S19560C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C10*), ABISELECT(864,516), "S19560C12");
    check_base_class_offset(lv, (S2489C3*)(S19560C7*)(S19560C10*), ABISELECT(2048,1180), "S19560C12");
    check_base_class_offset(lv, (S2489C3*)(S19560C4*), ABISELECT(2048,1180), "S19560C12");
    /*is_ambiguous_... S19560C12::S19560C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C7*), ABISELECT(2048,1180), "S19560C12");
    check_base_class_offset(lv, (S19560C7*)(S19560C10*), ABISELECT(480,312), "S19560C12");
    check_base_class_offset(lv, (S19560C10*), ABISELECT(480,312), "S19560C12");
    check_base_class_offset(lv, (S19560C10*)(S19560C9*)(S19560C13*), ABISELECT(480,312), "S19560C12");
    check_base_class_offset(lv, (S19560C7*)(S19560C4*), ABISELECT(2304,1336), "S19560C12");
    /*is_ambiguous_... S19560C9::S19560C7 */ AMB_check_base_class_offset(lv, (S19560C7*)(S19560C9*)(S19560C13*), ABISELECT(2304,1336), "S19560C12");
    check_base_class_offset(lv, (S19560C4*), ABISELECT(2176,1252), "S19560C12");
    check_base_class_offset(lv, (S19560C4*)(S19560C9*)(S19560C13*), ABISELECT(2176,1252), "S19560C12");
    /*is_ambiguous_... S19560C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C9*)(S19560C13*), ABISELECT(16,4), "S19560C12");
    check_base_class_offset(lv, (S19560C9*)(S19560C13*), 0, "S19560C12");
    check_base_class_offset(lv, (S19560C13*), 0, "S19560C12");
    check_field_offset(lv, s19560c12f0, ABISELECT(464,300), "S19560C12.s19560c12f0");
    test_class_info(&lv, &cd_S19560C12);
    dp->~S19560C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19560C12(Test_S19560C12, "S19560C12", ABISELECT(2688,1540));

#else // __cplusplus

extern void _ZN9S19560C12C1Ev();
extern void _ZN9S19560C12D2Ev();
Name_Map name_map_S19560C12[] = {
  NSPAIR(_ZN9S19560C12C1Ev),
  NSPAIR(_ZN9S19560C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C10;
extern VTBL_ENTRY _ZTI9S19560C10[];
extern  VTBL_ENTRY _ZTV9S19560C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C10[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C4;
extern VTBL_ENTRY _ZTI8S19560C4[];
extern  VTBL_ENTRY _ZTV8S19560C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C4[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C9;
extern VTBL_ENTRY _ZTI8S19560C9[];
extern  VTBL_ENTRY _ZTV8S19560C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C9[];
extern Class_Descriptor cd_S19560C13;
extern VTBL_ENTRY _ZTI9S19560C13[];
extern  VTBL_ENTRY _ZTV9S19560C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C13[];
static Base_Class bases_S19560C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(336,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(864,516), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(2048,1180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19560C7,    ABISELECT(480,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19560C10,    ABISELECT(480,312), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19560C7,    ABISELECT(2304,1336), //bcp->offset
    29, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19560C4,    ABISELECT(2176,1252), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19560C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19560C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19560C12[];
extern void _ZN9S19560C12D1Ev();
extern void _ZN9S19560C12D0Ev();
extern void _ZN8S19560C92v6Ev();
extern void _ZN9S19560C133v10Ev();
extern void _ZN9S19560C133v11Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
extern void ABISELECT(_ZTv0_n40_N9S19560C12D1Ev,_ZTv0_n20_N9S19560C12D1Ev)();
extern void ABISELECT(_ZThn2176_N9S19560C12D1Ev,_ZThn1252_N9S19560C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19560C12D0Ev,_ZTv0_n20_N9S19560C12D0Ev)();
extern void ABISELECT(_ZThn2176_N9S19560C12D0Ev,_ZThn1252_N9S19560C12D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY vtc_S19560C12[] = {
  ABISELECT(480,312),
  ABISELECT(2176,1252),
  ABISELECT(2048,1180),
  ABISELECT(2304,1336),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C12[0]),
  (VTBL_ENTRY)&_ZN9S19560C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19560C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v11Ev,
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI9S19560C12[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
  0,
  ABISELECT(-2176,-1252),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(-2176,-1252),
  (VTBL_ENTRY)&(_ZTI9S19560C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C12D1Ev,_ZTv0_n20_N9S19560C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C12D0Ev,_ZTv0_n20_N9S19560C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-2304,-1336),
  (VTBL_ENTRY)&(_ZTI9S19560C12[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern VTBL_ENTRY _ZTV9S19560C12[];
extern void _ZN9S19560C13D1Ev();
extern void _ZN9S19560C13D0Ev();
extern void _ZN8S19560C92v6Ev();
extern void _ZN9S19560C133v10Ev();
extern void _ZN9S19560C133v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C13__9S19560C12[] = {
  ABISELECT(480,312),
  ABISELECT(2176,1252),
  ABISELECT(2048,1180),
  ABISELECT(2304,1336),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&_ZN9S19560C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19560C13D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v11Ev,
};
extern void _ZN8S19560C9D1Ev();
extern void _ZN8S19560C9D0Ev();
extern void _ZN8S19560C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C99S19560C13__9S19560C12[] = {
  ABISELECT(480,312),
  ABISELECT(2176,1252),
  ABISELECT(2048,1180),
  ABISELECT(2304,1336),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C99S19560C13__9S19560C12[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-2304,-1336),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev)();
extern void ABISELECT(_ZThn2176_N8S19560C9D1Ev,_ZThn1252_N8S19560C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev)();
extern void ABISELECT(_ZThn2176_N8S19560C9D0Ev,_ZThn1252_N8S19560C9D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__8S19560C99S19560C13__9S19560C12[] = {
  0,
  ABISELECT(-2176,-1252),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(-2176,-1252),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__8S19560C99S19560C13__9S19560C12[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__9S19560C13__9S19560C12[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-2304,-1336),
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19560C13D1Ev,_ZTv0_n20_N9S19560C13D1Ev)();
extern void ABISELECT(_ZThn2176_N9S19560C13D1Ev,_ZThn1252_N9S19560C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19560C13D0Ev,_ZTv0_n20_N9S19560C13D0Ev)();
extern void ABISELECT(_ZThn2176_N9S19560C13D0Ev,_ZThn1252_N9S19560C13D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__9S19560C13__9S19560C12[] = {
  0,
  ABISELECT(-2176,-1252),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(-2176,-1252),
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C13D1Ev,_ZTv0_n20_N9S19560C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C13D0Ev,_ZTv0_n20_N9S19560C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__9S19560C13__9S19560C12[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__9S19560C12[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C10[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C79S19560C10__9S19560C12[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C4D1Ev();
extern void _ZN8S19560C4D0Ev();
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__9S19560C12[] = {
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C4[0]),
  (VTBL_ENTRY)&_ZN8S19560C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C4__9S19560C12[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S19560C4[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__A1__9S19560C12[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
static  VTT_ENTRY vtt_S19560C12[] = {
  {&(_ZTV9S19560C12[6]),  6,36},
  {&(_tg__ZTV9S19560C13__9S19560C12[6]),  6,11},
  {&(_tg__ZTV8S19560C99S19560C13__9S19560C12[6]),  6,9},
  {&(_tg__ZTV8S19560C7__8S19560C99S19560C13__9S19560C12[5]),  5,7},
  {&(_tg__ZTV8S19560C4__8S19560C99S19560C13__9S19560C12[6]),  6,9},
  {&(_tg__ZTV9S19560C10__8S19560C99S19560C13__9S19560C12[6]),  6,9},
  {&(_tg__ZTV8S19560C7__9S19560C13__9S19560C12[5]),  5,7},
  {&(_tg__ZTV8S19560C4__9S19560C13__9S19560C12[6]),  6,9},
  {&(_tg__ZTV9S19560C10__9S19560C13__9S19560C12[6]),  6,9},
  {&(_ZTV9S19560C12[17]),  17,36},
  {&(_ZTV9S19560C12[26]),  26,36},
  {&(_ZTV9S19560C12[34]),  34,36},
  {&(_tg__ZTV9S19560C10__9S19560C12[3]),  3,6},
  {&(_tg__ZTV8S19560C79S19560C10__9S19560C12[3]),  3,5},
  {&(_tg__ZTV8S19560C4__9S19560C12[4]),  4,7},
  {&(_tg__ZTV8S19560C7__8S19560C4__9S19560C12[5]),  5,7},
  {&(_tg__ZTV8S19560C7__A1__9S19560C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19560C12[];
extern  VTBL_ENTRY _ZTV9S19560C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C12[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C13D0Ev,_ZTv0_n20_N9S19560C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N9S19560C13D0Ev,_ZThn1252_N9S19560C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C13D1Ev,_ZTv0_n20_N9S19560C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N9S19560C13D1Ev,_ZThn1252_N9S19560C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N8S19560C9D0Ev,_ZThn1252_N8S19560C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N8S19560C9D1Ev,_ZThn1252_N8S19560C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C12D0Ev,_ZTv0_n20_N9S19560C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N9S19560C12D0Ev,_ZThn1252_N9S19560C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C12D1Ev,_ZTv0_n20_N9S19560C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N9S19560C12D1Ev,_ZThn1252_N9S19560C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19560C12 = {  "S19560C12", // class name
  bases_S19560C12, 10,
  &(vtc_S19560C12[0]), // expected_vtbl_contents
  &(vtt_S19560C12[0]), // expected_vtt_contents
  ABISELECT(2688,1540), // object size
  NSPAIRA(_ZTI9S19560C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19560C12),36, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19560C12),17, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19560C15  : virtual S19560C10 , virtual S19560C4 {
  int s19560c15f0;
  void *s19560c15f1;
  int s19560c15f2;
  ::S2489C7 s19560c15f3;
  ~S19560C15(); // tgen
  S19560C15(); // tgen
};
//SIG(-1 S19560C15) C1{ VBC2{ BC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC5{ VBC3 v1 v2 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 FL FU6} v3 Fp FD FC3[7] FD FU4 Fs FL FL} VBC7{ VBC3 VBC5 vd v4 FL FL FL FL Fi FU6 Fc[10] Fi} Fi Fp Fi FU6}


S19560C15 ::~S19560C15(){ note_dtor("S19560C15", this);} // tgen
S19560C15 ::S19560C15(){ note_ctor("S19560C15", this);} // tgen

static void Test_S19560C15()
{
  extern Class_Descriptor cd_S19560C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(145,319)];
    init_test(&cd_S19560C15, buf);
    S19560C15 *dp, &lv = *(dp=new (buf) S19560C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2304,1272), "sizeof(S19560C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19560C15)");
    /*is_ambiguous_... S19560C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C10*), ABISELECT(480,248), "S19560C15");
    check_base_class_offset(lv, (S2489C3*)(S19560C7*)(S19560C10*), ABISELECT(1664,912), "S19560C15");
    check_base_class_offset(lv, (S2489C3*)(S19560C4*), ABISELECT(1664,912), "S19560C15");
    /*is_ambiguous_... S19560C15::S19560C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C7*), ABISELECT(1664,912), "S19560C15");
    check_base_class_offset(lv, (S19560C7*)(S19560C10*), ABISELECT(96,44), "S19560C15");
    check_base_class_offset(lv, (S19560C10*), ABISELECT(96,44), "S19560C15");
    check_base_class_offset(lv, (S19560C7*)(S19560C4*), ABISELECT(1920,1068), "S19560C15");
    check_base_class_offset(lv, (S19560C4*), ABISELECT(1792,984), "S19560C15");
    check_field_offset(lv, s19560c15f0, ABISELECT(8,4), "S19560C15.s19560c15f0");
    check_field_offset(lv, s19560c15f1, ABISELECT(16,8), "S19560C15.s19560c15f1");
    check_field_offset(lv, s19560c15f2, ABISELECT(24,12), "S19560C15.s19560c15f2");
    check_field_offset(lv, s19560c15f3, ABISELECT(32,16), "S19560C15.s19560c15f3");
    test_class_info(&lv, &cd_S19560C15);
    dp->~S19560C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19560C15(Test_S19560C15, "S19560C15", ABISELECT(2304,1272));

#else // __cplusplus

extern void _ZN9S19560C15C1Ev();
extern void _ZN9S19560C15D1Ev();
Name_Map name_map_S19560C15[] = {
  NSPAIR(_ZN9S19560C15C1Ev),
  NSPAIR(_ZN9S19560C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C10;
extern VTBL_ENTRY _ZTI9S19560C10[];
extern  VTBL_ENTRY _ZTV9S19560C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C10[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C4;
extern VTBL_ENTRY _ZTI8S19560C4[];
extern  VTBL_ENTRY _ZTV8S19560C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C4[];
static Base_Class bases_S19560C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(480,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(1664,912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19560C7,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19560C10,    ABISELECT(96,44), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19560C7,    ABISELECT(1920,1068), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19560C4,    ABISELECT(1792,984), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19560C15[];
extern void _ZN9S19560C15D1Ev();
extern void _ZN9S19560C15D0Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
extern void ABISELECT(_ZTv0_n40_N9S19560C15D1Ev,_ZTv0_n20_N9S19560C15D1Ev)();
extern void ABISELECT(_ZThn1792_N9S19560C15D1Ev,_ZThn984_N9S19560C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19560C15D0Ev,_ZTv0_n20_N9S19560C15D0Ev)();
extern void ABISELECT(_ZThn1792_N9S19560C15D0Ev,_ZThn984_N9S19560C15D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY vtc_S19560C15[] = {
  ABISELECT(1920,1068),
  ABISELECT(1792,984),
  ABISELECT(1664,912),
  ABISELECT(96,44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C15[0]),
  (VTBL_ENTRY)&_ZN9S19560C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19560C15D0Ev,
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI9S19560C15[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
  0,
  ABISELECT(-1792,-984),
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  ABISELECT(-1792,-984),
  (VTBL_ENTRY)&(_ZTI9S19560C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C15D1Ev,_ZTv0_n20_N9S19560C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C15D0Ev,_ZTv0_n20_N9S19560C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-1920,-1068),
  (VTBL_ENTRY)&(_ZTI9S19560C15[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern VTBL_ENTRY _ZTV9S19560C15[];
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__9S19560C15[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C10[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C79S19560C10__9S19560C15[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C4D1Ev();
extern void _ZN8S19560C4D0Ev();
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__9S19560C15[] = {
  ABISELECT(128,84),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C4[0]),
  (VTBL_ENTRY)&_ZN8S19560C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C4__9S19560C15[] = {
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S19560C4[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__A1__9S19560C15[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
static  VTT_ENTRY vtt_S19560C15[] = {
  {&(_ZTV9S19560C15[6]),  6,33},
  {&(_ZTV9S19560C15[14]),  14,33},
  {&(_ZTV9S19560C15[23]),  23,33},
  {&(_ZTV9S19560C15[31]),  31,33},
  {&(_tg__ZTV9S19560C10__9S19560C15[3]),  3,6},
  {&(_tg__ZTV8S19560C79S19560C10__9S19560C15[3]),  3,5},
  {&(_tg__ZTV8S19560C4__9S19560C15[4]),  4,7},
  {&(_tg__ZTV8S19560C7__8S19560C4__9S19560C15[5]),  5,7},
  {&(_tg__ZTV8S19560C7__A1__9S19560C15[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19560C15[];
extern  VTBL_ENTRY _ZTV9S19560C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C15[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C15D0Ev,_ZTv0_n20_N9S19560C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1792_N9S19560C15D0Ev,_ZThn984_N9S19560C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C15D1Ev,_ZTv0_n20_N9S19560C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1792_N9S19560C15D1Ev,_ZThn984_N9S19560C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19560C15 = {  "S19560C15", // class name
  bases_S19560C15, 6,
  &(vtc_S19560C15[0]), // expected_vtbl_contents
  &(vtt_S19560C15[0]), // expected_vtt_contents
  ABISELECT(2304,1272), // object size
  NSPAIRA(_ZTI9S19560C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19560C15),33, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19560C15),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19560C2  : S19560C3 , S19560C12 , S19560C15 , S19560C10 {
  char s19560c2f0;
  __tsi64 s19560c2f1;
  long double s19560c2f2[4];
  int s19560c2f3[4];
  void *s19560c2f4;
  virtual  ~S19560C2(); // _ZN8S19560C2D2Ev
  virtual void  v12(); // _ZN8S19560C23v12Ev
  virtual void  v13(); // _ZN8S19560C23v13Ev
  S19560C2(); // tgen
};
//SIG(-1 S19560C2) C1{ BC2{ VBC3{ VBC4{ m Fc Fi FL FU5{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC6{ VBC4 v3 v4 Fp Fp Fi Fi FU7{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU7 Fp FL:3 FC4 FL FU7} vd v5 FL FL FL FL Fi FU7 Fc[10] Fi} BC8{ BC4 VBC6 VBC3 VBC9{ BC4 BC6 v6 Fp FD FC4[7] FD FU5 Fs FL FL} vd v7 Fc Fi[7] Fl[5] FL FL FL FU10{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} BC4 BC6 vd v8 v9 v10 FU7 Fi Fl Fc Fp FC9 Fs} BC11{ BC4 VBC9 VBC3 BC12{ BC8 vd v11 v12 Fp Fp Fp Fi FC13{} FL FL} vd FD} BC14{ VBC9 VBC3 Fi Fp Fi FU7} BC9 vd v1 v2 Fc FL FD[4] Fi[4] Fp}


 S19560C2 ::~S19560C2(){ note_dtor("S19560C2", this);}
void  S19560C2 ::v12(){vfunc_called(this, "_ZN8S19560C23v12Ev");}
void  S19560C2 ::v13(){vfunc_called(this, "_ZN8S19560C23v13Ev");}
S19560C2 ::S19560C2(){ note_ctor("S19560C2", this);} // tgen

static void Test_S19560C2()
{
  extern Class_Descriptor cd_S19560C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(442,998)];
    init_test(&cd_S19560C2, buf);
    S19560C2 *dp, &lv = *(dp=new (buf) S19560C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7056,3988), "sizeof(S19560C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19560C2)");
    check_base_class_offset(lv, (S2489C3*)(S19560C4*), ABISELECT(4976,2844), "S19560C2");
    /*is_ambiguous_... S19560C2::S19560C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C7*), ABISELECT(4976,2844), "S19560C2");
    /*is_ambiguous_... S19560C2::S19560C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C7*)(S19560C10*), ABISELECT(4976,2844), "S19560C2");
    /*is_ambiguous_... S19560C3::S19560C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C7*)(S19560C3*), ABISELECT(4976,2844), "S19560C2");
    /*is_ambiguous_... S19560C2::S19560C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C7*)(S19560C10*), ABISELECT(4976,2844), "S19560C2");
    check_base_class_offset(lv, (S19560C7*)(S19560C4*), ABISELECT(5104,2916), "S19560C2");
    /*is_ambiguous_... S19560C9::S19560C7 */ AMB_check_base_class_offset(lv, (S19560C7*)(S19560C9*)(S19560C3*), ABISELECT(5104,2916), "S19560C2");
    /*is_ambiguous_... S19560C9::S19560C7 */ AMB_check_base_class_offset(lv, (S19560C7*)(S19560C9*)(S19560C13*)(S19560C12*), ABISELECT(5104,2916), "S19560C2");
    check_base_class_offset(lv, (S19560C4*)(S19560C3*), ABISELECT(4856,2760), "S19560C2");
    check_base_class_offset(lv, (S19560C4*)(S19560C9*)(S19560C3*), ABISELECT(4856,2760), "S19560C2");
    check_base_class_offset(lv, (S19560C4*)(S19560C12*), ABISELECT(4856,2760), "S19560C2");
    check_base_class_offset(lv, (S19560C4*)(S19560C9*)(S19560C13*)(S19560C12*), ABISELECT(4856,2760), "S19560C2");
    check_base_class_offset(lv, (S19560C4*)(S19560C15*), ABISELECT(4856,2760), "S19560C2");
    /*is_ambiguous_... S19560C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C9*)(S19560C3*), ABISELECT(16,4), "S19560C2");
    /*is_ambiguous_... S19560C2::S19560C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C10*), ABISELECT(5872,3324), "S19560C2");
    /*is_ambiguous_... S19560C2::S19560C10 */ AMB_check_base_class_offset(lv, (S19560C7*)(S19560C10*), ABISELECT(5488,3120), "S19560C2");
    check_base_class_offset(lv, (S19560C10*)(S19560C9*)(S19560C3*), ABISELECT(5488,3120), "S19560C2");
    check_base_class_offset(lv, (S19560C10*)(S19560C12*), ABISELECT(5488,3120), "S19560C2");
    check_base_class_offset(lv, (S19560C10*)(S19560C9*)(S19560C13*)(S19560C12*), ABISELECT(5488,3120), "S19560C2");
    check_base_class_offset(lv, (S19560C10*)(S19560C15*), ABISELECT(5488,3120), "S19560C2");
    check_base_class_offset(lv, (S19560C9*)(S19560C3*), 0, "S19560C2");
    /*is_ambiguous_... S19560C3::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C3*), ABISELECT(288,192), "S19560C2");
    /*is_ambiguous_... S19560C3::S19560C7 */ AMB_check_base_class_offset(lv, (S19560C7*)(S19560C3*), ABISELECT(416,264), "S19560C2");
    check_base_class_offset(lv, (S19560C3*), 0, "S19560C2");
    /*is_ambiguous_... S19560C12::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C12*), ABISELECT(2944,1684), "S19560C2");
    /*is_ambiguous_... S19560C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C9*)(S19560C13*)(S19560C12*), ABISELECT(2624,1460), "S19560C2");
    check_base_class_offset(lv, (S19560C9*)(S19560C13*)(S19560C12*), ABISELECT(2608,1456), "S19560C2");
    check_base_class_offset(lv, (S19560C13*)(S19560C12*), ABISELECT(2608,1456), "S19560C2");
    check_base_class_offset(lv, (S19560C12*), ABISELECT(2608,1456), "S19560C2");
    check_base_class_offset(lv, (S19560C15*), ABISELECT(3088,1768), "S19560C2");
    /*is_ambiguous_... S19560C2::S19560C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C10*), ABISELECT(3568,2016), "S19560C2");
    /*is_ambiguous_... S19560C2::S19560C10 */ AMB_check_base_class_offset(lv, (S19560C7*)(S19560C10*), ABISELECT(3184,1812), "S19560C2");
    /*is_ambiguous_... S19560C2::S19560C10 */ AMB_check_base_class_offset(lv, (S19560C10*), ABISELECT(3184,1812), "S19560C2");
    check_field_offset(lv, s19560c2f0, ABISELECT(4744,2680), "S19560C2.s19560c2f0");
    check_field_offset(lv, s19560c2f1, ABISELECT(4752,2684), "S19560C2.s19560c2f1");
    check_field_offset(lv, s19560c2f2, ABISELECT(4768,2692), "S19560C2.s19560c2f2");
    check_field_offset(lv, s19560c2f3, ABISELECT(4832,2740), "S19560C2.s19560c2f3");
    check_field_offset(lv, s19560c2f4, ABISELECT(4848,2756), "S19560C2.s19560c2f4");
    test_class_info(&lv, &cd_S19560C2);
    dp->~S19560C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19560C2(Test_S19560C2, "S19560C2", ABISELECT(7056,3988));

#else // __cplusplus

extern void _ZN8S19560C2C1Ev();
extern void _ZN8S19560C2D2Ev();
Name_Map name_map_S19560C2[] = {
  NSPAIR(_ZN8S19560C2C1Ev),
  NSPAIR(_ZN8S19560C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C4;
extern VTBL_ENTRY _ZTI8S19560C4[];
extern  VTBL_ENTRY _ZTV8S19560C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C4[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C10;
extern VTBL_ENTRY _ZTI9S19560C10[];
extern  VTBL_ENTRY _ZTV9S19560C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C10[];
extern Class_Descriptor cd_S19560C9;
extern VTBL_ENTRY _ZTI8S19560C9[];
extern  VTBL_ENTRY _ZTV8S19560C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C9[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C3;
extern VTBL_ENTRY _ZTI8S19560C3[];
extern  VTBL_ENTRY _ZTV8S19560C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C9;
extern VTBL_ENTRY _ZTI8S19560C9[];
extern  VTBL_ENTRY _ZTV8S19560C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C9[];
extern Class_Descriptor cd_S19560C13;
extern VTBL_ENTRY _ZTI9S19560C13[];
extern  VTBL_ENTRY _ZTV9S19560C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C13[];
extern Class_Descriptor cd_S19560C12;
extern VTBL_ENTRY _ZTI9S19560C12[];
extern  VTBL_ENTRY _ZTV9S19560C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C12[];
extern Class_Descriptor cd_S19560C15;
extern VTBL_ENTRY _ZTI9S19560C15[];
extern  VTBL_ENTRY _ZTV9S19560C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C15[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C10;
extern VTBL_ENTRY _ZTI9S19560C10[];
extern  VTBL_ENTRY _ZTV9S19560C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C10[];
static Base_Class bases_S19560C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(4976,2844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19560C7,    ABISELECT(5104,2916), //bcp->offset
    53, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19560C4,    ABISELECT(4856,2760), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(5872,3324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19560C7,    ABISELECT(5488,3120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19560C10,    ABISELECT(5488,3120), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19560C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19560C7,    ABISELECT(416,264), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19560C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(2944,1684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(2624,1460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19560C9,    ABISELECT(2608,1456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19560C13,    ABISELECT(2608,1456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19560C12,    ABISELECT(2608,1456), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19560C15,    ABISELECT(3088,1768), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(3568,2016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19560C7,    ABISELECT(3184,1812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19560C10,    ABISELECT(3184,1812), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19560C2[];
extern void _ZN8S19560C2D1Ev();
extern void _ZN8S19560C2D0Ev();
extern void _ZN8S19560C92v6Ev();
extern void _ZN8S19560C32v7Ev();
extern void _ZN8S19560C32v8Ev();
extern void _ZN8S19560C32v9Ev();
extern void _ZN8S19560C23v12Ev();
extern void _ZN8S19560C23v13Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void ABISELECT(_ZThn2608_N8S19560C2D1Ev,_ZThn1456_N8S19560C2D1Ev)();
extern void ABISELECT(_ZThn2608_N8S19560C2D0Ev,_ZThn1456_N8S19560C2D0Ev)();
extern void _ZN8S19560C92v6Ev();
extern void _ZN9S19560C133v10Ev();
extern void _ZN9S19560C133v11Ev();
extern void ABISELECT(_ZThn3088_N8S19560C2D1Ev,_ZThn1768_N8S19560C2D1Ev)();
extern void ABISELECT(_ZThn3088_N8S19560C2D0Ev,_ZThn1768_N8S19560C2D0Ev)();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
extern void ABISELECT(_ZTv0_n40_N8S19560C2D1Ev,_ZTv0_n20_N8S19560C2D1Ev)();
extern void ABISELECT(_ZThn4856_N8S19560C2D1Ev,_ZThn2760_N8S19560C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19560C2D0Ev,_ZTv0_n20_N8S19560C2D0Ev)();
extern void ABISELECT(_ZThn4856_N8S19560C2D0Ev,_ZThn2760_N8S19560C2D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY vtc_S19560C2[] = {
  ABISELECT(5488,3120),
  ABISELECT(4856,2760),
  ABISELECT(4976,2844),
  ABISELECT(5104,2916),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C2[0]),
  (VTBL_ENTRY)&_ZN8S19560C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN8S19560C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19560C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19560C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19560C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19560C23v13Ev,
  ABISELECT(4560,2580),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S19560C2[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  ABISELECT(2880,1664),
  ABISELECT(2248,1304),
  ABISELECT(2368,1388),
  ABISELECT(2496,1460),
  ABISELECT(-2608,-1456),
  (VTBL_ENTRY)&(_ZTI8S19560C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2608_N8S19560C2D1Ev,_ZThn1456_N8S19560C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2608_N8S19560C2D0Ev,_ZThn1456_N8S19560C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v11Ev,
  ABISELECT(2016,1148),
  ABISELECT(1768,992),
  ABISELECT(1888,1076),
  ABISELECT(2400,1352),
  ABISELECT(-3088,-1768),
  (VTBL_ENTRY)&(_ZTI8S19560C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3088_N8S19560C2D1Ev,_ZThn1768_N8S19560C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3088_N8S19560C2D0Ev,_ZThn1768_N8S19560C2D0Ev),
  ABISELECT(1792,1032),
  ABISELECT(-3184,-1812),
  (VTBL_ENTRY)&(_ZTI8S19560C2[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
  0,
  ABISELECT(-4856,-2760),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-4856,-2760),
  (VTBL_ENTRY)&(_ZTI8S19560C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C2D1Ev,_ZTv0_n20_N8S19560C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C2D0Ev,_ZTv0_n20_N8S19560C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-5104,-2916),
  (VTBL_ENTRY)&(_ZTI8S19560C2[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-5488,-3120),
  (VTBL_ENTRY)&(_ZTI8S19560C2[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S19560C2[];
extern void _ZN8S19560C3D1Ev();
extern void _ZN8S19560C3D0Ev();
extern void _ZN8S19560C92v6Ev();
extern void _ZN8S19560C32v7Ev();
extern void _ZN8S19560C32v8Ev();
extern void _ZN8S19560C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C3__8S19560C2[] = {
  ABISELECT(5488,3120),
  ABISELECT(4856,2760),
  ABISELECT(4976,2844),
  ABISELECT(5104,2916),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C3[0]),
  (VTBL_ENTRY)&_ZN8S19560C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN8S19560C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19560C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19560C32v9Ev,
};
extern void _ZN8S19560C9D1Ev();
extern void _ZN8S19560C9D0Ev();
extern void _ZN8S19560C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C98S19560C3__8S19560C2[] = {
  ABISELECT(5488,3120),
  ABISELECT(4856,2760),
  ABISELECT(4976,2844),
  ABISELECT(5104,2916),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C98S19560C3__8S19560C2[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-5104,-2916),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev)();
extern void ABISELECT(_ZThn4856_N8S19560C9D1Ev,_ZThn2760_N8S19560C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev)();
extern void ABISELECT(_ZThn4856_N8S19560C9D0Ev,_ZThn2760_N8S19560C9D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__8S19560C98S19560C3__8S19560C2[] = {
  0,
  ABISELECT(-4856,-2760),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-4856,-2760),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__8S19560C98S19560C3__8S19560C2[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-5488,-3120),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C78S19560C3__A2__8S19560C2[] = {
  ABISELECT(4560,2580),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19560C3D1Ev,_ZTv0_n20_N8S19560C3D1Ev)();
extern void ABISELECT(_ZThn4856_N8S19560C3D1Ev,_ZThn2760_N8S19560C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19560C3D0Ev,_ZTv0_n20_N8S19560C3D0Ev)();
extern void ABISELECT(_ZThn4856_N8S19560C3D0Ev,_ZThn2760_N8S19560C3D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__8S19560C3__8S19560C2[] = {
  0,
  ABISELECT(-4856,-2760),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-4856,-2760),
  (VTBL_ENTRY)&(_ZTI8S19560C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C3D1Ev,_ZTv0_n20_N8S19560C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C3D0Ev,_ZTv0_n20_N8S19560C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C3__8S19560C2[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-5104,-2916),
  (VTBL_ENTRY)&(_ZTI8S19560C3[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__8S19560C3__8S19560C2[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-5488,-3120),
  (VTBL_ENTRY)&(_ZTI8S19560C3[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__A__8S19560C3__8S19560C2[] = {
  ABISELECT(4560,2580),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S19560C3[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN9S19560C12D1Ev();
extern void _ZN9S19560C12D0Ev();
extern void _ZN8S19560C92v6Ev();
extern void _ZN9S19560C133v10Ev();
extern void _ZN9S19560C133v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C12__8S19560C2[] = {
  ABISELECT(2880,1664),
  ABISELECT(2248,1304),
  ABISELECT(2368,1388),
  ABISELECT(2496,1460),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C12[0]),
  (VTBL_ENTRY)&_ZN9S19560C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19560C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v11Ev,
};
extern void _ZN9S19560C13D1Ev();
extern void _ZN9S19560C13D0Ev();
extern void _ZN8S19560C92v6Ev();
extern void _ZN9S19560C133v10Ev();
extern void _ZN9S19560C133v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C139S19560C12__8S19560C2[] = {
  ABISELECT(2880,1664),
  ABISELECT(2248,1304),
  ABISELECT(2368,1388),
  ABISELECT(2496,1460),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&_ZN9S19560C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19560C13D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v11Ev,
};
extern void _ZN8S19560C9D1Ev();
extern void _ZN8S19560C9D0Ev();
extern void _ZN8S19560C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C99S19560C139S19560C12__A1__8S19560C2[] = {
  ABISELECT(2880,1664),
  ABISELECT(2248,1304),
  ABISELECT(2368,1388),
  ABISELECT(2496,1460),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C99S19560C139S19560C12__A1__8S19560C2[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2496,-1460),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev)();
extern void ABISELECT(_ZThn2248_N8S19560C9D1Ev,_ZThn1304_N8S19560C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev)();
extern void ABISELECT(_ZThn2248_N8S19560C9D0Ev,_ZThn1304_N8S19560C9D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__8S19560C99S19560C139S19560C12__A1__8S19560C2[] = {
  0,
  ABISELECT(-2248,-1304),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-2248,-1304),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__8S19560C99S19560C139S19560C12__A1__8S19560C2[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-2880,-1664),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__9S19560C139S19560C12__8S19560C2[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2496,-1460),
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19560C13D1Ev,_ZTv0_n20_N9S19560C13D1Ev)();
extern void ABISELECT(_ZThn2248_N9S19560C13D1Ev,_ZThn1304_N9S19560C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19560C13D0Ev,_ZTv0_n20_N9S19560C13D0Ev)();
extern void ABISELECT(_ZThn2248_N9S19560C13D0Ev,_ZThn1304_N9S19560C13D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__9S19560C139S19560C12__8S19560C2[] = {
  0,
  ABISELECT(-2248,-1304),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-2248,-1304),
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C13D1Ev,_ZTv0_n20_N9S19560C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C13D0Ev,_ZTv0_n20_N9S19560C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__9S19560C139S19560C12__8S19560C2[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-2880,-1664),
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__9S19560C12__8S19560C2[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-2880,-1664),
  (VTBL_ENTRY)&(_ZTI9S19560C12[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19560C12D1Ev,_ZTv0_n20_N9S19560C12D1Ev)();
extern void ABISELECT(_ZThn2248_N9S19560C12D1Ev,_ZThn1304_N9S19560C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19560C12D0Ev,_ZTv0_n20_N9S19560C12D0Ev)();
extern void ABISELECT(_ZThn2248_N9S19560C12D0Ev,_ZThn1304_N9S19560C12D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__9S19560C12__8S19560C2[] = {
  0,
  ABISELECT(-2248,-1304),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-2248,-1304),
  (VTBL_ENTRY)&(_ZTI9S19560C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C12D1Ev,_ZTv0_n20_N9S19560C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C12D0Ev,_ZTv0_n20_N9S19560C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__A1__9S19560C12__8S19560C2[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2496,-1460),
  (VTBL_ENTRY)&(_ZTI9S19560C12[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN9S19560C15D1Ev();
extern void _ZN9S19560C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C15__8S19560C2[] = {
  ABISELECT(2016,1148),
  ABISELECT(1768,992),
  ABISELECT(1888,1076),
  ABISELECT(2400,1352),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C15[0]),
  (VTBL_ENTRY)&_ZN9S19560C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19560C15D0Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__9S19560C15__8S19560C2[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-2400,-1352),
  (VTBL_ENTRY)&(_ZTI9S19560C15[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19560C15D1Ev,_ZTv0_n20_N9S19560C15D1Ev)();
extern void ABISELECT(_ZThn1768_N9S19560C15D1Ev,_ZThn992_N9S19560C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19560C15D0Ev,_ZTv0_n20_N9S19560C15D0Ev)();
extern void ABISELECT(_ZThn1768_N9S19560C15D0Ev,_ZThn992_N9S19560C15D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__9S19560C15__8S19560C2[] = {
  0,
  ABISELECT(-1768,-992),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-1768,-992),
  (VTBL_ENTRY)&(_ZTI9S19560C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C15D1Ev,_ZTv0_n20_N9S19560C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C15D0Ev,_ZTv0_n20_N9S19560C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__A1__9S19560C15__8S19560C2[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2016,-1148),
  (VTBL_ENTRY)&(_ZTI9S19560C15[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__A__8S19560C2[] = {
  ABISELECT(1792,1032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C10[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C79S19560C10__A3__8S19560C2[] = {
  ABISELECT(1792,1032),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C4D1Ev();
extern void _ZN8S19560C4D0Ev();
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__8S19560C2[] = {
  ABISELECT(248,156),
  ABISELECT(120,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C4[0]),
  (VTBL_ENTRY)&_ZN8S19560C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C4__8S19560C2[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-248,-156),
  (VTBL_ENTRY)&(_ZTI8S19560C4[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C2[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__8S19560C2[] = {
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C10[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C79S19560C10__A1__8S19560C2[] = {
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
static  VTT_ENTRY vtt_S19560C2[] = {
  {&(_ZTV8S19560C2[6]),  6,69},
  {&(_tg__ZTV8S19560C3__8S19560C2[6]),  6,12},
  {&(_tg__ZTV8S19560C98S19560C3__8S19560C2[6]),  6,9},
  {&(_tg__ZTV8S19560C7__8S19560C98S19560C3__8S19560C2[5]),  5,7},
  {&(_tg__ZTV8S19560C4__8S19560C98S19560C3__8S19560C2[6]),  6,9},
  {&(_tg__ZTV9S19560C10__8S19560C98S19560C3__8S19560C2[6]),  6,9},
  {&(_tg__ZTV8S19560C78S19560C3__A2__8S19560C2[3]),  3,5},
  {&(_tg__ZTV8S19560C4__8S19560C3__8S19560C2[6]),  6,9},
  {&(_tg__ZTV8S19560C7__8S19560C3__8S19560C2[5]),  5,7},
  {&(_tg__ZTV9S19560C10__8S19560C3__8S19560C2[6]),  6,9},
  {&(_tg__ZTV8S19560C7__A__8S19560C3__8S19560C2[3]),  3,5},
  {&(_tg__ZTV9S19560C12__8S19560C2[6]),  6,11},
  {&(_tg__ZTV9S19560C139S19560C12__8S19560C2[6]),  6,11},
  {&(_tg__ZTV8S19560C99S19560C139S19560C12__A1__8S19560C2[6]),  6,9},
  {&(_tg__ZTV8S19560C7__8S19560C99S19560C139S19560C12__A1__8S19560C2[5]),  5,7},
  {&(_tg__ZTV8S19560C4__8S19560C99S19560C139S19560C12__A1__8S19560C2[6]),  6,9},
  {&(_tg__ZTV9S19560C10__8S19560C99S19560C139S19560C12__A1__8S19560C2[6]),  6,9},
  {&(_tg__ZTV8S19560C7__9S19560C139S19560C12__8S19560C2[5]),  5,7},
  {&(_tg__ZTV8S19560C4__9S19560C139S19560C12__8S19560C2[6]),  6,9},
  {&(_tg__ZTV9S19560C10__9S19560C139S19560C12__8S19560C2[6]),  6,9},
  {&(_tg__ZTV9S19560C10__9S19560C12__8S19560C2[6]),  6,9},
  {&(_tg__ZTV8S19560C4__9S19560C12__8S19560C2[6]),  6,9},
  {&(_tg__ZTV8S19560C7__A1__9S19560C12__8S19560C2[5]),  5,7},
  {&(_tg__ZTV9S19560C15__8S19560C2[6]),  6,8},
  {&(_tg__ZTV9S19560C10__9S19560C15__8S19560C2[6]),  6,9},
  {&(_tg__ZTV8S19560C4__9S19560C15__8S19560C2[6]),  6,9},
  {&(_tg__ZTV8S19560C7__A1__9S19560C15__8S19560C2[5]),  5,7},
  {&(_tg__ZTV9S19560C10__A__8S19560C2[3]),  3,6},
  {&(_tg__ZTV8S19560C79S19560C10__A3__8S19560C2[3]),  3,5},
  {&(_ZTV8S19560C2[50]),  50,69},
  {&(_ZTV8S19560C2[58]),  58,69},
  {&(_ZTV8S19560C2[66]),  66,69},
  {&(_ZTV8S19560C2[17]),  17,69},
  {&(_ZTV8S19560C2[25]),  25,69},
  {&(_ZTV8S19560C2[36]),  36,69},
  {&(_ZTV8S19560C2[41]),  41,69},
  {&(_tg__ZTV8S19560C4__8S19560C2[4]),  4,7},
  {&(_tg__ZTV8S19560C7__8S19560C4__8S19560C2[5]),  5,7},
  {&(_tg__ZTV8S19560C7__8S19560C2[3]),  3,5},
  {&(_tg__ZTV9S19560C10__8S19560C2[3]),  3,6},
  {&(_tg__ZTV8S19560C79S19560C10__A1__8S19560C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19560C2[];
extern  VTBL_ENTRY _ZTV8S19560C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C2[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C15D0Ev,_ZTv0_n20_N9S19560C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1768_N9S19560C15D0Ev,_ZThn992_N9S19560C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C15D1Ev,_ZTv0_n20_N9S19560C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1768_N9S19560C15D1Ev,_ZThn992_N9S19560C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C12D0Ev,_ZTv0_n20_N9S19560C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N9S19560C12D0Ev,_ZThn1304_N9S19560C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C12D1Ev,_ZTv0_n20_N9S19560C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N9S19560C12D1Ev,_ZThn1304_N9S19560C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C13D0Ev,_ZTv0_n20_N9S19560C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N9S19560C13D0Ev,_ZThn1304_N9S19560C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C13D1Ev,_ZTv0_n20_N9S19560C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N9S19560C13D1Ev,_ZThn1304_N9S19560C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C3D0Ev,_ZTv0_n20_N8S19560C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19560C3D0Ev,_ZThn2760_N8S19560C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C3D1Ev,_ZTv0_n20_N8S19560C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19560C3D1Ev,_ZThn2760_N8S19560C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N8S19560C9D0Ev,_ZThn1304_N8S19560C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19560C9D0Ev,_ZThn2760_N8S19560C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N8S19560C9D1Ev,_ZThn1304_N8S19560C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19560C9D1Ev,_ZThn2760_N8S19560C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C2D0Ev,_ZTv0_n20_N8S19560C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19560C2D0Ev,_ZThn2760_N8S19560C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C2D1Ev,_ZTv0_n20_N8S19560C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19560C2D1Ev,_ZThn2760_N8S19560C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19560C2 = {  "S19560C2", // class name
  bases_S19560C2, 20,
  &(vtc_S19560C2[0]), // expected_vtbl_contents
  &(vtt_S19560C2[0]), // expected_vtt_contents
  ABISELECT(7056,3988), // object size
  NSPAIRA(_ZTI8S19560C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19560C2),69, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19560C2),41, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19560C17  {
  long double s19560c17f0;
  ::S19560C15 s19560c17f1[6];
  char s19560c17f2;
  void *s19560c17f3;
  void *s19560c17f4;
  int s19560c17f5[6];
  int s19560c17f6;
  void *s19560c17f7;
  __tsi64 s19560c17f8;
  void *s19560c17f9;
  int s19560c17f10;
  void *s19560c17f11;
  void *s19560c17f12;
  virtual void  v14(); // _ZN9S19560C173v14Ev
  ~S19560C17(); // tgen
  S19560C17(); // tgen
};
//SIG(-1 S19560C17) C1{ v1 FD FC2{ VBC3{ BC4{ m Fc Fi FL FU5{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC6{ VBC4 v2 v3 Fp Fp Fi Fi FU7{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU7 Fp FL:3 FC4 FL FU7} v4 Fp FD FC4[7] FD FU5 Fs FL FL} VBC8{ VBC4 VBC6 vd v5 FL FL FL FL Fi FU7 Fc[10] Fi} Fi Fp Fi FU7}[6] Fc Fp Fp Fi[6] Fi Fp FL Fp Fi Fp Fp}


void  S19560C17 ::v14(){vfunc_called(this, "_ZN9S19560C173v14Ev");}
S19560C17 ::~S19560C17(){ note_dtor("S19560C17", this);} // tgen
S19560C17 ::S19560C17(){ note_ctor("S19560C17", this);} // tgen

static void Test_S19560C17()
{
  extern Class_Descriptor cd_S19560C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(874,1930)];
    init_test(&cd_S19560C17, buf);
    S19560C17 *dp, &lv = *(dp=new (buf) S19560C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13968,7716), "sizeof(S19560C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19560C17)");
    check_field_offset(lv, s19560c17f0, ABISELECT(16,4), "S19560C17.s19560c17f0");
    check_field_offset(lv, s19560c17f1, ABISELECT(32,16), "S19560C17.s19560c17f1");
    check_field_offset(lv, s19560c17f2, ABISELECT(13856,7648), "S19560C17.s19560c17f2");
    check_field_offset(lv, s19560c17f3, ABISELECT(13864,7652), "S19560C17.s19560c17f3");
    check_field_offset(lv, s19560c17f4, ABISELECT(13872,7656), "S19560C17.s19560c17f4");
    check_field_offset(lv, s19560c17f5, ABISELECT(13880,7660), "S19560C17.s19560c17f5");
    check_field_offset(lv, s19560c17f6, ABISELECT(13904,7684), "S19560C17.s19560c17f6");
    check_field_offset(lv, s19560c17f7, ABISELECT(13912,7688), "S19560C17.s19560c17f7");
    check_field_offset(lv, s19560c17f8, ABISELECT(13920,7692), "S19560C17.s19560c17f8");
    check_field_offset(lv, s19560c17f9, ABISELECT(13928,7700), "S19560C17.s19560c17f9");
    check_field_offset(lv, s19560c17f10, ABISELECT(13936,7704), "S19560C17.s19560c17f10");
    check_field_offset(lv, s19560c17f11, ABISELECT(13944,7708), "S19560C17.s19560c17f11");
    check_field_offset(lv, s19560c17f12, ABISELECT(13952,7712), "S19560C17.s19560c17f12");
    test_class_info(&lv, &cd_S19560C17);
    dp->~S19560C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19560C17(Test_S19560C17, "S19560C17", ABISELECT(13968,7716));

#else // __cplusplus

extern void _ZN9S19560C17C1Ev();
extern void _ZN9S19560C17D1Ev();
Name_Map name_map_S19560C17[] = {
  NSPAIR(_ZN9S19560C17C1Ev),
  NSPAIR(_ZN9S19560C17D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19560C17[];
extern void _ZN9S19560C173v14Ev();
static  VTBL_ENTRY vtc_S19560C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C17[0]),
  (VTBL_ENTRY)&_ZN9S19560C173v14Ev,
};
extern VTBL_ENTRY _ZTI9S19560C17[];
extern  VTBL_ENTRY _ZTV9S19560C17[];
Class_Descriptor cd_S19560C17 = {  "S19560C17", // class name
  0,0,//no base classes
  &(vtc_S19560C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13968,7716), // object size
  NSPAIRA(_ZTI9S19560C17),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19560C17),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19560C16  : virtual S19560C10 , virtual S19560C7 , virtual S19560C4 , S19560C13 , virtual S19560C17 {
  char s19560c16f0;
  short s19560c16f1[3];
  ::S2489C21 s19560c16f2[10];
  ::S19560C10 s19560c16f3;
  __tsi64 s19560c16f4;
  __tsi64 s19560c16f5:5;
  int s19560c16f6;
  void *s19560c16f7[6];
  __tsi64 s19560c16f8[2];
  __tsi64 s19560c16f9;
  int s19560c16f10;
  virtual  ~S19560C16(); // _ZN9S19560C16D2Ev
  S19560C16(); // tgen
};
//SIG(-1 S19560C16) C1{ VBC2{ BC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC5{ VBC3 v1 v2 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 FL FU6} v3 Fp FD FC3[7] FD FU4 Fs FL FL} VBC5 VBC7{ VBC3 VBC5 vd v4 FL FL FL FL Fi FU6 Fc[10] Fi} BC8{ BC9{ BC3 VBC5 VBC7 VBC2 vd v5 Fc Fi[7] Fl[5] FL FL FL FU10{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} vd v6 v7 Fp Fp Fp Fi FC11{} FL FL} VBC12{ v8 FD FC13{ VBC2 VBC7 Fi Fp Fi FU6}[6] Fc Fp Fp Fi[6] Fi Fp FL Fp Fi Fp Fp} vd Fc Fs[3] FC14{ BC3 VBC15{ VBC3 v9 v10 Fp Fp Fi Fi FU6 FL:0 FD FU6 Fp FL:3 FC3 FL FU6} VBC16{ VBC3 VBC15 vd v11 FL FL FL FL Fi FU6 Fc[10] Fi} VBC17{ BC3 BC15 v12 Fp FD FC3[7] FD FU4 Fs FL FL} VBC18{ VBC16 BC19{ BC3 VBC15 VBC16 VBC17 vd v13 Fc Fi[7] Fl[5] FL FL FL FU10} BC3 BC15 vd v14 v15 v16 FU6 Fi Fl Fc Fp FC17 Fs} vd FL Fi Fp Fp FL}[10] FC2 FL FL:5 Fi Fp[6] FL[2] FL Fi}


 S19560C16 ::~S19560C16(){ note_dtor("S19560C16", this);}
S19560C16 ::S19560C16(){ note_ctor("S19560C16", this);} // tgen

static void Test_S19560C16()
{
  extern Class_Descriptor cd_S19560C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4275,9518)];
    init_test(&cd_S19560C16, buf);
    S19560C16 *dp, &lv = *(dp=new (buf) S19560C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(68384,38068), "sizeof(S19560C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19560C16)");
    /*is_ambiguous_... S19560C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C10*), ABISELECT(52592,29328), "S19560C16");
    check_base_class_offset(lv, (S2489C3*)(S19560C7*)(S19560C10*), ABISELECT(53776,29992), "S19560C16");
    /*is_ambiguous_... S19560C16::S19560C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C7*), ABISELECT(53776,29992), "S19560C16");
    check_base_class_offset(lv, (S2489C3*)(S19560C4*), ABISELECT(53776,29992), "S19560C16");
    check_base_class_offset(lv, (S19560C7*)(S19560C10*), ABISELECT(52208,29124), "S19560C16");
    check_base_class_offset(lv, (S19560C10*), ABISELECT(52208,29124), "S19560C16");
    check_base_class_offset(lv, (S19560C10*)(S19560C9*)(S19560C13*), ABISELECT(52208,29124), "S19560C16");
    /*is_ambiguous_... S19560C16::S19560C7 */ AMB_check_base_class_offset(lv, (S19560C7*), ABISELECT(53904,30064), "S19560C16");
    check_base_class_offset(lv, (S19560C7*)(S19560C4*), ABISELECT(53904,30064), "S19560C16");
    /*is_ambiguous_... S19560C9::S19560C7 */ AMB_check_base_class_offset(lv, (S19560C7*)(S19560C9*)(S19560C13*), ABISELECT(53904,30064), "S19560C16");
    check_base_class_offset(lv, (S19560C4*), ABISELECT(54288,30268), "S19560C16");
    check_base_class_offset(lv, (S19560C4*)(S19560C9*)(S19560C13*), ABISELECT(54288,30268), "S19560C16");
    /*is_ambiguous_... S19560C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C9*)(S19560C13*), ABISELECT(16,4), "S19560C16");
    check_base_class_offset(lv, (S19560C9*)(S19560C13*), 0, "S19560C16");
    check_base_class_offset(lv, (S19560C13*), 0, "S19560C16");
    check_base_class_offset(lv, (S19560C17*), ABISELECT(54416,30352), "S19560C16");
    check_field_offset(lv, s19560c16f0, ABISELECT(328,228), "S19560C16.s19560c16f0");
    check_field_offset(lv, s19560c16f1, ABISELECT(330,230), "S19560C16.s19560c16f1");
    check_field_offset(lv, s19560c16f2, ABISELECT(336,236), "S19560C16.s19560c16f2");
    check_field_offset(lv, s19560c16f3, ABISELECT(50416,28116), "S19560C16.s19560c16f3");
    check_field_offset(lv, s19560c16f4, ABISELECT(52112,29056), "S19560C16.s19560c16f4");
    set_bf_and_test(lv, s19560c16f5, ABISELECT(52120,29064), 0, 5, 1, "S19560C16");
    set_bf_and_test(lv, s19560c16f5, ABISELECT(52120,29064), 0, 5, hide_sll(1LL<<4), "S19560C16");
    check_field_offset(lv, s19560c16f6, ABISELECT(52124,29068), "S19560C16.s19560c16f6");
    check_field_offset(lv, s19560c16f7, ABISELECT(52128,29072), "S19560C16.s19560c16f7");
    check_field_offset(lv, s19560c16f8, ABISELECT(52176,29096), "S19560C16.s19560c16f8");
    check_field_offset(lv, s19560c16f9, ABISELECT(52192,29112), "S19560C16.s19560c16f9");
    check_field_offset(lv, s19560c16f10, ABISELECT(52200,29120), "S19560C16.s19560c16f10");
    test_class_info(&lv, &cd_S19560C16);
    dp->~S19560C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19560C16(Test_S19560C16, "S19560C16", ABISELECT(68384,38068));

#else // __cplusplus

extern void _ZN9S19560C16C1Ev();
extern void _ZN9S19560C16D2Ev();
Name_Map name_map_S19560C16[] = {
  NSPAIR(_ZN9S19560C16C1Ev),
  NSPAIR(_ZN9S19560C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C10;
extern VTBL_ENTRY _ZTI9S19560C10[];
extern  VTBL_ENTRY _ZTV9S19560C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C10[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C4;
extern VTBL_ENTRY _ZTI8S19560C4[];
extern  VTBL_ENTRY _ZTV8S19560C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C4[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C9;
extern VTBL_ENTRY _ZTI8S19560C9[];
extern  VTBL_ENTRY _ZTV8S19560C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C9[];
extern Class_Descriptor cd_S19560C13;
extern VTBL_ENTRY _ZTI9S19560C13[];
extern  VTBL_ENTRY _ZTV9S19560C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C13[];
extern Class_Descriptor cd_S19560C17;
extern VTBL_ENTRY _ZTI9S19560C17[];
extern  VTBL_ENTRY _ZTV9S19560C17[];
static Base_Class bases_S19560C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(52592,29328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(53776,29992), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19560C7,    ABISELECT(52208,29124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19560C10,    ABISELECT(52208,29124), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19560C7,    ABISELECT(53904,30064), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19560C4,    ABISELECT(54288,30268), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19560C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19560C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19560C17,    ABISELECT(54416,30352), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19560C16[];
extern void _ZN9S19560C16D1Ev();
extern void _ZN9S19560C16D0Ev();
extern void _ZN8S19560C92v6Ev();
extern void _ZN9S19560C133v10Ev();
extern void _ZN9S19560C133v11Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19560C16D1Ev,_ZTv0_n20_N9S19560C16D1Ev)();
extern void ABISELECT(_ZThn54288_N9S19560C16D1Ev,_ZThn30268_N9S19560C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19560C16D0Ev,_ZTv0_n20_N9S19560C16D0Ev)();
extern void ABISELECT(_ZThn54288_N9S19560C16D0Ev,_ZThn30268_N9S19560C16D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
extern void _ZN9S19560C173v14Ev();
static  VTBL_ENTRY vtc_S19560C16[] = {
  ABISELECT(54416,30352),
  ABISELECT(52208,29124),
  ABISELECT(54288,30268),
  ABISELECT(53776,29992),
  ABISELECT(53904,30064),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C16[0]),
  (VTBL_ENTRY)&_ZN9S19560C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19560C16D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v11Ev,
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-52208,-29124),
  (VTBL_ENTRY)&(_ZTI9S19560C16[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-53904,-30064),
  (VTBL_ENTRY)&(_ZTI9S19560C16[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  0,
  ABISELECT(-54288,-30268),
  ABISELECT(-384,-204),
  ABISELECT(-512,-276),
  ABISELECT(-54288,-30268),
  (VTBL_ENTRY)&(_ZTI9S19560C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C16D1Ev,_ZTv0_n20_N9S19560C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C16D0Ev,_ZTv0_n20_N9S19560C16D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
  0,
  ABISELECT(-54416,-30352),
  (VTBL_ENTRY)&(_ZTI9S19560C16[0]),
  (VTBL_ENTRY)&_ZN9S19560C173v14Ev,
};
extern VTBL_ENTRY _ZTV9S19560C16[];
extern void _ZN9S19560C13D1Ev();
extern void _ZN9S19560C13D0Ev();
extern void _ZN8S19560C92v6Ev();
extern void _ZN9S19560C133v10Ev();
extern void _ZN9S19560C133v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C13__9S19560C16[] = {
  ABISELECT(52208,29124),
  ABISELECT(54288,30268),
  ABISELECT(53776,29992),
  ABISELECT(53904,30064),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&_ZN9S19560C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19560C13D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v11Ev,
};
extern void _ZN8S19560C9D1Ev();
extern void _ZN8S19560C9D0Ev();
extern void _ZN8S19560C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C99S19560C13__9S19560C16[] = {
  ABISELECT(52208,29124),
  ABISELECT(54288,30268),
  ABISELECT(53776,29992),
  ABISELECT(53904,30064),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C99S19560C13__9S19560C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-53904,-30064),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev)();
extern void ABISELECT(_ZThn54288_N8S19560C9D1Ev,_ZThn30268_N8S19560C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev)();
extern void ABISELECT(_ZThn54288_N8S19560C9D0Ev,_ZThn30268_N8S19560C9D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__8S19560C99S19560C13__9S19560C16[] = {
  0,
  ABISELECT(-54288,-30268),
  ABISELECT(-384,-204),
  ABISELECT(-512,-276),
  ABISELECT(-54288,-30268),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__8S19560C99S19560C13__9S19560C16[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-52208,-29124),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__9S19560C13__9S19560C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-53904,-30064),
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19560C13D1Ev,_ZTv0_n20_N9S19560C13D1Ev)();
extern void ABISELECT(_ZThn54288_N9S19560C13D1Ev,_ZThn30268_N9S19560C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19560C13D0Ev,_ZTv0_n20_N9S19560C13D0Ev)();
extern void ABISELECT(_ZThn54288_N9S19560C13D0Ev,_ZThn30268_N9S19560C13D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__9S19560C13__9S19560C16[] = {
  0,
  ABISELECT(-54288,-30268),
  ABISELECT(-384,-204),
  ABISELECT(-512,-276),
  ABISELECT(-54288,-30268),
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C13D1Ev,_ZTv0_n20_N9S19560C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C13D0Ev,_ZTv0_n20_N9S19560C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__9S19560C13__9S19560C16[] = {
  0,
  0,
  0,
  ABISELECT(1568,868),
  ABISELECT(-52208,-29124),
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__9S19560C16[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C10[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C79S19560C10__9S19560C16[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__A1__9S19560C16[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C4D1Ev();
extern void _ZN8S19560C4D0Ev();
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__9S19560C16[] = {
  ABISELECT(-384,-204),
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C4[0]),
  (VTBL_ENTRY)&_ZN8S19560C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C4__9S19560C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S19560C4[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
static  VTT_ENTRY vtt_S19560C16[] = {
  {&(_ZTV9S19560C16[7]),  7,41},
  {&(_tg__ZTV9S19560C13__9S19560C16[6]),  6,11},
  {&(_tg__ZTV8S19560C99S19560C13__9S19560C16[6]),  6,9},
  {&(_tg__ZTV8S19560C7__8S19560C99S19560C13__9S19560C16[5]),  5,7},
  {&(_tg__ZTV8S19560C4__8S19560C99S19560C13__9S19560C16[6]),  6,9},
  {&(_tg__ZTV9S19560C10__8S19560C99S19560C13__9S19560C16[6]),  6,9},
  {&(_tg__ZTV8S19560C7__9S19560C13__9S19560C16[5]),  5,7},
  {&(_tg__ZTV8S19560C4__9S19560C13__9S19560C16[6]),  6,9},
  {&(_tg__ZTV9S19560C10__9S19560C13__9S19560C16[6]),  6,9},
  {&(_ZTV9S19560C16[18]),  18,41},
  {&(_ZTV9S19560C16[26]),  26,41},
  {&(_ZTV9S19560C16[34]),  34,41},
  {&(_ZTV9S19560C16[40]),  40,41},
  {&(_tg__ZTV9S19560C10__9S19560C16[3]),  3,6},
  {&(_tg__ZTV8S19560C79S19560C10__9S19560C16[3]),  3,5},
  {&(_tg__ZTV8S19560C7__A1__9S19560C16[3]),  3,5},
  {&(_tg__ZTV8S19560C4__9S19560C16[4]),  4,7},
  {&(_tg__ZTV8S19560C7__8S19560C4__9S19560C16[5]),  5,7},
};
extern VTBL_ENTRY _ZTI9S19560C16[];
extern  VTBL_ENTRY _ZTV9S19560C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C16[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C13D0Ev,_ZTv0_n20_N9S19560C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N9S19560C13D0Ev,_ZThn30268_N9S19560C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C13D1Ev,_ZTv0_n20_N9S19560C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N9S19560C13D1Ev,_ZThn30268_N9S19560C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N8S19560C9D0Ev,_ZThn30268_N8S19560C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N8S19560C9D1Ev,_ZThn30268_N8S19560C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C16D0Ev,_ZTv0_n20_N9S19560C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N9S19560C16D0Ev,_ZThn30268_N9S19560C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C16D1Ev,_ZTv0_n20_N9S19560C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N9S19560C16D1Ev,_ZThn30268_N9S19560C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19560C16 = {  "S19560C16", // class name
  bases_S19560C16, 10,
  &(vtc_S19560C16[0]), // expected_vtbl_contents
  &(vtt_S19560C16[0]), // expected_vtt_contents
  ABISELECT(68384,38068), // object size
  NSPAIRA(_ZTI9S19560C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19560C16),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19560C16),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19560C1  : virtual S19560C2 , S19560C16 , virtual S2489C18 {
  char s19560c1f0;
  void *s19560c1f1[5];
  void *s19560c1f2;
  int s19560c1f3;
  short s19560c1f4;
  long double s19560c1f5[8];
  virtual  ~S19560C1(); // _ZN8S19560C1D2Ev
  virtual void  v1(); // _ZN8S19560C12v1Ev
  S19560C1(); // tgen
};
//SIG(1 S19560C1) C1{ VBC2{ BC3{ VBC4{ VBC5{ m Fc Fi FL FU6{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC7{ VBC5 v2 v3 Fp Fp Fi Fi FU8{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU8 Fp FL:3 FC5 FL FU8} vd v4 FL FL FL FL Fi FU8 Fc[10] Fi} BC9{ BC5 VBC7 VBC4 VBC10{ BC5 BC7 v5 Fp FD FC5[7] FD FU6 Fs FL FL} vd v6 Fc Fi[7] Fl[5] FL FL FL FU11{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} BC5 BC7 vd v7 v8 v9 FU8 Fi Fl Fc Fp FC10 Fs} BC12{ BC5 VBC10 VBC4 BC13{ BC9 vd v10 v11 Fp Fp Fp Fi FC14{} FL FL} vd FD} BC15{ VBC10 VBC4 Fi Fp Fi FU8} BC10 vd v12 v13 Fc FL FD[4] Fi[4] Fp} BC16{ VBC10 VBC7 VBC4 BC13 VBC17{ v14 FD FC15[6] Fc Fp Fp Fi[6] Fi Fp FL Fp Fi Fp Fp} vd Fc Fs[3] FC18{ BC5 VBC19{ VBC5 v15 v16 Fp Fp Fi Fi FU8 FL:0 FD FU8 Fp FL:3 FC5 FL FU8} VBC20{ VBC5 VBC19 vd v17 FL FL FL FL Fi FU8 Fc[10] Fi} VBC21{ BC5 BC19 v18 Fp FD FC5[7] FD FU6 Fs FL FL} VBC22{ VBC20 BC23{ BC5 VBC19 VBC20 VBC21 vd v19 Fc Fi[7] Fl[5] FL FL FL FU11} BC5 BC19 vd v20 v21 v22 FU8 Fi Fl Fc Fp FC21 Fs} vd FL Fi Fp Fp FL}[10] FC10 FL FL:5 Fi Fp[6] FL[2] FL Fi} VBC24{ vd m FU6} vd v1 Fc Fp[5] Fp Fi Fs FD[8]}


 S19560C1 ::~S19560C1(){ note_dtor("S19560C1", this);}
void  S19560C1 ::v1(){vfunc_called(this, "_ZN8S19560C12v1Ev");}
S19560C1 ::S19560C1(){ note_ctor("S19560C1", this);} // tgen

static void Test_S19560C1()
{
  extern Class_Descriptor cd_S19560C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4596,10252)];
    init_test(&cd_S19560C1, buf);
    S19560C1 *dp, &lv = *(dp=new (buf) S19560C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(73520,41004), "sizeof(S19560C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19560C1)");
    check_base_class_offset(lv, (S2489C3*)(S19560C4*), ABISELECT(57376,32100), "S19560C1");
    /*is_ambiguous_... S19560C1::S19560C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C7*), ABISELECT(57376,32100), "S19560C1");
    /*is_ambiguous_... S19560C1::S19560C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C7*)(S19560C10*), ABISELECT(57376,32100), "S19560C1");
    /*is_ambiguous_... S19560C3::S19560C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C7*)(S19560C3*)(S19560C2*), ABISELECT(57376,32100), "S19560C1");
    /*is_ambiguous_... S19560C2::S19560C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C7*)(S19560C10*)(S19560C2*), ABISELECT(57376,32100), "S19560C1");
    check_base_class_offset(lv, (S19560C7*)(S19560C4*), ABISELECT(57504,32172), "S19560C1");
    /*is_ambiguous_... S19560C9::S19560C7 */ AMB_check_base_class_offset(lv, (S19560C7*)(S19560C9*)(S19560C3*)(S19560C2*), ABISELECT(57504,32172), "S19560C1");
    /*is_ambiguous_... S19560C9::S19560C7 */ AMB_check_base_class_offset(lv, (S19560C7*)(S19560C9*)(S19560C13*)(S19560C12*)(S19560C2*), ABISELECT(57504,32172), "S19560C1");
    /*is_ambiguous_... S19560C16::S19560C7 */ AMB_check_base_class_offset(lv, (S19560C7*)(S19560C16*), ABISELECT(57504,32172), "S19560C1");
    /*is_ambiguous_... S19560C9::S19560C7 */ AMB_check_base_class_offset(lv, (S19560C7*)(S19560C9*)(S19560C13*)(S19560C16*), ABISELECT(57504,32172), "S19560C1");
    check_base_class_offset(lv, (S19560C4*)(S19560C3*)(S19560C2*), ABISELECT(57256,32016), "S19560C1");
    check_base_class_offset(lv, (S19560C4*)(S19560C9*)(S19560C3*)(S19560C2*), ABISELECT(57256,32016), "S19560C1");
    check_base_class_offset(lv, (S19560C4*)(S19560C12*)(S19560C2*), ABISELECT(57256,32016), "S19560C1");
    check_base_class_offset(lv, (S19560C4*)(S19560C9*)(S19560C13*)(S19560C12*)(S19560C2*), ABISELECT(57256,32016), "S19560C1");
    check_base_class_offset(lv, (S19560C4*)(S19560C15*)(S19560C2*), ABISELECT(57256,32016), "S19560C1");
    check_base_class_offset(lv, (S19560C4*)(S19560C16*), ABISELECT(57256,32016), "S19560C1");
    check_base_class_offset(lv, (S19560C4*)(S19560C9*)(S19560C13*)(S19560C16*), ABISELECT(57256,32016), "S19560C1");
    /*is_ambiguous_... S19560C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C9*)(S19560C3*)(S19560C2*), ABISELECT(52416,29260), "S19560C1");
    /*is_ambiguous_... S19560C1::S19560C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C10*), ABISELECT(58272,32580), "S19560C1");
    /*is_ambiguous_... S19560C1::S19560C10 */ AMB_check_base_class_offset(lv, (S19560C7*)(S19560C10*), ABISELECT(57888,32376), "S19560C1");
    check_base_class_offset(lv, (S19560C10*)(S19560C9*)(S19560C3*)(S19560C2*), ABISELECT(57888,32376), "S19560C1");
    check_base_class_offset(lv, (S19560C10*)(S19560C12*)(S19560C2*), ABISELECT(57888,32376), "S19560C1");
    check_base_class_offset(lv, (S19560C10*)(S19560C9*)(S19560C13*)(S19560C12*)(S19560C2*), ABISELECT(57888,32376), "S19560C1");
    check_base_class_offset(lv, (S19560C10*)(S19560C15*)(S19560C2*), ABISELECT(57888,32376), "S19560C1");
    check_base_class_offset(lv, (S19560C10*)(S19560C16*), ABISELECT(57888,32376), "S19560C1");
    check_base_class_offset(lv, (S19560C10*)(S19560C9*)(S19560C13*)(S19560C16*), ABISELECT(57888,32376), "S19560C1");
    check_base_class_offset(lv, (S19560C9*)(S19560C3*)(S19560C2*), ABISELECT(52400,29256), "S19560C1");
    /*is_ambiguous_... S19560C3::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C3*)(S19560C2*), ABISELECT(52688,29448), "S19560C1");
    /*is_ambiguous_... S19560C3::S19560C7 */ AMB_check_base_class_offset(lv, (S19560C7*)(S19560C3*)(S19560C2*), ABISELECT(52816,29520), "S19560C1");
    check_base_class_offset(lv, (S19560C3*)(S19560C2*), ABISELECT(52400,29256), "S19560C1");
    /*is_ambiguous_... S19560C12::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C12*)(S19560C2*), ABISELECT(55344,30940), "S19560C1");
    /*is_ambiguous_... S19560C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C9*)(S19560C13*)(S19560C12*)(S19560C2*), ABISELECT(55024,30716), "S19560C1");
    check_base_class_offset(lv, (S19560C9*)(S19560C13*)(S19560C12*)(S19560C2*), ABISELECT(55008,30712), "S19560C1");
    check_base_class_offset(lv, (S19560C13*)(S19560C12*)(S19560C2*), ABISELECT(55008,30712), "S19560C1");
    check_base_class_offset(lv, (S19560C12*)(S19560C2*), ABISELECT(55008,30712), "S19560C1");
    check_base_class_offset(lv, (S19560C15*)(S19560C2*), ABISELECT(55488,31024), "S19560C1");
    /*is_ambiguous_... S19560C2::S19560C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C10*)(S19560C2*), ABISELECT(55968,31272), "S19560C1");
    /*is_ambiguous_... S19560C2::S19560C10 */ AMB_check_base_class_offset(lv, (S19560C7*)(S19560C10*)(S19560C2*), ABISELECT(55584,31068), "S19560C1");
    /*is_ambiguous_... S19560C2::S19560C10 */ AMB_check_base_class_offset(lv, (S19560C10*)(S19560C2*), ABISELECT(55584,31068), "S19560C1");
    check_base_class_offset(lv, (S19560C2*), ABISELECT(52400,29256), "S19560C1");
    /*is_ambiguous_... S19560C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19560C9*)(S19560C13*)(S19560C16*), ABISELECT(16,4), "S19560C1");
    check_base_class_offset(lv, (S19560C9*)(S19560C13*)(S19560C16*), 0, "S19560C1");
    check_base_class_offset(lv, (S19560C13*)(S19560C16*), 0, "S19560C1");
    check_base_class_offset(lv, (S19560C17*)(S19560C16*), ABISELECT(59456,33244), "S19560C1");
    check_base_class_offset(lv, (S19560C16*), 0, "S19560C1");
    check_base_class_offset(lv, (S2489C18*), ABISELECT(73424,40960), "S19560C1");
    check_field_offset(lv, s19560c1f0, ABISELECT(52204,29124), "S19560C1.s19560c1f0");
    check_field_offset(lv, s19560c1f1, ABISELECT(52208,29128), "S19560C1.s19560c1f1");
    check_field_offset(lv, s19560c1f2, ABISELECT(52248,29148), "S19560C1.s19560c1f2");
    check_field_offset(lv, s19560c1f3, ABISELECT(52256,29152), "S19560C1.s19560c1f3");
    check_field_offset(lv, s19560c1f4, ABISELECT(52260,29156), "S19560C1.s19560c1f4");
    check_field_offset(lv, s19560c1f5, ABISELECT(52272,29160), "S19560C1.s19560c1f5");
    test_class_info(&lv, &cd_S19560C1);
    dp->~S19560C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19560C1(Test_S19560C1, "S19560C1", ABISELECT(73520,41004));

#else // __cplusplus

extern void _ZN8S19560C1C1Ev();
extern void _ZN8S19560C1D2Ev();
Name_Map name_map_S19560C1[] = {
  NSPAIR(_ZN8S19560C1C1Ev),
  NSPAIR(_ZN8S19560C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C4;
extern VTBL_ENTRY _ZTI8S19560C4[];
extern  VTBL_ENTRY _ZTV8S19560C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C4[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C10;
extern VTBL_ENTRY _ZTI9S19560C10[];
extern  VTBL_ENTRY _ZTV9S19560C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C10[];
extern Class_Descriptor cd_S19560C9;
extern VTBL_ENTRY _ZTI8S19560C9[];
extern  VTBL_ENTRY _ZTV8S19560C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C9[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C3;
extern VTBL_ENTRY _ZTI8S19560C3[];
extern  VTBL_ENTRY _ZTV8S19560C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C9;
extern VTBL_ENTRY _ZTI8S19560C9[];
extern  VTBL_ENTRY _ZTV8S19560C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C9[];
extern Class_Descriptor cd_S19560C13;
extern VTBL_ENTRY _ZTI9S19560C13[];
extern  VTBL_ENTRY _ZTV9S19560C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C13[];
extern Class_Descriptor cd_S19560C12;
extern VTBL_ENTRY _ZTI9S19560C12[];
extern  VTBL_ENTRY _ZTV9S19560C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C12[];
extern Class_Descriptor cd_S19560C15;
extern VTBL_ENTRY _ZTI9S19560C15[];
extern  VTBL_ENTRY _ZTV9S19560C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C15[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C7;
extern VTBL_ENTRY _ZTI8S19560C7[];
extern  VTBL_ENTRY _ZTV8S19560C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C7[];
extern Class_Descriptor cd_S19560C10;
extern VTBL_ENTRY _ZTI9S19560C10[];
extern  VTBL_ENTRY _ZTV9S19560C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C10[];
extern Class_Descriptor cd_S19560C2;
extern VTBL_ENTRY _ZTI8S19560C2[];
extern  VTBL_ENTRY _ZTV8S19560C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C2[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19560C9;
extern VTBL_ENTRY _ZTI8S19560C9[];
extern  VTBL_ENTRY _ZTV8S19560C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C9[];
extern Class_Descriptor cd_S19560C13;
extern VTBL_ENTRY _ZTI9S19560C13[];
extern  VTBL_ENTRY _ZTV9S19560C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C13[];
extern Class_Descriptor cd_S19560C17;
extern VTBL_ENTRY _ZTI9S19560C17[];
extern  VTBL_ENTRY _ZTV9S19560C17[];
extern Class_Descriptor cd_S19560C16;
extern VTBL_ENTRY _ZTI9S19560C16[];
extern  VTBL_ENTRY _ZTV9S19560C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19560C16[];
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
static Base_Class bases_S19560C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(57376,32100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19560C7,    ABISELECT(57504,32172), //bcp->offset
    80, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19560C4,    ABISELECT(57256,32016), //bcp->offset
    71, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(52416,29260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(58272,32580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19560C7,    ABISELECT(57888,32376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19560C10,    ABISELECT(57888,32376), //bcp->offset
    87, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19560C9,    ABISELECT(52400,29256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(52688,29448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19560C7,    ABISELECT(52816,29520), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19560C3,    ABISELECT(52400,29256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(55344,30940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(55024,30716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19560C9,    ABISELECT(55008,30712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19560C13,    ABISELECT(55008,30712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19560C12,    ABISELECT(55008,30712), //bcp->offset
    46, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19560C15,    ABISELECT(55488,31024), //bcp->offset
    57, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(55968,31272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19560C7,    ABISELECT(55584,31068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19560C10,    ABISELECT(55584,31068), //bcp->offset
    65, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19560C2,    ABISELECT(52400,29256), //bcp->offset
    15, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19560C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19560C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19560C17,    ABISELECT(59456,33244), //bcp->offset
    96, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19560C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C18,    ABISELECT(73424,40960), //bcp->offset
    100, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19560C1[];
extern void _ZN8S19560C1D1Ev();
extern void _ZN8S19560C1D0Ev();
extern void _ZN8S19560C92v6Ev();
extern void _ZN9S19560C133v10Ev();
extern void _ZN9S19560C133v11Ev();
extern void _ZN8S19560C12v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S19560C1D1Ev,_ZTv0_n28_N8S19560C1D1Ev)();
extern void ABISELECT(_ZThn52400_N8S19560C1D1Ev,_ZThn29256_N8S19560C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19560C1D0Ev,_ZTv0_n28_N8S19560C1D0Ev)();
extern void ABISELECT(_ZThn52400_N8S19560C1D0Ev,_ZThn29256_N8S19560C1D0Ev)() __attribute__((weak));
extern void _ZN8S19560C92v6Ev();
extern void _ZN8S19560C32v7Ev();
extern void _ZN8S19560C32v8Ev();
extern void _ZN8S19560C32v9Ev();
extern void _ZN8S19560C23v12Ev();
extern void _ZN8S19560C23v13Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void ABISELECT(_ZTvn2608_n56_N8S19560C1D1Ev,_ZTvn1456_n28_N8S19560C1D1Ev)();
extern void ABISELECT(_ZTvn2608_n56_N8S19560C1D0Ev,_ZTvn1456_n28_N8S19560C1D0Ev)();
extern void _ZN8S19560C92v6Ev();
extern void _ZN9S19560C133v10Ev();
extern void _ZN9S19560C133v11Ev();
extern void ABISELECT(_ZTvn3088_n56_N8S19560C1D1Ev,_ZTvn1768_n28_N8S19560C1D1Ev)();
extern void ABISELECT(_ZTvn3088_n56_N8S19560C1D0Ev,_ZTvn1768_n28_N8S19560C1D0Ev)();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
extern void ABISELECT(_ZTv0_n40_N8S19560C1D1Ev,_ZTv0_n20_N8S19560C1D1Ev)();
extern void ABISELECT(_ZThn57256_N8S19560C1D1Ev,_ZThn32016_N8S19560C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19560C1D0Ev,_ZTv0_n20_N8S19560C1D0Ev)();
extern void ABISELECT(_ZThn57256_N8S19560C1D0Ev,_ZThn32016_N8S19560C1D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
extern void _ZN9S19560C173v14Ev();
extern void ABISELECT(_ZTv0_n24_N8S19560C1D1Ev,_ZTv0_n12_N8S19560C1D1Ev)();
extern void ABISELECT(_ZThn73424_N8S19560C1D1Ev,_ZThn40960_N8S19560C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19560C1D0Ev,_ZTv0_n12_N8S19560C1D0Ev)();
extern void ABISELECT(_ZThn73424_N8S19560C1D0Ev,_ZThn40960_N8S19560C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19560C1[] = {
  ABISELECT(73424,40960),
  ABISELECT(52400,29256),
  ABISELECT(59456,33244),
  ABISELECT(57888,32376),
  ABISELECT(57256,32016),
  ABISELECT(57376,32100),
  ABISELECT(57504,32172),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C1[0]),
  (VTBL_ENTRY)&_ZN8S19560C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v11Ev,
  (VTBL_ENTRY)&_ZN8S19560C12v1Ev,
  ABISELECT(3184,1812),
  ABISELECT(2608,1456),
  ABISELECT(2608,1456),
  0,
  0,
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-52400,-29256),
  ABISELECT(5488,3120),
  ABISELECT(4856,2760),
  ABISELECT(4976,2844),
  ABISELECT(5104,2916),
  ABISELECT(-52400,-29256),
  (VTBL_ENTRY)&(_ZTI8S19560C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19560C1D1Ev,_ZTv0_n28_N8S19560C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19560C1D0Ev,_ZTv0_n28_N8S19560C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN8S19560C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19560C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19560C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19560C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19560C23v13Ev,
  ABISELECT(4560,2580),
  ABISELECT(-52816,-29520),
  (VTBL_ENTRY)&(_ZTI8S19560C1[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  ABISELECT(2880,1664),
  ABISELECT(2248,1304),
  ABISELECT(2368,1388),
  ABISELECT(2496,1460),
  ABISELECT(-55008,-30712),
  (VTBL_ENTRY)&(_ZTI8S19560C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2608_n56_N8S19560C1D1Ev,_ZTvn1456_n28_N8S19560C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2608_n56_N8S19560C1D0Ev,_ZTvn1456_n28_N8S19560C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v11Ev,
  ABISELECT(2016,1148),
  ABISELECT(1768,992),
  ABISELECT(1888,1076),
  ABISELECT(2400,1352),
  ABISELECT(-55488,-31024),
  (VTBL_ENTRY)&(_ZTI8S19560C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn3088_n56_N8S19560C1D1Ev,_ZTvn1768_n28_N8S19560C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn3088_n56_N8S19560C1D0Ev,_ZTvn1768_n28_N8S19560C1D0Ev),
  ABISELECT(1792,1032),
  ABISELECT(-55584,-31068),
  (VTBL_ENTRY)&(_ZTI8S19560C1[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
  0,
  ABISELECT(-57256,-32016),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-57256,-32016),
  (VTBL_ENTRY)&(_ZTI8S19560C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C1D1Ev,_ZTv0_n20_N8S19560C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C1D0Ev,_ZTv0_n20_N8S19560C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-57504,-32172),
  (VTBL_ENTRY)&(_ZTI8S19560C1[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-57888,-32376),
  (VTBL_ENTRY)&(_ZTI8S19560C1[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
  0,
  ABISELECT(-59456,-33244),
  (VTBL_ENTRY)&(_ZTI8S19560C1[0]),
  (VTBL_ENTRY)&_ZN9S19560C173v14Ev,
  ABISELECT(-73424,-40960),
  ABISELECT(-73424,-40960),
  (VTBL_ENTRY)&(_ZTI8S19560C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19560C1D1Ev,_ZTv0_n12_N8S19560C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19560C1D0Ev,_ZTv0_n12_N8S19560C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19560C1[];
extern void _ZN9S19560C16D1Ev();
extern void _ZN9S19560C16D0Ev();
extern void _ZN8S19560C92v6Ev();
extern void _ZN9S19560C133v10Ev();
extern void _ZN9S19560C133v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C16__8S19560C1[] = {
  ABISELECT(59456,33244),
  ABISELECT(57888,32376),
  ABISELECT(57256,32016),
  ABISELECT(57376,32100),
  ABISELECT(57504,32172),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C16[0]),
  (VTBL_ENTRY)&_ZN9S19560C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19560C16D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v11Ev,
};
extern void _ZN9S19560C13D1Ev();
extern void _ZN9S19560C13D0Ev();
extern void _ZN8S19560C92v6Ev();
extern void _ZN9S19560C133v10Ev();
extern void _ZN9S19560C133v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C139S19560C16__A1__8S19560C1[] = {
  ABISELECT(57888,32376),
  ABISELECT(57256,32016),
  ABISELECT(57376,32100),
  ABISELECT(57504,32172),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&_ZN9S19560C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19560C13D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v11Ev,
};
extern void _ZN8S19560C9D1Ev();
extern void _ZN8S19560C9D0Ev();
extern void _ZN8S19560C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C99S19560C139S19560C16__A2__8S19560C1[] = {
  ABISELECT(57888,32376),
  ABISELECT(57256,32016),
  ABISELECT(57376,32100),
  ABISELECT(57504,32172),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C99S19560C139S19560C16__A2__8S19560C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-57504,-32172),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev)();
extern void ABISELECT(_ZThn57256_N8S19560C9D1Ev,_ZThn32016_N8S19560C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev)();
extern void ABISELECT(_ZThn57256_N8S19560C9D0Ev,_ZThn32016_N8S19560C9D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__8S19560C99S19560C139S19560C16__A2__8S19560C1[] = {
  0,
  ABISELECT(-57256,-32016),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-57256,-32016),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__8S19560C99S19560C139S19560C16__A2__8S19560C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-57888,-32376),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__9S19560C139S19560C16__A1__8S19560C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-57504,-32172),
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19560C13D1Ev,_ZTv0_n20_N9S19560C13D1Ev)();
extern void ABISELECT(_ZThn57256_N9S19560C13D1Ev,_ZThn32016_N9S19560C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19560C13D0Ev,_ZTv0_n20_N9S19560C13D0Ev)();
extern void ABISELECT(_ZThn57256_N9S19560C13D0Ev,_ZThn32016_N9S19560C13D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__9S19560C139S19560C16__A1__8S19560C1[] = {
  0,
  ABISELECT(-57256,-32016),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-57256,-32016),
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C13D1Ev,_ZTv0_n20_N9S19560C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C13D0Ev,_ZTv0_n20_N9S19560C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__9S19560C139S19560C16__A1__8S19560C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-57888,-32376),
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__9S19560C16__8S19560C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-57888,-32376),
  (VTBL_ENTRY)&(_ZTI9S19560C16[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__A1__9S19560C16__8S19560C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-57504,-32172),
  (VTBL_ENTRY)&(_ZTI9S19560C16[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19560C16D1Ev,_ZTv0_n20_N9S19560C16D1Ev)();
extern void ABISELECT(_ZThn57256_N9S19560C16D1Ev,_ZThn32016_N9S19560C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19560C16D0Ev,_ZTv0_n20_N9S19560C16D0Ev)();
extern void ABISELECT(_ZThn57256_N9S19560C16D0Ev,_ZThn32016_N9S19560C16D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__9S19560C16__8S19560C1[] = {
  0,
  ABISELECT(-57256,-32016),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-57256,-32016),
  (VTBL_ENTRY)&(_ZTI9S19560C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C16D1Ev,_ZTv0_n20_N9S19560C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C16D0Ev,_ZTv0_n20_N9S19560C16D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN9S19560C173v14Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C17__9S19560C16__8S19560C1[] = {
  0,
  ABISELECT(-59456,-33244),
  (VTBL_ENTRY)&(_ZTI9S19560C16[0]),
  (VTBL_ENTRY)&_ZN9S19560C173v14Ev,
};
extern void _ZN8S19560C2D1Ev();
extern void _ZN8S19560C2D0Ev();
extern void _ZN8S19560C92v6Ev();
extern void _ZN8S19560C32v7Ev();
extern void _ZN8S19560C32v8Ev();
extern void _ZN8S19560C32v9Ev();
extern void _ZN8S19560C23v12Ev();
extern void _ZN8S19560C23v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C2__8S19560C1[] = {
  ABISELECT(5488,3120),
  ABISELECT(4856,2760),
  ABISELECT(4976,2844),
  ABISELECT(5104,2916),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C2[0]),
  (VTBL_ENTRY)&_ZN8S19560C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN8S19560C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19560C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19560C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19560C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19560C23v13Ev,
};
extern void _ZN8S19560C3D1Ev();
extern void _ZN8S19560C3D0Ev();
extern void _ZN8S19560C92v6Ev();
extern void _ZN8S19560C32v7Ev();
extern void _ZN8S19560C32v8Ev();
extern void _ZN8S19560C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C38S19560C2__8S19560C1[] = {
  ABISELECT(5488,3120),
  ABISELECT(4856,2760),
  ABISELECT(4976,2844),
  ABISELECT(5104,2916),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C3[0]),
  (VTBL_ENTRY)&_ZN8S19560C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN8S19560C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19560C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19560C32v9Ev,
};
extern void _ZN8S19560C9D1Ev();
extern void _ZN8S19560C9D0Ev();
extern void _ZN8S19560C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C98S19560C38S19560C2__8S19560C1[] = {
  ABISELECT(5488,3120),
  ABISELECT(4856,2760),
  ABISELECT(4976,2844),
  ABISELECT(5104,2916),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C98S19560C38S19560C2__8S19560C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-5104,-2916),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev)();
extern void ABISELECT(_ZThn4856_N8S19560C9D1Ev,_ZThn2760_N8S19560C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev)();
extern void ABISELECT(_ZThn4856_N8S19560C9D0Ev,_ZThn2760_N8S19560C9D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__8S19560C98S19560C38S19560C2__8S19560C1[] = {
  0,
  ABISELECT(-4856,-2760),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-4856,-2760),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__8S19560C98S19560C38S19560C2__8S19560C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-5488,-3120),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C78S19560C38S19560C2__A2__8S19560C1[] = {
  ABISELECT(4560,2580),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19560C3D1Ev,_ZTv0_n20_N8S19560C3D1Ev)();
extern void ABISELECT(_ZThn4856_N8S19560C3D1Ev,_ZThn2760_N8S19560C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19560C3D0Ev,_ZTv0_n20_N8S19560C3D0Ev)();
extern void ABISELECT(_ZThn4856_N8S19560C3D0Ev,_ZThn2760_N8S19560C3D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__8S19560C38S19560C2__8S19560C1[] = {
  0,
  ABISELECT(-4856,-2760),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-4856,-2760),
  (VTBL_ENTRY)&(_ZTI8S19560C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C3D1Ev,_ZTv0_n20_N8S19560C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C3D0Ev,_ZTv0_n20_N8S19560C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C38S19560C2__8S19560C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-5104,-2916),
  (VTBL_ENTRY)&(_ZTI8S19560C3[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__8S19560C38S19560C2__8S19560C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-5488,-3120),
  (VTBL_ENTRY)&(_ZTI8S19560C3[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__A__8S19560C38S19560C2__8S19560C1[] = {
  ABISELECT(4560,2580),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S19560C3[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN9S19560C12D1Ev();
extern void _ZN9S19560C12D0Ev();
extern void _ZN8S19560C92v6Ev();
extern void _ZN9S19560C133v10Ev();
extern void _ZN9S19560C133v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C128S19560C2__8S19560C1[] = {
  ABISELECT(2880,1664),
  ABISELECT(2248,1304),
  ABISELECT(2368,1388),
  ABISELECT(2496,1460),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C12[0]),
  (VTBL_ENTRY)&_ZN9S19560C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19560C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v11Ev,
};
extern void _ZN9S19560C13D1Ev();
extern void _ZN9S19560C13D0Ev();
extern void _ZN8S19560C92v6Ev();
extern void _ZN9S19560C133v10Ev();
extern void _ZN9S19560C133v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C139S19560C128S19560C2__8S19560C1[] = {
  ABISELECT(2880,1664),
  ABISELECT(2248,1304),
  ABISELECT(2368,1388),
  ABISELECT(2496,1460),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&_ZN9S19560C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19560C13D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v11Ev,
};
extern void _ZN8S19560C9D1Ev();
extern void _ZN8S19560C9D0Ev();
extern void _ZN8S19560C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C99S19560C139S19560C128S19560C2__A1__8S19560C1[] = {
  ABISELECT(2880,1664),
  ABISELECT(2248,1304),
  ABISELECT(2368,1388),
  ABISELECT(2496,1460),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C99S19560C139S19560C128S19560C2__A1__8S19560C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2496,-1460),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev)();
extern void ABISELECT(_ZThn2248_N8S19560C9D1Ev,_ZThn1304_N8S19560C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev)();
extern void ABISELECT(_ZThn2248_N8S19560C9D0Ev,_ZThn1304_N8S19560C9D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__8S19560C99S19560C139S19560C128S19560C2__A1__8S19560C1[] = {
  0,
  ABISELECT(-2248,-1304),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-2248,-1304),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__8S19560C99S19560C139S19560C128S19560C2__A1__8S19560C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-2880,-1664),
  (VTBL_ENTRY)&(_ZTI8S19560C9[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__9S19560C139S19560C128S19560C2__8S19560C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2496,-1460),
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19560C13D1Ev,_ZTv0_n20_N9S19560C13D1Ev)();
extern void ABISELECT(_ZThn2248_N9S19560C13D1Ev,_ZThn1304_N9S19560C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19560C13D0Ev,_ZTv0_n20_N9S19560C13D0Ev)();
extern void ABISELECT(_ZThn2248_N9S19560C13D0Ev,_ZThn1304_N9S19560C13D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__9S19560C139S19560C128S19560C2__8S19560C1[] = {
  0,
  ABISELECT(-2248,-1304),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-2248,-1304),
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C13D1Ev,_ZTv0_n20_N9S19560C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C13D0Ev,_ZTv0_n20_N9S19560C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__9S19560C139S19560C128S19560C2__8S19560C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-2880,-1664),
  (VTBL_ENTRY)&(_ZTI9S19560C13[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__9S19560C128S19560C2__8S19560C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-2880,-1664),
  (VTBL_ENTRY)&(_ZTI9S19560C12[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19560C12D1Ev,_ZTv0_n20_N9S19560C12D1Ev)();
extern void ABISELECT(_ZThn2248_N9S19560C12D1Ev,_ZThn1304_N9S19560C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19560C12D0Ev,_ZTv0_n20_N9S19560C12D0Ev)();
extern void ABISELECT(_ZThn2248_N9S19560C12D0Ev,_ZThn1304_N9S19560C12D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__9S19560C128S19560C2__8S19560C1[] = {
  0,
  ABISELECT(-2248,-1304),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-2248,-1304),
  (VTBL_ENTRY)&(_ZTI9S19560C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C12D1Ev,_ZTv0_n20_N9S19560C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C12D0Ev,_ZTv0_n20_N9S19560C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__A1__9S19560C128S19560C2__8S19560C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2496,-1460),
  (VTBL_ENTRY)&(_ZTI9S19560C12[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN9S19560C15D1Ev();
extern void _ZN9S19560C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C158S19560C2__8S19560C1[] = {
  ABISELECT(2016,1148),
  ABISELECT(1768,992),
  ABISELECT(1888,1076),
  ABISELECT(2400,1352),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C15[0]),
  (VTBL_ENTRY)&_ZN9S19560C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19560C15D0Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__9S19560C158S19560C2__8S19560C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-2400,-1352),
  (VTBL_ENTRY)&(_ZTI9S19560C15[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19560C15D1Ev,_ZTv0_n20_N9S19560C15D1Ev)();
extern void ABISELECT(_ZThn1768_N9S19560C15D1Ev,_ZThn992_N9S19560C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19560C15D0Ev,_ZTv0_n20_N9S19560C15D0Ev)();
extern void ABISELECT(_ZThn1768_N9S19560C15D0Ev,_ZThn992_N9S19560C15D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__9S19560C158S19560C2__8S19560C1[] = {
  0,
  ABISELECT(-1768,-992),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-1768,-992),
  (VTBL_ENTRY)&(_ZTI9S19560C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C15D1Ev,_ZTv0_n20_N9S19560C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19560C15D0Ev,_ZTv0_n20_N9S19560C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__A1__9S19560C158S19560C2__8S19560C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2016,-1148),
  (VTBL_ENTRY)&(_ZTI9S19560C15[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C108S19560C2__A1__8S19560C1[] = {
  ABISELECT(1792,1032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C10[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C79S19560C108S19560C2__A3__8S19560C1[] = {
  ABISELECT(1792,1032),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19560C2D1Ev,_ZTv0_n20_N8S19560C2D1Ev)();
extern void ABISELECT(_ZThn4856_N8S19560C2D1Ev,_ZThn2760_N8S19560C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19560C2D0Ev,_ZTv0_n20_N8S19560C2D0Ev)();
extern void ABISELECT(_ZThn4856_N8S19560C2D0Ev,_ZThn2760_N8S19560C2D0Ev)() __attribute__((weak));
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__8S19560C2__8S19560C1[] = {
  0,
  ABISELECT(-4856,-2760),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-4856,-2760),
  (VTBL_ENTRY)&(_ZTI8S19560C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C2D1Ev,_ZTv0_n20_N8S19560C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19560C2D0Ev,_ZTv0_n20_N8S19560C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C2__8S19560C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-5104,-2916),
  (VTBL_ENTRY)&(_ZTI8S19560C2[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__8S19560C2__8S19560C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-5488,-3120),
  (VTBL_ENTRY)&(_ZTI8S19560C2[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C78S19560C3__A2__8S19560C2__8S19560C1[] = {
  ABISELECT(4560,2580),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI8S19560C2[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void ABISELECT(_ZThn2608_N8S19560C2D1Ev,_ZThn1456_N8S19560C2D1Ev)();
extern void ABISELECT(_ZThn2608_N8S19560C2D0Ev,_ZThn1456_N8S19560C2D0Ev)();
extern void _ZN8S19560C92v6Ev();
extern void _ZN9S19560C133v10Ev();
extern void _ZN9S19560C133v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C12__8S19560C2__8S19560C1[] = {
  ABISELECT(2880,1664),
  ABISELECT(2248,1304),
  ABISELECT(2368,1388),
  ABISELECT(2496,1460),
  ABISELECT(-2608,-1456),
  (VTBL_ENTRY)&(_ZTI8S19560C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2608_N8S19560C2D1Ev,_ZThn1456_N8S19560C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2608_N8S19560C2D0Ev,_ZThn1456_N8S19560C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19560C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19560C133v11Ev,
};
extern void ABISELECT(_ZThn3088_N8S19560C2D1Ev,_ZThn1768_N8S19560C2D1Ev)();
extern void ABISELECT(_ZThn3088_N8S19560C2D0Ev,_ZThn1768_N8S19560C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19560C15__8S19560C2__8S19560C1[] = {
  ABISELECT(2016,1148),
  ABISELECT(1768,992),
  ABISELECT(1888,1076),
  ABISELECT(2400,1352),
  ABISELECT(-3088,-1768),
  (VTBL_ENTRY)&(_ZTI8S19560C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3088_N8S19560C2D1Ev,_ZThn1768_N8S19560C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3088_N8S19560C2D0Ev,_ZThn1768_N8S19560C2D0Ev),
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__A__8S19560C2__8S19560C1[] = {
  ABISELECT(1792,1032),
  ABISELECT(-3184,-1812),
  (VTBL_ENTRY)&(_ZTI8S19560C2[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C4D1Ev();
extern void _ZN8S19560C4D0Ev();
extern void _ZN8S19560C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C4__8S19560C1[] = {
  ABISELECT(248,156),
  ABISELECT(120,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C4[0]),
  (VTBL_ENTRY)&_ZN8S19560C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19560C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19560C42v4Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C4__8S19560C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-248,-156),
  (VTBL_ENTRY)&(_ZTI8S19560C4[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C7__8S19560C1[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
extern void _ZN9S19560C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19560C10__8S19560C1[] = {
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI9S19560C10[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19560C102v5Ev,
};
extern void _ZN8S19560C72v2Ev();
extern void _ZN8S19560C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19560C79S19560C10__A1__8S19560C1[] = {
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S19560C7[0]),
  (VTBL_ENTRY)&_ZN8S19560C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19560C72v3Ev,
};
static  VTT_ENTRY vtt_S19560C1[] = {
  {&(_ZTV8S19560C1[9]),  9,105},
  {&(_tg__ZTV9S19560C16__8S19560C1[7]),  7,12},
  {&(_tg__ZTV9S19560C139S19560C16__A1__8S19560C1[6]),  6,11},
  {&(_tg__ZTV8S19560C99S19560C139S19560C16__A2__8S19560C1[6]),  6,9},
  {&(_tg__ZTV8S19560C7__8S19560C99S19560C139S19560C16__A2__8S19560C1[5]),  5,7},
  {&(_tg__ZTV8S19560C4__8S19560C99S19560C139S19560C16__A2__8S19560C1[6]),  6,9},
  {&(_tg__ZTV9S19560C10__8S19560C99S19560C139S19560C16__A2__8S19560C1[6]),  6,9},
  {&(_tg__ZTV8S19560C7__9S19560C139S19560C16__A1__8S19560C1[5]),  5,7},
  {&(_tg__ZTV8S19560C4__9S19560C139S19560C16__A1__8S19560C1[6]),  6,9},
  {&(_tg__ZTV9S19560C10__9S19560C139S19560C16__A1__8S19560C1[6]),  6,9},
  {&(_tg__ZTV9S19560C10__9S19560C16__8S19560C1[6]),  6,9},
  {&(_tg__ZTV8S19560C7__A1__9S19560C16__8S19560C1[5]),  5,7},
  {&(_tg__ZTV8S19560C4__9S19560C16__8S19560C1[6]),  6,9},
  {&(_tg__ZTV9S19560C17__9S19560C16__8S19560C1[3]),  3,4},
  {&(_ZTV8S19560C1[33]),  33,105},
  {&(_ZTV8S19560C1[77]),  77,105},
  {&(_ZTV8S19560C1[85]),  85,105},
  {&(_ZTV8S19560C1[93]),  93,105},
  {&(_ZTV8S19560C1[44]),  44,105},
  {&(_ZTV8S19560C1[52]),  52,105},
  {&(_ZTV8S19560C1[63]),  63,105},
  {&(_ZTV8S19560C1[68]),  68,105},
  {&(_ZTV8S19560C1[99]),  99,105},
  {&(_ZTV8S19560C1[103]),  103,105},
  {&(_tg__ZTV8S19560C2__8S19560C1[6]),  6,14},
  {&(_tg__ZTV8S19560C38S19560C2__8S19560C1[6]),  6,12},
  {&(_tg__ZTV8S19560C98S19560C38S19560C2__8S19560C1[6]),  6,9},
  {&(_tg__ZTV8S19560C7__8S19560C98S19560C38S19560C2__8S19560C1[5]),  5,7},
  {&(_tg__ZTV8S19560C4__8S19560C98S19560C38S19560C2__8S19560C1[6]),  6,9},
  {&(_tg__ZTV9S19560C10__8S19560C98S19560C38S19560C2__8S19560C1[6]),  6,9},
  {&(_tg__ZTV8S19560C78S19560C38S19560C2__A2__8S19560C1[3]),  3,5},
  {&(_tg__ZTV8S19560C4__8S19560C38S19560C2__8S19560C1[6]),  6,9},
  {&(_tg__ZTV8S19560C7__8S19560C38S19560C2__8S19560C1[5]),  5,7},
  {&(_tg__ZTV9S19560C10__8S19560C38S19560C2__8S19560C1[6]),  6,9},
  {&(_tg__ZTV8S19560C7__A__8S19560C38S19560C2__8S19560C1[3]),  3,5},
  {&(_tg__ZTV9S19560C128S19560C2__8S19560C1[6]),  6,11},
  {&(_tg__ZTV9S19560C139S19560C128S19560C2__8S19560C1[6]),  6,11},
  {&(_tg__ZTV8S19560C99S19560C139S19560C128S19560C2__A1__8S19560C1[6]),  6,9},
  {&(_tg__ZTV8S19560C7__8S19560C99S19560C139S19560C128S19560C2__A1__8S19560C1[5]),  5,7},
  {&(_tg__ZTV8S19560C4__8S19560C99S19560C139S19560C128S19560C2__A1__8S19560C1[6]),  6,9},
  {&(_tg__ZTV9S19560C10__8S19560C99S19560C139S19560C128S19560C2__A1__8S19560C1[6]),  6,9},
  {&(_tg__ZTV8S19560C7__9S19560C139S19560C128S19560C2__8S19560C1[5]),  5,7},
  {&(_tg__ZTV8S19560C4__9S19560C139S19560C128S19560C2__8S19560C1[6]),  6,9},
  {&(_tg__ZTV9S19560C10__9S19560C139S19560C128S19560C2__8S19560C1[6]),  6,9},
  {&(_tg__ZTV9S19560C10__9S19560C128S19560C2__8S19560C1[6]),  6,9},
  {&(_tg__ZTV8S19560C4__9S19560C128S19560C2__8S19560C1[6]),  6,9},
  {&(_tg__ZTV8S19560C7__A1__9S19560C128S19560C2__8S19560C1[5]),  5,7},
  {&(_tg__ZTV9S19560C158S19560C2__8S19560C1[6]),  6,8},
  {&(_tg__ZTV9S19560C10__9S19560C158S19560C2__8S19560C1[6]),  6,9},
  {&(_tg__ZTV8S19560C4__9S19560C158S19560C2__8S19560C1[6]),  6,9},
  {&(_tg__ZTV8S19560C7__A1__9S19560C158S19560C2__8S19560C1[5]),  5,7},
  {&(_tg__ZTV9S19560C108S19560C2__A1__8S19560C1[3]),  3,6},
  {&(_tg__ZTV8S19560C79S19560C108S19560C2__A3__8S19560C1[3]),  3,5},
  {&(_tg__ZTV8S19560C4__8S19560C2__8S19560C1[6]),  6,9},
  {&(_tg__ZTV8S19560C7__8S19560C2__8S19560C1[5]),  5,7},
  {&(_tg__ZTV9S19560C10__8S19560C2__8S19560C1[6]),  6,9},
  {&(_tg__ZTV8S19560C78S19560C3__A2__8S19560C2__8S19560C1[3]),  3,5},
  {&(_tg__ZTV9S19560C12__8S19560C2__8S19560C1[6]),  6,11},
  {&(_tg__ZTV9S19560C15__8S19560C2__8S19560C1[6]),  6,8},
  {&(_tg__ZTV9S19560C10__A__8S19560C2__8S19560C1[3]),  3,6},
  {&(_tg__ZTV8S19560C4__8S19560C1[4]),  4,7},
  {&(_tg__ZTV8S19560C7__8S19560C4__8S19560C1[5]),  5,7},
  {&(_tg__ZTV8S19560C7__8S19560C1[3]),  3,5},
  {&(_tg__ZTV9S19560C10__8S19560C1[3]),  3,6},
  {&(_tg__ZTV8S19560C79S19560C10__A1__8S19560C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19560C1[];
extern  VTBL_ENTRY _ZTV8S19560C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19560C1[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C2D0Ev,_ZTv0_n20_N8S19560C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19560C2D0Ev,_ZThn2760_N8S19560C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C2D1Ev,_ZTv0_n20_N8S19560C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19560C2D1Ev,_ZThn2760_N8S19560C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C15D0Ev,_ZTv0_n20_N9S19560C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1768_N9S19560C15D0Ev,_ZThn992_N9S19560C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C15D1Ev,_ZTv0_n20_N9S19560C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1768_N9S19560C15D1Ev,_ZThn992_N9S19560C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C12D0Ev,_ZTv0_n20_N9S19560C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N9S19560C12D0Ev,_ZThn1304_N9S19560C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C12D1Ev,_ZTv0_n20_N9S19560C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N9S19560C12D1Ev,_ZThn1304_N9S19560C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C3D0Ev,_ZTv0_n20_N8S19560C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19560C3D0Ev,_ZThn2760_N8S19560C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C3D1Ev,_ZTv0_n20_N8S19560C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19560C3D1Ev,_ZThn2760_N8S19560C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C16D0Ev,_ZTv0_n20_N9S19560C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn57256_N9S19560C16D0Ev,_ZThn32016_N9S19560C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C16D1Ev,_ZTv0_n20_N9S19560C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn57256_N9S19560C16D1Ev,_ZThn32016_N9S19560C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C13D0Ev,_ZTv0_n20_N9S19560C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N9S19560C13D0Ev,_ZThn1304_N9S19560C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn57256_N9S19560C13D0Ev,_ZThn32016_N9S19560C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19560C13D1Ev,_ZTv0_n20_N9S19560C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N9S19560C13D1Ev,_ZThn1304_N9S19560C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn57256_N9S19560C13D1Ev,_ZThn32016_N9S19560C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C9D0Ev,_ZTv0_n20_N8S19560C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N8S19560C9D0Ev,_ZThn1304_N8S19560C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19560C9D0Ev,_ZThn2760_N8S19560C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn57256_N8S19560C9D0Ev,_ZThn32016_N8S19560C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C9D1Ev,_ZTv0_n20_N8S19560C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N8S19560C9D1Ev,_ZThn1304_N8S19560C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19560C9D1Ev,_ZThn2760_N8S19560C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn57256_N8S19560C9D1Ev,_ZThn32016_N8S19560C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19560C1D0Ev,_ZTv0_n12_N8S19560C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn73424_N8S19560C1D0Ev,_ZThn40960_N8S19560C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19560C1D1Ev,_ZTv0_n12_N8S19560C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn73424_N8S19560C1D1Ev,_ZThn40960_N8S19560C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C1D0Ev,_ZTv0_n20_N8S19560C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn57256_N8S19560C1D0Ev,_ZThn32016_N8S19560C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19560C1D1Ev,_ZTv0_n20_N8S19560C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn57256_N8S19560C1D1Ev,_ZThn32016_N8S19560C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19560C1D0Ev,_ZTv0_n28_N8S19560C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52400_N8S19560C1D0Ev,_ZThn29256_N8S19560C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19560C1D1Ev,_ZTv0_n28_N8S19560C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52400_N8S19560C1D1Ev,_ZThn29256_N8S19560C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19560C1 = {  "S19560C1", // class name
  bases_S19560C1, 27,
  &(vtc_S19560C1[0]), // expected_vtbl_contents
  &(vtt_S19560C1[0]), // expected_vtt_contents
  ABISELECT(73520,41004), // object size
  NSPAIRA(_ZTI8S19560C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19560C1),105, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19560C1),65, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19559C7  : virtual S2489C3 {
  void *s19559c7f0;
  void *s19559c7f1;
  int s19559c7f2;
  int s19559c7f3;
  ::S2489C7 s19559c7f4;
  __tsi64  :0;
  long double s19559c7f6;
  ::S2489C7 s19559c7f7;
  void *s19559c7f8;
  __tsi64 s19559c7f9:3;
  ::S2489C3 s19559c7f10;
  long s19559c7f11;
  ::S2489C7 s19559c7f12;
  virtual void  v2(); // _ZN8S19559C72v2Ev
  virtual void  v3(); // _ZN8S19559C72v3Ev
  ~S19559C7(); // tgen
  S19559C7(); // tgen
};
//SIG(-1 S19559C7) C1{ VBC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} v1 v2 Fp Fp Fi Fi FU4{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU4 Fp FL:3 FC2 Fl FU4}


void  S19559C7 ::v2(){vfunc_called(this, "_ZN8S19559C72v2Ev");}
void  S19559C7 ::v3(){vfunc_called(this, "_ZN8S19559C72v3Ev");}
S19559C7 ::~S19559C7(){ note_dtor("S19559C7", this);} // tgen
S19559C7 ::S19559C7(){ note_ctor("S19559C7", this);} // tgen

static void Test_S19559C7()
{
  extern Class_Descriptor cd_S19559C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,69)];
    init_test(&cd_S19559C7, buf);
    S19559C7 *dp, &lv = *(dp=new (buf) S19559C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,272), "sizeof(S19559C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19559C7)");
    check_base_class_offset(lv, (S2489C3*), ABISELECT(384,200), "S19559C7");
    check_field_offset(lv, s19559c7f0, ABISELECT(8,4), "S19559C7.s19559c7f0");
    check_field_offset(lv, s19559c7f1, ABISELECT(16,8), "S19559C7.s19559c7f1");
    check_field_offset(lv, s19559c7f2, ABISELECT(24,12), "S19559C7.s19559c7f2");
    check_field_offset(lv, s19559c7f3, ABISELECT(28,16), "S19559C7.s19559c7f3");
    check_field_offset(lv, s19559c7f4, ABISELECT(32,20), "S19559C7.s19559c7f4");
    check_field_offset(lv, s19559c7f6, ABISELECT(96,48), "S19559C7.s19559c7f6");
    check_field_offset(lv, s19559c7f7, ABISELECT(112,60), "S19559C7.s19559c7f7");
    check_field_offset(lv, s19559c7f8, ABISELECT(168,88), "S19559C7.s19559c7f8");
    set_bf_and_test(lv, s19559c7f9, ABISELECT(176,92), 0, 3, 1, "S19559C7");
    set_bf_and_test(lv, s19559c7f9, ABISELECT(176,92), 0, 3, hide_sll(1LL<<2), "S19559C7");
    check_field_offset(lv, s19559c7f10, ABISELECT(192,96), "S19559C7.s19559c7f10");
    check_field_offset(lv, s19559c7f11, ABISELECT(320,168), "S19559C7.s19559c7f11");
    check_field_offset(lv, s19559c7f12, ABISELECT(328,172), "S19559C7.s19559c7f12");
    test_class_info(&lv, &cd_S19559C7);
    dp->~S19559C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19559C7(Test_S19559C7, "S19559C7", ABISELECT(512,272));

#else // __cplusplus

extern void _ZN8S19559C7C1Ev();
extern void _ZN8S19559C7D1Ev();
Name_Map name_map_S19559C7[] = {
  NSPAIR(_ZN8S19559C7C1Ev),
  NSPAIR(_ZN8S19559C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
static Base_Class bases_S19559C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(384,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19559C7[];
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY vtc_S19559C7[] = {
  ABISELECT(384,200),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern VTBL_ENTRY _ZTV8S19559C7[];
static  VTT_ENTRY vtt_S19559C7[] = {
  {&(_ZTV8S19559C7[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
Class_Descriptor cd_S19559C7 = {  "S19559C7", // class name
  bases_S19559C7, 1,
  &(vtc_S19559C7[0]), // expected_vtbl_contents
  &(vtt_S19559C7[0]), // expected_vtt_contents
  ABISELECT(512,272), // object size
  NSPAIRA(_ZTI8S19559C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19559C7),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19559C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19559C4  : virtual S2489C3 , virtual S19559C7 {
  __tsi64 s19559c4f0;
  __tsi64 s19559c4f1;
  __tsi64 s19559c4f2;
  long s19559c4f3;
  int s19559c4f4;
  ::S2489C7 s19559c4f5;
  char s19559c4f6[10];
  int s19559c4f7;
  virtual  ~S19559C4(); // _ZN8S19559C4D2Ev
  virtual void  v4(); // _ZN8S19559C42v4Ev
  S19559C4(); // tgen
};
//SIG(-1 S19559C4) C1{ VBC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 Fl FU5} vd v1 FL FL FL Fl Fi FU5 Fc[10] Fi}


 S19559C4 ::~S19559C4(){ note_dtor("S19559C4", this);}
void  S19559C4 ::v4(){vfunc_called(this, "_ZN8S19559C42v4Ev");}
S19559C4 ::S19559C4(){ note_ctor("S19559C4", this);} // tgen

static void Test_S19559C4()
{
  extern Class_Descriptor cd_S19559C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,89)];
    init_test(&cd_S19559C4, buf);
    S19559C4 *dp, &lv = *(dp=new (buf) S19559C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,352), "sizeof(S19559C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19559C4)");
    check_base_class_offset(lv, (S2489C3*), ABISELECT(128,80), "S19559C4");
    check_base_class_offset(lv, (S2489C3*)(S19559C7*), ABISELECT(128,80), "S19559C4");
    check_base_class_offset(lv, (S19559C7*), ABISELECT(256,152), "S19559C4");
    check_field_offset(lv, s19559c4f0, ABISELECT(8,4), "S19559C4.s19559c4f0");
    check_field_offset(lv, s19559c4f1, ABISELECT(16,12), "S19559C4.s19559c4f1");
    check_field_offset(lv, s19559c4f2, ABISELECT(24,20), "S19559C4.s19559c4f2");
    check_field_offset(lv, s19559c4f3, ABISELECT(32,28), "S19559C4.s19559c4f3");
    check_field_offset(lv, s19559c4f4, ABISELECT(40,32), "S19559C4.s19559c4f4");
    check_field_offset(lv, s19559c4f5, ABISELECT(48,36), "S19559C4.s19559c4f5");
    check_field_offset(lv, s19559c4f6, ABISELECT(104,64), "S19559C4.s19559c4f6");
    check_field_offset(lv, s19559c4f7, ABISELECT(116,76), "S19559C4.s19559c4f7");
    test_class_info(&lv, &cd_S19559C4);
    dp->~S19559C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19559C4(Test_S19559C4, "S19559C4", ABISELECT(640,352));

#else // __cplusplus

extern void _ZN8S19559C4C1Ev();
extern void _ZN8S19559C4D2Ev();
Name_Map name_map_S19559C4[] = {
  NSPAIR(_ZN8S19559C4C1Ev),
  NSPAIR(_ZN8S19559C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
static Base_Class bases_S19559C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19559C7,    ABISELECT(256,152), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19559C4[];
extern void _ZN8S19559C4D1Ev();
extern void _ZN8S19559C4D0Ev();
extern void _ZN8S19559C42v4Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY vtc_S19559C4[] = {
  ABISELECT(256,152),
  ABISELECT(128,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C4[0]),
  (VTBL_ENTRY)&_ZN8S19559C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI8S19559C4[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern VTBL_ENTRY _ZTV8S19559C4[];
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C4[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
static  VTT_ENTRY vtt_S19559C4[] = {
  {&(_ZTV8S19559C4[4]),  4,14},
  {&(_ZTV8S19559C4[12]),  12,14},
  {&(_tg__ZTV8S19559C7__8S19559C4[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19559C4[];
extern  VTBL_ENTRY _ZTV8S19559C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C4[];
Class_Descriptor cd_S19559C4 = {  "S19559C4", // class name
  bases_S19559C4, 2,
  &(vtc_S19559C4[0]), // expected_vtbl_contents
  &(vtt_S19559C4[0]), // expected_vtt_contents
  ABISELECT(640,352), // object size
  NSPAIRA(_ZTI8S19559C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19559C4),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19559C4),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19559C10  : S2489C3 , S19559C7 {
  void *s19559c10f0;
  long double s19559c10f1;
  ::S2489C3 s19559c10f2[7];
  long double s19559c10f3;
  ::S2489C4 s19559c10f4;
  short s19559c10f5;
  long s19559c10f6;
  long s19559c10f7;
  virtual void  v5(); // _ZN9S19559C102v5Ev
  ~S19559C10(); // tgen
  S19559C10(); // tgen
};
//SIG(-1 S19559C10) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 Fl FU5} v1 Fp FD FC2[7] FD FU3 Fs Fl Fl}


void  S19559C10 ::v5(){vfunc_called(this, "_ZN9S19559C102v5Ev");}
S19559C10 ::~S19559C10(){ note_dtor("S19559C10", this);} // tgen
S19559C10 ::S19559C10(){ note_ctor("S19559C10", this);} // tgen

static void Test_S19559C10()
{
  extern Class_Descriptor cd_S19559C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(107,233)];
    init_test(&cd_S19559C10, buf);
    S19559C10 *dp, &lv = *(dp=new (buf) S19559C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1696,928), "sizeof(S19559C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19559C10)");
    /*is_ambiguous_... S19559C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(384,200), "S19559C10");
    check_base_class_offset(lv, (S2489C3*)(S19559C7*), ABISELECT(1568,856), "S19559C10");
    check_base_class_offset(lv, (S19559C7*), 0, "S19559C10");
    check_field_offset(lv, s19559c10f0, ABISELECT(512,272), "S19559C10.s19559c10f0");
    check_field_offset(lv, s19559c10f1, ABISELECT(528,276), "S19559C10.s19559c10f1");
    check_field_offset(lv, s19559c10f2, ABISELECT(544,288), "S19559C10.s19559c10f2");
    check_field_offset(lv, s19559c10f3, ABISELECT(1440,792), "S19559C10.s19559c10f3");
    check_field_offset(lv, s19559c10f4, ABISELECT(1456,804), "S19559C10.s19559c10f4");
    check_field_offset(lv, s19559c10f5, ABISELECT(1536,844), "S19559C10.s19559c10f5");
    check_field_offset(lv, s19559c10f6, ABISELECT(1544,848), "S19559C10.s19559c10f6");
    check_field_offset(lv, s19559c10f7, ABISELECT(1552,852), "S19559C10.s19559c10f7");
    test_class_info(&lv, &cd_S19559C10);
    dp->~S19559C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19559C10(Test_S19559C10, "S19559C10", ABISELECT(1696,928));

#else // __cplusplus

extern void _ZN9S19559C10C1Ev();
extern void _ZN9S19559C10D1Ev();
Name_Map name_map_S19559C10[] = {
  NSPAIR(_ZN9S19559C10C1Ev),
  NSPAIR(_ZN9S19559C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
static Base_Class bases_S19559C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(384,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(1568,856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19559C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19559C10[];
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY vtc_S19559C10[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C10[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern VTBL_ENTRY _ZTV9S19559C10[];
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__9S19559C10[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
static  VTT_ENTRY vtt_S19559C10[] = {
  {&(_ZTV9S19559C10[3]),  3,6},
  {&(_tg__ZTV8S19559C7__9S19559C10[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19559C10[];
extern  VTBL_ENTRY _ZTV9S19559C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C10[];
Class_Descriptor cd_S19559C10 = {  "S19559C10", // class name
  bases_S19559C10, 3,
  &(vtc_S19559C10[0]), // expected_vtbl_contents
  &(vtt_S19559C10[0]), // expected_vtt_contents
  ABISELECT(1696,928), // object size
  NSPAIRA(_ZTI9S19559C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19559C10),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19559C10),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19559C9  : S2489C3 , virtual S19559C7 , virtual S19559C4 , virtual S19559C10 {
  char s19559c9f0;
  int s19559c9f1[7];
  long s19559c9f2[5];
  long s19559c9f3;
  __tsi64 s19559c9f4;
  __tsi64 s19559c9f5;
  ::S2488C11 s19559c9f6;
  virtual  ~S19559C9(); // _ZN8S19559C9D2Ev
  virtual void  v6(); // _ZN8S19559C92v6Ev
  S19559C9(); // tgen
};
//SIG(-1 S19559C9) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 Fl FU5} VBC6{ VBC2 VBC4 vd v4 FL FL FL Fl Fi FU5 Fc[10] Fi} VBC7{ BC2 BC4 v5 Fp FD FC2[7] FD FU3 Fs Fl Fl} vd v1 Fc Fi[7] Fl[5] Fl FL FL FU8{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}}


 S19559C9 ::~S19559C9(){ note_dtor("S19559C9", this);}
void  S19559C9 ::v6(){vfunc_called(this, "_ZN8S19559C92v6Ev");}
S19559C9 ::S19559C9(){ note_ctor("S19559C9", this);} // tgen

static void Test_S19559C9()
{
  extern Class_Descriptor cd_S19559C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(157,345)];
    init_test(&cd_S19559C9, buf);
    S19559C9 *dp, &lv = *(dp=new (buf) S19559C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2496,1376), "sizeof(S19559C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19559C9)");
    /*is_ambiguous_... S19559C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(16,4), "S19559C9");
    /*is_ambiguous_... S19559C9::S19559C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C7*), ABISELECT(672,368), "S19559C9");
    check_base_class_offset(lv, (S2489C3*)(S19559C4*), ABISELECT(672,368), "S19559C9");
    check_base_class_offset(lv, (S2489C3*)(S19559C7*)(S19559C10*), ABISELECT(672,368), "S19559C9");
    /*is_ambiguous_... S19559C9::S19559C7 */ AMB_check_base_class_offset(lv, (S19559C7*), ABISELECT(288,168), "S19559C9");
    check_base_class_offset(lv, (S19559C7*)(S19559C4*), ABISELECT(288,168), "S19559C9");
    check_base_class_offset(lv, (S19559C4*), ABISELECT(800,440), "S19559C9");
    /*is_ambiguous_... S19559C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C10*), ABISELECT(1312,720), "S19559C9");
    check_base_class_offset(lv, (S19559C7*)(S19559C10*), ABISELECT(928,520), "S19559C9");
    check_base_class_offset(lv, (S19559C10*), ABISELECT(928,520), "S19559C9");
    check_field_offset(lv, s19559c9f0, ABISELECT(144,76), "S19559C9.s19559c9f0");
    check_field_offset(lv, s19559c9f1, ABISELECT(148,80), "S19559C9.s19559c9f1");
    check_field_offset(lv, s19559c9f2, ABISELECT(176,108), "S19559C9.s19559c9f2");
    check_field_offset(lv, s19559c9f3, ABISELECT(216,128), "S19559C9.s19559c9f3");
    check_field_offset(lv, s19559c9f4, ABISELECT(224,132), "S19559C9.s19559c9f4");
    check_field_offset(lv, s19559c9f5, ABISELECT(232,140), "S19559C9.s19559c9f5");
    check_field_offset(lv, s19559c9f6, ABISELECT(240,148), "S19559C9.s19559c9f6");
    test_class_info(&lv, &cd_S19559C9);
    dp->~S19559C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19559C9(Test_S19559C9, "S19559C9", ABISELECT(2496,1376));

#else // __cplusplus

extern void _ZN8S19559C9C1Ev();
extern void _ZN8S19559C9D2Ev();
Name_Map name_map_S19559C9[] = {
  NSPAIR(_ZN8S19559C9C1Ev),
  NSPAIR(_ZN8S19559C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C4;
extern VTBL_ENTRY _ZTI8S19559C4[];
extern  VTBL_ENTRY _ZTV8S19559C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C4[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C10;
extern VTBL_ENTRY _ZTI9S19559C10[];
extern  VTBL_ENTRY _ZTV9S19559C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C10[];
static Base_Class bases_S19559C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(672,368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19559C7,    ABISELECT(288,168), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19559C4,    ABISELECT(800,440), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(1312,720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19559C7,    ABISELECT(928,520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19559C10,    ABISELECT(928,520), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19559C9[];
extern void _ZN8S19559C9D1Ev();
extern void _ZN8S19559C9D0Ev();
extern void _ZN8S19559C92v6Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev)();
extern void ABISELECT(_ZThn800_N8S19559C9D1Ev,_ZThn440_N8S19559C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev)();
extern void ABISELECT(_ZThn800_N8S19559C9D0Ev,_ZThn440_N8S19559C9D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY vtc_S19559C9[] = {
  ABISELECT(928,520),
  ABISELECT(800,440),
  ABISELECT(672,368),
  ABISELECT(288,168),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  0,
  ABISELECT(-800,-440),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-800,-440),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-928,-520),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S19559C9[];
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C9[] = {
  ABISELECT(384,200),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C4D1Ev();
extern void _ZN8S19559C4D0Ev();
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__8S19559C9[] = {
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C4[0]),
  (VTBL_ENTRY)&_ZN8S19559C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C4__8S19559C9[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(512,272),
  (VTBL_ENTRY)&(_ZTI8S19559C4[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__8S19559C9[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C10[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C79S19559C10__A1__8S19559C9[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
static  VTT_ENTRY vtt_S19559C9[] = {
  {&(_ZTV8S19559C9[6]),  6,34},
  {&(_ZTV8S19559C9[14]),  14,34},
  {&(_ZTV8S19559C9[22]),  22,34},
  {&(_ZTV8S19559C9[31]),  31,34},
  {&(_tg__ZTV8S19559C7__8S19559C9[3]),  3,5},
  {&(_tg__ZTV8S19559C4__8S19559C9[4]),  4,7},
  {&(_tg__ZTV8S19559C7__8S19559C4__8S19559C9[5]),  5,7},
  {&(_tg__ZTV9S19559C10__8S19559C9[3]),  3,6},
  {&(_tg__ZTV8S19559C79S19559C10__A1__8S19559C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19559C9[];
extern  VTBL_ENTRY _ZTV8S19559C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C9[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S19559C9D0Ev,_ZThn440_N8S19559C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S19559C9D1Ev,_ZThn440_N8S19559C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19559C9 = {  "S19559C9", // class name
  bases_S19559C9, 7,
  &(vtc_S19559C9[0]), // expected_vtbl_contents
  &(vtt_S19559C9[0]), // expected_vtt_contents
  ABISELECT(2496,1376), // object size
  NSPAIRA(_ZTI8S19559C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19559C9),34, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19559C9),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19559C3  : virtual S19559C4 , S19559C9 , S2489C3 , S19559C7 {
  ::S2489C7 s19559c3f0;
  int s19559c3f1;
  long s19559c3f2;
  char s19559c3f3;
  void *s19559c3f4;
  ::S19559C10 s19559c3f5;
  short s19559c3f6;
  virtual  ~S19559C3(); // _ZN8S19559C3D2Ev
  virtual void  v7(); // _ZN8S19559C32v7Ev
  virtual void  v8(); // _ZN8S19559C32v8Ev
  virtual void  v9(); // _ZN8S19559C32v9Ev
  S19559C3(); // tgen
};
//SIG(-1 S19559C3) C1{ VBC2{ VBC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC5{ VBC3 v4 v5 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 Fl FU6} vd v6 FL FL FL Fl Fi FU6 Fc[10] Fi} BC7{ BC3 VBC5 VBC2 VBC8{ BC3 BC5 v7 Fp FD FC3[7] FD FU4 Fs Fl Fl} vd v8 Fc Fi[7] Fl[5] Fl FL FL FU9{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} BC3 BC5 vd v1 v2 v3 FU6 Fi Fl Fc Fp FC8 Fs}


 S19559C3 ::~S19559C3(){ note_dtor("S19559C3", this);}
void  S19559C3 ::v7(){vfunc_called(this, "_ZN8S19559C32v7Ev");}
void  S19559C3 ::v8(){vfunc_called(this, "_ZN8S19559C32v8Ev");}
void  S19559C3 ::v9(){vfunc_called(this, "_ZN8S19559C32v9Ev");}
S19559C3 ::S19559C3(){ note_ctor("S19559C3", this);} // tgen

static void Test_S19559C3()
{
  extern Class_Descriptor cd_S19559C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(301,657)];
    init_test(&cd_S19559C3, buf);
    S19559C3 *dp, &lv = *(dp=new (buf) S19559C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4800,2624), "sizeof(S19559C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19559C3)");
    check_base_class_offset(lv, (S2489C3*)(S19559C4*), ABISELECT(2720,1496), "S19559C3");
    /*is_ambiguous_... S19559C3::S19559C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C7*), ABISELECT(2720,1496), "S19559C3");
    check_base_class_offset(lv, (S2489C3*)(S19559C7*)(S19559C10*), ABISELECT(2720,1496), "S19559C3");
    /*is_ambiguous_... S19559C3::S19559C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C7*), ABISELECT(2720,1496), "S19559C3");
    check_base_class_offset(lv, (S19559C7*)(S19559C4*), ABISELECT(2848,1568), "S19559C3");
    /*is_ambiguous_... S19559C9::S19559C7 */ AMB_check_base_class_offset(lv, (S19559C7*)(S19559C9*), ABISELECT(2848,1568), "S19559C3");
    check_base_class_offset(lv, (S19559C4*), ABISELECT(2600,1416), "S19559C3");
    check_base_class_offset(lv, (S19559C4*)(S19559C9*), ABISELECT(2600,1416), "S19559C3");
    /*is_ambiguous_... S19559C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C9*), ABISELECT(16,4), "S19559C3");
    /*is_ambiguous_... S19559C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C10*), ABISELECT(3616,1968), "S19559C3");
    check_base_class_offset(lv, (S19559C7*)(S19559C10*), ABISELECT(3232,1768), "S19559C3");
    check_base_class_offset(lv, (S19559C10*)(S19559C9*), ABISELECT(3232,1768), "S19559C3");
    check_base_class_offset(lv, (S19559C9*), 0, "S19559C3");
    /*is_ambiguous_... S19559C3::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(288,168), "S19559C3");
    /*is_ambiguous_... S19559C3::S19559C7 */ AMB_check_base_class_offset(lv, (S19559C7*), ABISELECT(416,240), "S19559C3");
    check_field_offset(lv, s19559c3f0, ABISELECT(800,440), "S19559C3.s19559c3f0");
    check_field_offset(lv, s19559c3f1, ABISELECT(856,468), "S19559C3.s19559c3f1");
    check_field_offset(lv, s19559c3f2, ABISELECT(864,472), "S19559C3.s19559c3f2");
    check_field_offset(lv, s19559c3f3, ABISELECT(872,476), "S19559C3.s19559c3f3");
    check_field_offset(lv, s19559c3f4, ABISELECT(880,480), "S19559C3.s19559c3f4");
    check_field_offset(lv, s19559c3f5, ABISELECT(896,484), "S19559C3.s19559c3f5");
    check_field_offset(lv, s19559c3f6, ABISELECT(2592,1412), "S19559C3.s19559c3f6");
    test_class_info(&lv, &cd_S19559C3);
    dp->~S19559C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19559C3(Test_S19559C3, "S19559C3", ABISELECT(4800,2624));

#else // __cplusplus

extern void _ZN8S19559C3C1Ev();
extern void _ZN8S19559C3D2Ev();
Name_Map name_map_S19559C3[] = {
  NSPAIR(_ZN8S19559C3C1Ev),
  NSPAIR(_ZN8S19559C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C4;
extern VTBL_ENTRY _ZTI8S19559C4[];
extern  VTBL_ENTRY _ZTV8S19559C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C4[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C10;
extern VTBL_ENTRY _ZTI9S19559C10[];
extern  VTBL_ENTRY _ZTV9S19559C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C10[];
extern Class_Descriptor cd_S19559C9;
extern VTBL_ENTRY _ZTI8S19559C9[];
extern  VTBL_ENTRY _ZTV8S19559C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C9[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
static Base_Class bases_S19559C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(2720,1496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19559C7,    ABISELECT(2848,1568), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19559C4,    ABISELECT(2600,1416), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(3616,1968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19559C7,    ABISELECT(3232,1768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19559C10,    ABISELECT(3232,1768), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19559C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(288,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19559C7,    ABISELECT(416,240), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19559C3[];
extern void _ZN8S19559C3D1Ev();
extern void _ZN8S19559C3D0Ev();
extern void _ZN8S19559C92v6Ev();
extern void _ZN8S19559C32v7Ev();
extern void _ZN8S19559C32v8Ev();
extern void _ZN8S19559C32v9Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19559C3D1Ev,_ZTv0_n20_N8S19559C3D1Ev)();
extern void ABISELECT(_ZThn2600_N8S19559C3D1Ev,_ZThn1416_N8S19559C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19559C3D0Ev,_ZTv0_n20_N8S19559C3D0Ev)();
extern void ABISELECT(_ZThn2600_N8S19559C3D0Ev,_ZThn1416_N8S19559C3D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY vtc_S19559C3[] = {
  ABISELECT(3232,1768),
  ABISELECT(2600,1416),
  ABISELECT(2720,1496),
  ABISELECT(2848,1568),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C3[0]),
  (VTBL_ENTRY)&_ZN8S19559C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN8S19559C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19559C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19559C32v9Ev,
  ABISELECT(2304,1256),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S19559C3[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  0,
  ABISELECT(-2600,-1416),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-2600,-1416),
  (VTBL_ENTRY)&(_ZTI8S19559C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C3D1Ev,_ZTv0_n20_N8S19559C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C3D0Ev,_ZTv0_n20_N8S19559C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2848,-1568),
  (VTBL_ENTRY)&(_ZTI8S19559C3[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-3232,-1768),
  (VTBL_ENTRY)&(_ZTI8S19559C3[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S19559C3[];
extern void _ZN8S19559C9D1Ev();
extern void _ZN8S19559C9D0Ev();
extern void _ZN8S19559C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C9__8S19559C3[] = {
  ABISELECT(3232,1768),
  ABISELECT(2600,1416),
  ABISELECT(2720,1496),
  ABISELECT(2848,1568),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C9__8S19559C3[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2848,-1568),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev)();
extern void ABISELECT(_ZThn2600_N8S19559C9D1Ev,_ZThn1416_N8S19559C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev)();
extern void ABISELECT(_ZThn2600_N8S19559C9D0Ev,_ZThn1416_N8S19559C9D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__8S19559C9__8S19559C3[] = {
  0,
  ABISELECT(-2600,-1416),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-2600,-1416),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__8S19559C9__8S19559C3[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-3232,-1768),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__A__8S19559C3[] = {
  ABISELECT(2304,1256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C4D1Ev();
extern void _ZN8S19559C4D0Ev();
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__8S19559C3[] = {
  ABISELECT(248,152),
  ABISELECT(120,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C4[0]),
  (VTBL_ENTRY)&_ZN8S19559C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C4__8S19559C3[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-248,-152),
  (VTBL_ENTRY)&(_ZTI8S19559C4[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C3[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__8S19559C3[] = {
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C10[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C79S19559C10__A1__8S19559C3[] = {
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
static  VTT_ENTRY vtt_S19559C3[] = {
  {&(_ZTV8S19559C3[6]),  6,42},
  {&(_tg__ZTV8S19559C9__8S19559C3[6]),  6,9},
  {&(_tg__ZTV8S19559C7__8S19559C9__8S19559C3[5]),  5,7},
  {&(_tg__ZTV8S19559C4__8S19559C9__8S19559C3[6]),  6,9},
  {&(_tg__ZTV9S19559C10__8S19559C9__8S19559C3[6]),  6,9},
  {&(_tg__ZTV8S19559C7__A__8S19559C3[3]),  3,5},
  {&(_ZTV8S19559C3[23]),  23,42},
  {&(_ZTV8S19559C3[31]),  31,42},
  {&(_ZTV8S19559C3[39]),  39,42},
  {&(_ZTV8S19559C3[15]),  15,42},
  {&(_tg__ZTV8S19559C4__8S19559C3[4]),  4,7},
  {&(_tg__ZTV8S19559C7__8S19559C4__8S19559C3[5]),  5,7},
  {&(_tg__ZTV8S19559C7__8S19559C3[3]),  3,5},
  {&(_tg__ZTV9S19559C10__8S19559C3[3]),  3,6},
  {&(_tg__ZTV8S19559C79S19559C10__A1__8S19559C3[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19559C3[];
extern  VTBL_ENTRY _ZTV8S19559C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C3[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N8S19559C9D0Ev,_ZThn1416_N8S19559C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N8S19559C9D1Ev,_ZThn1416_N8S19559C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C3D0Ev,_ZTv0_n20_N8S19559C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N8S19559C3D0Ev,_ZThn1416_N8S19559C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C3D1Ev,_ZTv0_n20_N8S19559C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N8S19559C3D1Ev,_ZThn1416_N8S19559C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19559C3 = {  "S19559C3", // class name
  bases_S19559C3, 10,
  &(vtc_S19559C3[0]), // expected_vtbl_contents
  &(vtt_S19559C3[0]), // expected_vtt_contents
  ABISELECT(4800,2624), // object size
  NSPAIRA(_ZTI8S19559C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19559C3),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19559C3),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19559C13  : S19559C9 {
  void *s19559c13f0;
  void *s19559c13f1;
  void *s19559c13f2;
  int s19559c13f3;
  ::S2489C12_nt s19559c13f4;
  long s19559c13f5;
  long s19559c13f6;
  virtual  ~S19559C13(); // _ZN9S19559C13D2Ev
  virtual void  v10(); // _ZN9S19559C133v10Ev
  virtual void  v11(); // _ZN9S19559C133v11Ev
  S19559C13(); // tgen
};
//SIG(-1 S19559C13) C1{ BC2{ BC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC5{ VBC3 v3 v4 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 Fl FU6} VBC7{ VBC3 VBC5 vd v5 FL FL FL Fl Fi FU6 Fc[10] Fi} VBC8{ BC3 BC5 v6 Fp FD FC3[7] FD FU4 Fs Fl Fl} vd v7 Fc Fi[7] Fl[5] Fl FL FL FU9{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} vd v1 v2 Fp Fp Fp Fi FC10{} Fl Fl}


 S19559C13 ::~S19559C13(){ note_dtor("S19559C13", this);}
void  S19559C13 ::v10(){vfunc_called(this, "_ZN9S19559C133v10Ev");}
void  S19559C13 ::v11(){vfunc_called(this, "_ZN9S19559C133v11Ev");}
S19559C13 ::S19559C13(){ note_ctor("S19559C13", this);} // tgen

static void Test_S19559C13()
{
  extern Class_Descriptor cd_S19559C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(160,352)];
    init_test(&cd_S19559C13, buf);
    S19559C13 *dp, &lv = *(dp=new (buf) S19559C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2544,1404), "sizeof(S19559C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19559C13)");
    /*is_ambiguous_... S19559C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C9*), ABISELECT(16,4), "S19559C13");
    /*is_ambiguous_... S19559C13::S19559C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C7*), ABISELECT(720,396), "S19559C13");
    check_base_class_offset(lv, (S2489C3*)(S19559C4*), ABISELECT(720,396), "S19559C13");
    check_base_class_offset(lv, (S2489C3*)(S19559C7*)(S19559C10*), ABISELECT(720,396), "S19559C13");
    /*is_ambiguous_... S19559C9::S19559C7 */ AMB_check_base_class_offset(lv, (S19559C7*)(S19559C9*), ABISELECT(336,196), "S19559C13");
    check_base_class_offset(lv, (S19559C7*)(S19559C4*), ABISELECT(336,196), "S19559C13");
    check_base_class_offset(lv, (S19559C4*)(S19559C9*), ABISELECT(848,468), "S19559C13");
    /*is_ambiguous_... S19559C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C10*), ABISELECT(1360,748), "S19559C13");
    check_base_class_offset(lv, (S19559C7*)(S19559C10*), ABISELECT(976,548), "S19559C13");
    check_base_class_offset(lv, (S19559C10*)(S19559C9*), ABISELECT(976,548), "S19559C13");
    check_base_class_offset(lv, (S19559C9*), 0, "S19559C13");
    check_field_offset(lv, s19559c13f0, ABISELECT(280,168), "S19559C13.s19559c13f0");
    check_field_offset(lv, s19559c13f1, ABISELECT(288,172), "S19559C13.s19559c13f1");
    check_field_offset(lv, s19559c13f2, ABISELECT(296,176), "S19559C13.s19559c13f2");
    check_field_offset(lv, s19559c13f3, ABISELECT(304,180), "S19559C13.s19559c13f3");
    check_field_offset(lv, s19559c13f4, ABISELECT(308,184), "S19559C13.s19559c13f4");
    check_field_offset(lv, s19559c13f5, ABISELECT(312,188), "S19559C13.s19559c13f5");
    check_field_offset(lv, s19559c13f6, ABISELECT(320,192), "S19559C13.s19559c13f6");
    test_class_info(&lv, &cd_S19559C13);
    dp->~S19559C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19559C13(Test_S19559C13, "S19559C13", ABISELECT(2544,1404));

#else // __cplusplus

extern void _ZN9S19559C13C1Ev();
extern void _ZN9S19559C13D2Ev();
Name_Map name_map_S19559C13[] = {
  NSPAIR(_ZN9S19559C13C1Ev),
  NSPAIR(_ZN9S19559C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C4;
extern VTBL_ENTRY _ZTI8S19559C4[];
extern  VTBL_ENTRY _ZTV8S19559C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C4[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C10;
extern VTBL_ENTRY _ZTI9S19559C10[];
extern  VTBL_ENTRY _ZTV9S19559C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C10[];
extern Class_Descriptor cd_S19559C9;
extern VTBL_ENTRY _ZTI8S19559C9[];
extern  VTBL_ENTRY _ZTV8S19559C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C9[];
static Base_Class bases_S19559C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(720,396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19559C7,    ABISELECT(336,196), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19559C4,    ABISELECT(848,468), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(1360,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19559C7,    ABISELECT(976,548), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19559C10,    ABISELECT(976,548), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19559C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19559C13[];
extern void _ZN9S19559C13D1Ev();
extern void _ZN9S19559C13D0Ev();
extern void _ZN8S19559C92v6Ev();
extern void _ZN9S19559C133v10Ev();
extern void _ZN9S19559C133v11Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19559C13D1Ev,_ZTv0_n20_N9S19559C13D1Ev)();
extern void ABISELECT(_ZThn848_N9S19559C13D1Ev,_ZThn468_N9S19559C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19559C13D0Ev,_ZTv0_n20_N9S19559C13D0Ev)();
extern void ABISELECT(_ZThn848_N9S19559C13D0Ev,_ZThn468_N9S19559C13D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY vtc_S19559C13[] = {
  ABISELECT(976,548),
  ABISELECT(848,468),
  ABISELECT(720,396),
  ABISELECT(336,196),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&_ZN9S19559C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19559C13D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v11Ev,
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-336,-196),
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  0,
  ABISELECT(-848,-468),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-848,-468),
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C13D1Ev,_ZTv0_n20_N9S19559C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C13D0Ev,_ZTv0_n20_N9S19559C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-976,-548),
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern VTBL_ENTRY _ZTV9S19559C13[];
extern void _ZN8S19559C9D1Ev();
extern void _ZN8S19559C9D0Ev();
extern void _ZN8S19559C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C9__9S19559C13[] = {
  ABISELECT(976,548),
  ABISELECT(848,468),
  ABISELECT(720,396),
  ABISELECT(336,196),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C9__9S19559C13[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-336,-196),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev)();
extern void ABISELECT(_ZThn848_N8S19559C9D1Ev,_ZThn468_N8S19559C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev)();
extern void ABISELECT(_ZThn848_N8S19559C9D0Ev,_ZThn468_N8S19559C9D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__8S19559C9__9S19559C13[] = {
  0,
  ABISELECT(-848,-468),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-848,-468),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__8S19559C9__9S19559C13[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-976,-548),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__9S19559C13[] = {
  ABISELECT(384,200),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C4D1Ev();
extern void _ZN8S19559C4D0Ev();
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__9S19559C13[] = {
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C4[0]),
  (VTBL_ENTRY)&_ZN8S19559C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C4__9S19559C13[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(512,272),
  (VTBL_ENTRY)&(_ZTI8S19559C4[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__9S19559C13[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C10[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C79S19559C10__A1__9S19559C13[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
static  VTT_ENTRY vtt_S19559C13[] = {
  {&(_ZTV9S19559C13[6]),  6,36},
  {&(_tg__ZTV8S19559C9__9S19559C13[6]),  6,9},
  {&(_tg__ZTV8S19559C7__8S19559C9__9S19559C13[5]),  5,7},
  {&(_tg__ZTV8S19559C4__8S19559C9__9S19559C13[6]),  6,9},
  {&(_tg__ZTV9S19559C10__8S19559C9__9S19559C13[6]),  6,9},
  {&(_ZTV9S19559C13[16]),  16,36},
  {&(_ZTV9S19559C13[24]),  24,36},
  {&(_ZTV9S19559C13[33]),  33,36},
  {&(_tg__ZTV8S19559C7__9S19559C13[3]),  3,5},
  {&(_tg__ZTV8S19559C4__9S19559C13[4]),  4,7},
  {&(_tg__ZTV8S19559C7__8S19559C4__9S19559C13[5]),  5,7},
  {&(_tg__ZTV9S19559C10__9S19559C13[3]),  3,6},
  {&(_tg__ZTV8S19559C79S19559C10__A1__9S19559C13[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19559C13[];
extern  VTBL_ENTRY _ZTV9S19559C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C13[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19559C9D0Ev,_ZThn468_N8S19559C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19559C9D1Ev,_ZThn468_N8S19559C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C13D0Ev,_ZTv0_n20_N9S19559C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N9S19559C13D0Ev,_ZThn468_N9S19559C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C13D1Ev,_ZTv0_n20_N9S19559C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N9S19559C13D1Ev,_ZThn468_N9S19559C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19559C13 = {  "S19559C13", // class name
  bases_S19559C13, 8,
  &(vtc_S19559C13[0]), // expected_vtbl_contents
  &(vtt_S19559C13[0]), // expected_vtt_contents
  ABISELECT(2544,1404), // object size
  NSPAIRA(_ZTI9S19559C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19559C13),36, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19559C13),13, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19559C12  : S2489C3 , virtual S19559C10 , virtual S19559C4 , S19559C13 {
  long double s19559c12f0;
  virtual  ~S19559C12(); // _ZN9S19559C12D2Ev
  S19559C12(); // tgen
};
//SIG(-1 S19559C12) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ BC2 BC5{ VBC2 v1 v2 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC2 Fl FU6} v3 Fp FD FC2[7] FD FU3 Fs Fl Fl} VBC7{ VBC2 VBC5 vd v4 FL FL FL Fl Fi FU6 Fc[10] Fi} BC8{ BC9{ BC2 VBC5 VBC7 VBC4 vd v5 Fc Fi[7] Fl[5] Fl FL FL FU10{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} vd v6 v7 Fp Fp Fp Fi FC11{} Fl Fl} vd FD}


 S19559C12 ::~S19559C12(){ note_dtor("S19559C12", this);}
S19559C12 ::S19559C12(){ note_ctor("S19559C12", this);} // tgen

static void Test_S19559C12()
{
  extern Class_Descriptor cd_S19559C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(169,373)];
    init_test(&cd_S19559C12, buf);
    S19559C12 *dp, &lv = *(dp=new (buf) S19559C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2688,1488), "sizeof(S19559C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19559C12)");
    /*is_ambiguous_... S19559C12::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(336,196), "S19559C12");
    /*is_ambiguous_... S19559C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C10*), ABISELECT(864,480), "S19559C12");
    check_base_class_offset(lv, (S2489C3*)(S19559C7*)(S19559C10*), ABISELECT(2048,1136), "S19559C12");
    check_base_class_offset(lv, (S2489C3*)(S19559C4*), ABISELECT(2048,1136), "S19559C12");
    /*is_ambiguous_... S19559C12::S19559C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C7*), ABISELECT(2048,1136), "S19559C12");
    check_base_class_offset(lv, (S19559C7*)(S19559C10*), ABISELECT(480,280), "S19559C12");
    check_base_class_offset(lv, (S19559C10*), ABISELECT(480,280), "S19559C12");
    check_base_class_offset(lv, (S19559C10*)(S19559C9*)(S19559C13*), ABISELECT(480,280), "S19559C12");
    check_base_class_offset(lv, (S19559C7*)(S19559C4*), ABISELECT(2304,1288), "S19559C12");
    /*is_ambiguous_... S19559C9::S19559C7 */ AMB_check_base_class_offset(lv, (S19559C7*)(S19559C9*)(S19559C13*), ABISELECT(2304,1288), "S19559C12");
    check_base_class_offset(lv, (S19559C4*), ABISELECT(2176,1208), "S19559C12");
    check_base_class_offset(lv, (S19559C4*)(S19559C9*)(S19559C13*), ABISELECT(2176,1208), "S19559C12");
    /*is_ambiguous_... S19559C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C9*)(S19559C13*), ABISELECT(16,4), "S19559C12");
    check_base_class_offset(lv, (S19559C9*)(S19559C13*), 0, "S19559C12");
    check_base_class_offset(lv, (S19559C13*), 0, "S19559C12");
    check_field_offset(lv, s19559c12f0, ABISELECT(464,268), "S19559C12.s19559c12f0");
    test_class_info(&lv, &cd_S19559C12);
    dp->~S19559C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19559C12(Test_S19559C12, "S19559C12", ABISELECT(2688,1488));

#else // __cplusplus

extern void _ZN9S19559C12C1Ev();
extern void _ZN9S19559C12D2Ev();
Name_Map name_map_S19559C12[] = {
  NSPAIR(_ZN9S19559C12C1Ev),
  NSPAIR(_ZN9S19559C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C10;
extern VTBL_ENTRY _ZTI9S19559C10[];
extern  VTBL_ENTRY _ZTV9S19559C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C10[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C4;
extern VTBL_ENTRY _ZTI8S19559C4[];
extern  VTBL_ENTRY _ZTV8S19559C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C4[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C9;
extern VTBL_ENTRY _ZTI8S19559C9[];
extern  VTBL_ENTRY _ZTV8S19559C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C9[];
extern Class_Descriptor cd_S19559C13;
extern VTBL_ENTRY _ZTI9S19559C13[];
extern  VTBL_ENTRY _ZTV9S19559C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C13[];
static Base_Class bases_S19559C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(336,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(864,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(2048,1136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19559C7,    ABISELECT(480,280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19559C10,    ABISELECT(480,280), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19559C7,    ABISELECT(2304,1288), //bcp->offset
    29, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19559C4,    ABISELECT(2176,1208), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19559C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19559C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19559C12[];
extern void _ZN9S19559C12D1Ev();
extern void _ZN9S19559C12D0Ev();
extern void _ZN8S19559C92v6Ev();
extern void _ZN9S19559C133v10Ev();
extern void _ZN9S19559C133v11Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
extern void ABISELECT(_ZTv0_n40_N9S19559C12D1Ev,_ZTv0_n20_N9S19559C12D1Ev)();
extern void ABISELECT(_ZThn2176_N9S19559C12D1Ev,_ZThn1208_N9S19559C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19559C12D0Ev,_ZTv0_n20_N9S19559C12D0Ev)();
extern void ABISELECT(_ZThn2176_N9S19559C12D0Ev,_ZThn1208_N9S19559C12D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY vtc_S19559C12[] = {
  ABISELECT(480,280),
  ABISELECT(2176,1208),
  ABISELECT(2048,1136),
  ABISELECT(2304,1288),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C12[0]),
  (VTBL_ENTRY)&_ZN9S19559C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19559C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v11Ev,
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-480,-280),
  (VTBL_ENTRY)&(_ZTI9S19559C12[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
  0,
  ABISELECT(-2176,-1208),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(-2176,-1208),
  (VTBL_ENTRY)&(_ZTI9S19559C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C12D1Ev,_ZTv0_n20_N9S19559C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C12D0Ev,_ZTv0_n20_N9S19559C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-2304,-1288),
  (VTBL_ENTRY)&(_ZTI9S19559C12[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern VTBL_ENTRY _ZTV9S19559C12[];
extern void _ZN9S19559C13D1Ev();
extern void _ZN9S19559C13D0Ev();
extern void _ZN8S19559C92v6Ev();
extern void _ZN9S19559C133v10Ev();
extern void _ZN9S19559C133v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C13__9S19559C12[] = {
  ABISELECT(480,280),
  ABISELECT(2176,1208),
  ABISELECT(2048,1136),
  ABISELECT(2304,1288),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&_ZN9S19559C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19559C13D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v11Ev,
};
extern void _ZN8S19559C9D1Ev();
extern void _ZN8S19559C9D0Ev();
extern void _ZN8S19559C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C99S19559C13__9S19559C12[] = {
  ABISELECT(480,280),
  ABISELECT(2176,1208),
  ABISELECT(2048,1136),
  ABISELECT(2304,1288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C99S19559C13__9S19559C12[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-2304,-1288),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev)();
extern void ABISELECT(_ZThn2176_N8S19559C9D1Ev,_ZThn1208_N8S19559C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev)();
extern void ABISELECT(_ZThn2176_N8S19559C9D0Ev,_ZThn1208_N8S19559C9D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__8S19559C99S19559C13__9S19559C12[] = {
  0,
  ABISELECT(-2176,-1208),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(-2176,-1208),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__8S19559C99S19559C13__9S19559C12[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-480,-280),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__9S19559C13__9S19559C12[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-2304,-1288),
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19559C13D1Ev,_ZTv0_n20_N9S19559C13D1Ev)();
extern void ABISELECT(_ZThn2176_N9S19559C13D1Ev,_ZThn1208_N9S19559C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19559C13D0Ev,_ZTv0_n20_N9S19559C13D0Ev)();
extern void ABISELECT(_ZThn2176_N9S19559C13D0Ev,_ZThn1208_N9S19559C13D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__9S19559C13__9S19559C12[] = {
  0,
  ABISELECT(-2176,-1208),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(-2176,-1208),
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C13D1Ev,_ZTv0_n20_N9S19559C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C13D0Ev,_ZTv0_n20_N9S19559C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__9S19559C13__9S19559C12[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-480,-280),
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__9S19559C12[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C10[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C79S19559C10__9S19559C12[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C4D1Ev();
extern void _ZN8S19559C4D0Ev();
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__9S19559C12[] = {
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C4[0]),
  (VTBL_ENTRY)&_ZN8S19559C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C4__9S19559C12[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S19559C4[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__A1__9S19559C12[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
static  VTT_ENTRY vtt_S19559C12[] = {
  {&(_ZTV9S19559C12[6]),  6,36},
  {&(_tg__ZTV9S19559C13__9S19559C12[6]),  6,11},
  {&(_tg__ZTV8S19559C99S19559C13__9S19559C12[6]),  6,9},
  {&(_tg__ZTV8S19559C7__8S19559C99S19559C13__9S19559C12[5]),  5,7},
  {&(_tg__ZTV8S19559C4__8S19559C99S19559C13__9S19559C12[6]),  6,9},
  {&(_tg__ZTV9S19559C10__8S19559C99S19559C13__9S19559C12[6]),  6,9},
  {&(_tg__ZTV8S19559C7__9S19559C13__9S19559C12[5]),  5,7},
  {&(_tg__ZTV8S19559C4__9S19559C13__9S19559C12[6]),  6,9},
  {&(_tg__ZTV9S19559C10__9S19559C13__9S19559C12[6]),  6,9},
  {&(_ZTV9S19559C12[17]),  17,36},
  {&(_ZTV9S19559C12[26]),  26,36},
  {&(_ZTV9S19559C12[34]),  34,36},
  {&(_tg__ZTV9S19559C10__9S19559C12[3]),  3,6},
  {&(_tg__ZTV8S19559C79S19559C10__9S19559C12[3]),  3,5},
  {&(_tg__ZTV8S19559C4__9S19559C12[4]),  4,7},
  {&(_tg__ZTV8S19559C7__8S19559C4__9S19559C12[5]),  5,7},
  {&(_tg__ZTV8S19559C7__A1__9S19559C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19559C12[];
extern  VTBL_ENTRY _ZTV9S19559C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C12[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C13D0Ev,_ZTv0_n20_N9S19559C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N9S19559C13D0Ev,_ZThn1208_N9S19559C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C13D1Ev,_ZTv0_n20_N9S19559C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N9S19559C13D1Ev,_ZThn1208_N9S19559C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N8S19559C9D0Ev,_ZThn1208_N8S19559C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N8S19559C9D1Ev,_ZThn1208_N8S19559C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C12D0Ev,_ZTv0_n20_N9S19559C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N9S19559C12D0Ev,_ZThn1208_N9S19559C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C12D1Ev,_ZTv0_n20_N9S19559C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N9S19559C12D1Ev,_ZThn1208_N9S19559C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19559C12 = {  "S19559C12", // class name
  bases_S19559C12, 10,
  &(vtc_S19559C12[0]), // expected_vtbl_contents
  &(vtt_S19559C12[0]), // expected_vtt_contents
  ABISELECT(2688,1488), // object size
  NSPAIRA(_ZTI9S19559C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19559C12),36, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19559C12),17, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19559C15  : virtual S19559C10 , virtual S19559C4 {
  int s19559c15f0;
  void *s19559c15f1;
  int s19559c15f2;
  ::S2489C7 s19559c15f3;
  ~S19559C15(); // tgen
  S19559C15(); // tgen
};
//SIG(-1 S19559C15) C1{ VBC2{ BC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC5{ VBC3 v1 v2 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 Fl FU6} v3 Fp FD FC3[7] FD FU4 Fs Fl Fl} VBC7{ VBC3 VBC5 vd v4 FL FL FL Fl Fi FU6 Fc[10] Fi} Fi Fp Fi FU6}


S19559C15 ::~S19559C15(){ note_dtor("S19559C15", this);} // tgen
S19559C15 ::S19559C15(){ note_ctor("S19559C15", this);} // tgen

static void Test_S19559C15()
{
  extern Class_Descriptor cd_S19559C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(145,314)];
    init_test(&cd_S19559C15, buf);
    S19559C15 *dp, &lv = *(dp=new (buf) S19559C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2304,1252), "sizeof(S19559C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19559C15)");
    /*is_ambiguous_... S19559C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C10*), ABISELECT(480,244), "S19559C15");
    check_base_class_offset(lv, (S2489C3*)(S19559C7*)(S19559C10*), ABISELECT(1664,900), "S19559C15");
    check_base_class_offset(lv, (S2489C3*)(S19559C4*), ABISELECT(1664,900), "S19559C15");
    /*is_ambiguous_... S19559C15::S19559C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C7*), ABISELECT(1664,900), "S19559C15");
    check_base_class_offset(lv, (S19559C7*)(S19559C10*), ABISELECT(96,44), "S19559C15");
    check_base_class_offset(lv, (S19559C10*), ABISELECT(96,44), "S19559C15");
    check_base_class_offset(lv, (S19559C7*)(S19559C4*), ABISELECT(1920,1052), "S19559C15");
    check_base_class_offset(lv, (S19559C4*), ABISELECT(1792,972), "S19559C15");
    check_field_offset(lv, s19559c15f0, ABISELECT(8,4), "S19559C15.s19559c15f0");
    check_field_offset(lv, s19559c15f1, ABISELECT(16,8), "S19559C15.s19559c15f1");
    check_field_offset(lv, s19559c15f2, ABISELECT(24,12), "S19559C15.s19559c15f2");
    check_field_offset(lv, s19559c15f3, ABISELECT(32,16), "S19559C15.s19559c15f3");
    test_class_info(&lv, &cd_S19559C15);
    dp->~S19559C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19559C15(Test_S19559C15, "S19559C15", ABISELECT(2304,1252));

#else // __cplusplus

extern void _ZN9S19559C15C1Ev();
extern void _ZN9S19559C15D1Ev();
Name_Map name_map_S19559C15[] = {
  NSPAIR(_ZN9S19559C15C1Ev),
  NSPAIR(_ZN9S19559C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C10;
extern VTBL_ENTRY _ZTI9S19559C10[];
extern  VTBL_ENTRY _ZTV9S19559C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C10[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C4;
extern VTBL_ENTRY _ZTI8S19559C4[];
extern  VTBL_ENTRY _ZTV8S19559C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C4[];
static Base_Class bases_S19559C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(480,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(1664,900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19559C7,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19559C10,    ABISELECT(96,44), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19559C7,    ABISELECT(1920,1052), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19559C4,    ABISELECT(1792,972), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19559C15[];
extern void _ZN9S19559C15D1Ev();
extern void _ZN9S19559C15D0Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
extern void ABISELECT(_ZTv0_n40_N9S19559C15D1Ev,_ZTv0_n20_N9S19559C15D1Ev)();
extern void ABISELECT(_ZThn1792_N9S19559C15D1Ev,_ZThn972_N9S19559C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19559C15D0Ev,_ZTv0_n20_N9S19559C15D0Ev)();
extern void ABISELECT(_ZThn1792_N9S19559C15D0Ev,_ZThn972_N9S19559C15D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY vtc_S19559C15[] = {
  ABISELECT(1920,1052),
  ABISELECT(1792,972),
  ABISELECT(1664,900),
  ABISELECT(96,44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C15[0]),
  (VTBL_ENTRY)&_ZN9S19559C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19559C15D0Ev,
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI9S19559C15[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
  0,
  ABISELECT(-1792,-972),
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  ABISELECT(-1792,-972),
  (VTBL_ENTRY)&(_ZTI9S19559C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C15D1Ev,_ZTv0_n20_N9S19559C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C15D0Ev,_ZTv0_n20_N9S19559C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-1920,-1052),
  (VTBL_ENTRY)&(_ZTI9S19559C15[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern VTBL_ENTRY _ZTV9S19559C15[];
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__9S19559C15[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C10[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C79S19559C10__9S19559C15[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C4D1Ev();
extern void _ZN8S19559C4D0Ev();
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__9S19559C15[] = {
  ABISELECT(128,80),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C4[0]),
  (VTBL_ENTRY)&_ZN8S19559C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C4__9S19559C15[] = {
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S19559C4[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__A1__9S19559C15[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
static  VTT_ENTRY vtt_S19559C15[] = {
  {&(_ZTV9S19559C15[6]),  6,33},
  {&(_ZTV9S19559C15[14]),  14,33},
  {&(_ZTV9S19559C15[23]),  23,33},
  {&(_ZTV9S19559C15[31]),  31,33},
  {&(_tg__ZTV9S19559C10__9S19559C15[3]),  3,6},
  {&(_tg__ZTV8S19559C79S19559C10__9S19559C15[3]),  3,5},
  {&(_tg__ZTV8S19559C4__9S19559C15[4]),  4,7},
  {&(_tg__ZTV8S19559C7__8S19559C4__9S19559C15[5]),  5,7},
  {&(_tg__ZTV8S19559C7__A1__9S19559C15[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19559C15[];
extern  VTBL_ENTRY _ZTV9S19559C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C15[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C15D0Ev,_ZTv0_n20_N9S19559C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1792_N9S19559C15D0Ev,_ZThn972_N9S19559C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C15D1Ev,_ZTv0_n20_N9S19559C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1792_N9S19559C15D1Ev,_ZThn972_N9S19559C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19559C15 = {  "S19559C15", // class name
  bases_S19559C15, 6,
  &(vtc_S19559C15[0]), // expected_vtbl_contents
  &(vtt_S19559C15[0]), // expected_vtt_contents
  ABISELECT(2304,1252), // object size
  NSPAIRA(_ZTI9S19559C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19559C15),33, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19559C15),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19559C2  : S19559C3 , S19559C12 , S19559C15 , S19559C10 {
  char s19559c2f0;
  __tsi64 s19559c2f1;
  long double s19559c2f2[4];
  int s19559c2f3[4];
  void *s19559c2f4;
  virtual  ~S19559C2(); // _ZN8S19559C2D2Ev
  virtual void  v12(); // _ZN8S19559C23v12Ev
  virtual void  v13(); // _ZN8S19559C23v13Ev
  S19559C2(); // tgen
};
//SIG(-1 S19559C2) C1{ BC2{ VBC3{ VBC4{ m Fc Fi FL FU5{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC6{ VBC4 v3 v4 Fp Fp Fi Fi FU7{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU7 Fp FL:3 FC4 Fl FU7} vd v5 FL FL FL Fl Fi FU7 Fc[10] Fi} BC8{ BC4 VBC6 VBC3 VBC9{ BC4 BC6 v6 Fp FD FC4[7] FD FU5 Fs Fl Fl} vd v7 Fc Fi[7] Fl[5] Fl FL FL FU10{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} BC4 BC6 vd v8 v9 v10 FU7 Fi Fl Fc Fp FC9 Fs} BC11{ BC4 VBC9 VBC3 BC12{ BC8 vd v11 v12 Fp Fp Fp Fi FC13{} Fl Fl} vd FD} BC14{ VBC9 VBC3 Fi Fp Fi FU7} BC9 vd v1 v2 Fc FL FD[4] Fi[4] Fp}


 S19559C2 ::~S19559C2(){ note_dtor("S19559C2", this);}
void  S19559C2 ::v12(){vfunc_called(this, "_ZN8S19559C23v12Ev");}
void  S19559C2 ::v13(){vfunc_called(this, "_ZN8S19559C23v13Ev");}
S19559C2 ::S19559C2(){ note_ctor("S19559C2", this);} // tgen

static void Test_S19559C2()
{
  extern Class_Descriptor cd_S19559C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(442,972)];
    init_test(&cd_S19559C2, buf);
    S19559C2 *dp, &lv = *(dp=new (buf) S19559C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7056,3884), "sizeof(S19559C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19559C2)");
    check_base_class_offset(lv, (S2489C3*)(S19559C4*), ABISELECT(4976,2756), "S19559C2");
    /*is_ambiguous_... S19559C2::S19559C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C7*), ABISELECT(4976,2756), "S19559C2");
    /*is_ambiguous_... S19559C2::S19559C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C7*)(S19559C10*), ABISELECT(4976,2756), "S19559C2");
    /*is_ambiguous_... S19559C3::S19559C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C7*)(S19559C3*), ABISELECT(4976,2756), "S19559C2");
    /*is_ambiguous_... S19559C2::S19559C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C7*)(S19559C10*), ABISELECT(4976,2756), "S19559C2");
    check_base_class_offset(lv, (S19559C7*)(S19559C4*), ABISELECT(5104,2828), "S19559C2");
    /*is_ambiguous_... S19559C9::S19559C7 */ AMB_check_base_class_offset(lv, (S19559C7*)(S19559C9*)(S19559C3*), ABISELECT(5104,2828), "S19559C2");
    /*is_ambiguous_... S19559C9::S19559C7 */ AMB_check_base_class_offset(lv, (S19559C7*)(S19559C9*)(S19559C13*)(S19559C12*), ABISELECT(5104,2828), "S19559C2");
    check_base_class_offset(lv, (S19559C4*)(S19559C3*), ABISELECT(4856,2676), "S19559C2");
    check_base_class_offset(lv, (S19559C4*)(S19559C9*)(S19559C3*), ABISELECT(4856,2676), "S19559C2");
    check_base_class_offset(lv, (S19559C4*)(S19559C12*), ABISELECT(4856,2676), "S19559C2");
    check_base_class_offset(lv, (S19559C4*)(S19559C9*)(S19559C13*)(S19559C12*), ABISELECT(4856,2676), "S19559C2");
    check_base_class_offset(lv, (S19559C4*)(S19559C15*), ABISELECT(4856,2676), "S19559C2");
    /*is_ambiguous_... S19559C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C9*)(S19559C3*), ABISELECT(16,4), "S19559C2");
    /*is_ambiguous_... S19559C2::S19559C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C10*), ABISELECT(5872,3228), "S19559C2");
    /*is_ambiguous_... S19559C2::S19559C10 */ AMB_check_base_class_offset(lv, (S19559C7*)(S19559C10*), ABISELECT(5488,3028), "S19559C2");
    check_base_class_offset(lv, (S19559C10*)(S19559C9*)(S19559C3*), ABISELECT(5488,3028), "S19559C2");
    check_base_class_offset(lv, (S19559C10*)(S19559C12*), ABISELECT(5488,3028), "S19559C2");
    check_base_class_offset(lv, (S19559C10*)(S19559C9*)(S19559C13*)(S19559C12*), ABISELECT(5488,3028), "S19559C2");
    check_base_class_offset(lv, (S19559C10*)(S19559C15*), ABISELECT(5488,3028), "S19559C2");
    check_base_class_offset(lv, (S19559C9*)(S19559C3*), 0, "S19559C2");
    /*is_ambiguous_... S19559C3::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C3*), ABISELECT(288,168), "S19559C2");
    /*is_ambiguous_... S19559C3::S19559C7 */ AMB_check_base_class_offset(lv, (S19559C7*)(S19559C3*), ABISELECT(416,240), "S19559C2");
    check_base_class_offset(lv, (S19559C3*), 0, "S19559C2");
    /*is_ambiguous_... S19559C12::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C12*), ABISELECT(2944,1612), "S19559C2");
    /*is_ambiguous_... S19559C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C9*)(S19559C13*)(S19559C12*), ABISELECT(2624,1420), "S19559C2");
    check_base_class_offset(lv, (S19559C9*)(S19559C13*)(S19559C12*), ABISELECT(2608,1416), "S19559C2");
    check_base_class_offset(lv, (S19559C13*)(S19559C12*), ABISELECT(2608,1416), "S19559C2");
    check_base_class_offset(lv, (S19559C12*), ABISELECT(2608,1416), "S19559C2");
    check_base_class_offset(lv, (S19559C15*), ABISELECT(3088,1696), "S19559C2");
    /*is_ambiguous_... S19559C2::S19559C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C10*), ABISELECT(3568,1940), "S19559C2");
    /*is_ambiguous_... S19559C2::S19559C10 */ AMB_check_base_class_offset(lv, (S19559C7*)(S19559C10*), ABISELECT(3184,1740), "S19559C2");
    /*is_ambiguous_... S19559C2::S19559C10 */ AMB_check_base_class_offset(lv, (S19559C10*), ABISELECT(3184,1740), "S19559C2");
    check_field_offset(lv, s19559c2f0, ABISELECT(4744,2596), "S19559C2.s19559c2f0");
    check_field_offset(lv, s19559c2f1, ABISELECT(4752,2600), "S19559C2.s19559c2f1");
    check_field_offset(lv, s19559c2f2, ABISELECT(4768,2608), "S19559C2.s19559c2f2");
    check_field_offset(lv, s19559c2f3, ABISELECT(4832,2656), "S19559C2.s19559c2f3");
    check_field_offset(lv, s19559c2f4, ABISELECT(4848,2672), "S19559C2.s19559c2f4");
    test_class_info(&lv, &cd_S19559C2);
    dp->~S19559C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19559C2(Test_S19559C2, "S19559C2", ABISELECT(7056,3884));

#else // __cplusplus

extern void _ZN8S19559C2C1Ev();
extern void _ZN8S19559C2D2Ev();
Name_Map name_map_S19559C2[] = {
  NSPAIR(_ZN8S19559C2C1Ev),
  NSPAIR(_ZN8S19559C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C4;
extern VTBL_ENTRY _ZTI8S19559C4[];
extern  VTBL_ENTRY _ZTV8S19559C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C4[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C10;
extern VTBL_ENTRY _ZTI9S19559C10[];
extern  VTBL_ENTRY _ZTV9S19559C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C10[];
extern Class_Descriptor cd_S19559C9;
extern VTBL_ENTRY _ZTI8S19559C9[];
extern  VTBL_ENTRY _ZTV8S19559C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C9[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C3;
extern VTBL_ENTRY _ZTI8S19559C3[];
extern  VTBL_ENTRY _ZTV8S19559C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C9;
extern VTBL_ENTRY _ZTI8S19559C9[];
extern  VTBL_ENTRY _ZTV8S19559C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C9[];
extern Class_Descriptor cd_S19559C13;
extern VTBL_ENTRY _ZTI9S19559C13[];
extern  VTBL_ENTRY _ZTV9S19559C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C13[];
extern Class_Descriptor cd_S19559C12;
extern VTBL_ENTRY _ZTI9S19559C12[];
extern  VTBL_ENTRY _ZTV9S19559C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C12[];
extern Class_Descriptor cd_S19559C15;
extern VTBL_ENTRY _ZTI9S19559C15[];
extern  VTBL_ENTRY _ZTV9S19559C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C15[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C10;
extern VTBL_ENTRY _ZTI9S19559C10[];
extern  VTBL_ENTRY _ZTV9S19559C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C10[];
static Base_Class bases_S19559C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(4976,2756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19559C7,    ABISELECT(5104,2828), //bcp->offset
    53, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19559C4,    ABISELECT(4856,2676), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(5872,3228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19559C7,    ABISELECT(5488,3028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19559C10,    ABISELECT(5488,3028), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19559C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(288,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19559C7,    ABISELECT(416,240), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19559C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(2944,1612), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(2624,1420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19559C9,    ABISELECT(2608,1416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19559C13,    ABISELECT(2608,1416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19559C12,    ABISELECT(2608,1416), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19559C15,    ABISELECT(3088,1696), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(3568,1940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19559C7,    ABISELECT(3184,1740), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19559C10,    ABISELECT(3184,1740), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19559C2[];
extern void _ZN8S19559C2D1Ev();
extern void _ZN8S19559C2D0Ev();
extern void _ZN8S19559C92v6Ev();
extern void _ZN8S19559C32v7Ev();
extern void _ZN8S19559C32v8Ev();
extern void _ZN8S19559C32v9Ev();
extern void _ZN8S19559C23v12Ev();
extern void _ZN8S19559C23v13Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void ABISELECT(_ZThn2608_N8S19559C2D1Ev,_ZThn1416_N8S19559C2D1Ev)();
extern void ABISELECT(_ZThn2608_N8S19559C2D0Ev,_ZThn1416_N8S19559C2D0Ev)();
extern void _ZN8S19559C92v6Ev();
extern void _ZN9S19559C133v10Ev();
extern void _ZN9S19559C133v11Ev();
extern void ABISELECT(_ZThn3088_N8S19559C2D1Ev,_ZThn1696_N8S19559C2D1Ev)();
extern void ABISELECT(_ZThn3088_N8S19559C2D0Ev,_ZThn1696_N8S19559C2D0Ev)();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
extern void ABISELECT(_ZTv0_n40_N8S19559C2D1Ev,_ZTv0_n20_N8S19559C2D1Ev)();
extern void ABISELECT(_ZThn4856_N8S19559C2D1Ev,_ZThn2676_N8S19559C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19559C2D0Ev,_ZTv0_n20_N8S19559C2D0Ev)();
extern void ABISELECT(_ZThn4856_N8S19559C2D0Ev,_ZThn2676_N8S19559C2D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY vtc_S19559C2[] = {
  ABISELECT(5488,3028),
  ABISELECT(4856,2676),
  ABISELECT(4976,2756),
  ABISELECT(5104,2828),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C2[0]),
  (VTBL_ENTRY)&_ZN8S19559C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN8S19559C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19559C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19559C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19559C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19559C23v13Ev,
  ABISELECT(4560,2516),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S19559C2[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  ABISELECT(2880,1612),
  ABISELECT(2248,1260),
  ABISELECT(2368,1340),
  ABISELECT(2496,1412),
  ABISELECT(-2608,-1416),
  (VTBL_ENTRY)&(_ZTI8S19559C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2608_N8S19559C2D1Ev,_ZThn1416_N8S19559C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2608_N8S19559C2D0Ev,_ZThn1416_N8S19559C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v11Ev,
  ABISELECT(2016,1132),
  ABISELECT(1768,980),
  ABISELECT(1888,1060),
  ABISELECT(2400,1332),
  ABISELECT(-3088,-1696),
  (VTBL_ENTRY)&(_ZTI8S19559C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3088_N8S19559C2D1Ev,_ZThn1696_N8S19559C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3088_N8S19559C2D0Ev,_ZThn1696_N8S19559C2D0Ev),
  ABISELECT(1792,1016),
  ABISELECT(-3184,-1740),
  (VTBL_ENTRY)&(_ZTI8S19559C2[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
  0,
  ABISELECT(-4856,-2676),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-4856,-2676),
  (VTBL_ENTRY)&(_ZTI8S19559C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C2D1Ev,_ZTv0_n20_N8S19559C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C2D0Ev,_ZTv0_n20_N8S19559C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-5104,-2828),
  (VTBL_ENTRY)&(_ZTI8S19559C2[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-5488,-3028),
  (VTBL_ENTRY)&(_ZTI8S19559C2[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S19559C2[];
extern void _ZN8S19559C3D1Ev();
extern void _ZN8S19559C3D0Ev();
extern void _ZN8S19559C92v6Ev();
extern void _ZN8S19559C32v7Ev();
extern void _ZN8S19559C32v8Ev();
extern void _ZN8S19559C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C3__8S19559C2[] = {
  ABISELECT(5488,3028),
  ABISELECT(4856,2676),
  ABISELECT(4976,2756),
  ABISELECT(5104,2828),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C3[0]),
  (VTBL_ENTRY)&_ZN8S19559C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN8S19559C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19559C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19559C32v9Ev,
};
extern void _ZN8S19559C9D1Ev();
extern void _ZN8S19559C9D0Ev();
extern void _ZN8S19559C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C98S19559C3__8S19559C2[] = {
  ABISELECT(5488,3028),
  ABISELECT(4856,2676),
  ABISELECT(4976,2756),
  ABISELECT(5104,2828),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C98S19559C3__8S19559C2[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-5104,-2828),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev)();
extern void ABISELECT(_ZThn4856_N8S19559C9D1Ev,_ZThn2676_N8S19559C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev)();
extern void ABISELECT(_ZThn4856_N8S19559C9D0Ev,_ZThn2676_N8S19559C9D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__8S19559C98S19559C3__8S19559C2[] = {
  0,
  ABISELECT(-4856,-2676),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-4856,-2676),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__8S19559C98S19559C3__8S19559C2[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-5488,-3028),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C78S19559C3__A2__8S19559C2[] = {
  ABISELECT(4560,2516),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19559C3D1Ev,_ZTv0_n20_N8S19559C3D1Ev)();
extern void ABISELECT(_ZThn4856_N8S19559C3D1Ev,_ZThn2676_N8S19559C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19559C3D0Ev,_ZTv0_n20_N8S19559C3D0Ev)();
extern void ABISELECT(_ZThn4856_N8S19559C3D0Ev,_ZThn2676_N8S19559C3D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__8S19559C3__8S19559C2[] = {
  0,
  ABISELECT(-4856,-2676),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-4856,-2676),
  (VTBL_ENTRY)&(_ZTI8S19559C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C3D1Ev,_ZTv0_n20_N8S19559C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C3D0Ev,_ZTv0_n20_N8S19559C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C3__8S19559C2[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-5104,-2828),
  (VTBL_ENTRY)&(_ZTI8S19559C3[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__8S19559C3__8S19559C2[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-5488,-3028),
  (VTBL_ENTRY)&(_ZTI8S19559C3[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__A__8S19559C3__8S19559C2[] = {
  ABISELECT(4560,2516),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S19559C3[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN9S19559C12D1Ev();
extern void _ZN9S19559C12D0Ev();
extern void _ZN8S19559C92v6Ev();
extern void _ZN9S19559C133v10Ev();
extern void _ZN9S19559C133v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C12__8S19559C2[] = {
  ABISELECT(2880,1612),
  ABISELECT(2248,1260),
  ABISELECT(2368,1340),
  ABISELECT(2496,1412),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C12[0]),
  (VTBL_ENTRY)&_ZN9S19559C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19559C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v11Ev,
};
extern void _ZN9S19559C13D1Ev();
extern void _ZN9S19559C13D0Ev();
extern void _ZN8S19559C92v6Ev();
extern void _ZN9S19559C133v10Ev();
extern void _ZN9S19559C133v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C139S19559C12__8S19559C2[] = {
  ABISELECT(2880,1612),
  ABISELECT(2248,1260),
  ABISELECT(2368,1340),
  ABISELECT(2496,1412),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&_ZN9S19559C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19559C13D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v11Ev,
};
extern void _ZN8S19559C9D1Ev();
extern void _ZN8S19559C9D0Ev();
extern void _ZN8S19559C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C99S19559C139S19559C12__A1__8S19559C2[] = {
  ABISELECT(2880,1612),
  ABISELECT(2248,1260),
  ABISELECT(2368,1340),
  ABISELECT(2496,1412),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C99S19559C139S19559C12__A1__8S19559C2[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2496,-1412),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev)();
extern void ABISELECT(_ZThn2248_N8S19559C9D1Ev,_ZThn1260_N8S19559C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev)();
extern void ABISELECT(_ZThn2248_N8S19559C9D0Ev,_ZThn1260_N8S19559C9D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__8S19559C99S19559C139S19559C12__A1__8S19559C2[] = {
  0,
  ABISELECT(-2248,-1260),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-2248,-1260),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__8S19559C99S19559C139S19559C12__A1__8S19559C2[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-2880,-1612),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__9S19559C139S19559C12__8S19559C2[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2496,-1412),
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19559C13D1Ev,_ZTv0_n20_N9S19559C13D1Ev)();
extern void ABISELECT(_ZThn2248_N9S19559C13D1Ev,_ZThn1260_N9S19559C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19559C13D0Ev,_ZTv0_n20_N9S19559C13D0Ev)();
extern void ABISELECT(_ZThn2248_N9S19559C13D0Ev,_ZThn1260_N9S19559C13D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__9S19559C139S19559C12__8S19559C2[] = {
  0,
  ABISELECT(-2248,-1260),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-2248,-1260),
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C13D1Ev,_ZTv0_n20_N9S19559C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C13D0Ev,_ZTv0_n20_N9S19559C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__9S19559C139S19559C12__8S19559C2[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-2880,-1612),
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__9S19559C12__8S19559C2[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-2880,-1612),
  (VTBL_ENTRY)&(_ZTI9S19559C12[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19559C12D1Ev,_ZTv0_n20_N9S19559C12D1Ev)();
extern void ABISELECT(_ZThn2248_N9S19559C12D1Ev,_ZThn1260_N9S19559C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19559C12D0Ev,_ZTv0_n20_N9S19559C12D0Ev)();
extern void ABISELECT(_ZThn2248_N9S19559C12D0Ev,_ZThn1260_N9S19559C12D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__9S19559C12__8S19559C2[] = {
  0,
  ABISELECT(-2248,-1260),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-2248,-1260),
  (VTBL_ENTRY)&(_ZTI9S19559C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C12D1Ev,_ZTv0_n20_N9S19559C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C12D0Ev,_ZTv0_n20_N9S19559C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__A1__9S19559C12__8S19559C2[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2496,-1412),
  (VTBL_ENTRY)&(_ZTI9S19559C12[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN9S19559C15D1Ev();
extern void _ZN9S19559C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C15__8S19559C2[] = {
  ABISELECT(2016,1132),
  ABISELECT(1768,980),
  ABISELECT(1888,1060),
  ABISELECT(2400,1332),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C15[0]),
  (VTBL_ENTRY)&_ZN9S19559C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19559C15D0Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__9S19559C15__8S19559C2[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-2400,-1332),
  (VTBL_ENTRY)&(_ZTI9S19559C15[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19559C15D1Ev,_ZTv0_n20_N9S19559C15D1Ev)();
extern void ABISELECT(_ZThn1768_N9S19559C15D1Ev,_ZThn980_N9S19559C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19559C15D0Ev,_ZTv0_n20_N9S19559C15D0Ev)();
extern void ABISELECT(_ZThn1768_N9S19559C15D0Ev,_ZThn980_N9S19559C15D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__9S19559C15__8S19559C2[] = {
  0,
  ABISELECT(-1768,-980),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-1768,-980),
  (VTBL_ENTRY)&(_ZTI9S19559C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C15D1Ev,_ZTv0_n20_N9S19559C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C15D0Ev,_ZTv0_n20_N9S19559C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__A1__9S19559C15__8S19559C2[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2016,-1132),
  (VTBL_ENTRY)&(_ZTI9S19559C15[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__A__8S19559C2[] = {
  ABISELECT(1792,1016),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C10[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C79S19559C10__A3__8S19559C2[] = {
  ABISELECT(1792,1016),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C4D1Ev();
extern void _ZN8S19559C4D0Ev();
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__8S19559C2[] = {
  ABISELECT(248,152),
  ABISELECT(120,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C4[0]),
  (VTBL_ENTRY)&_ZN8S19559C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C4__8S19559C2[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-248,-152),
  (VTBL_ENTRY)&(_ZTI8S19559C4[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C2[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__8S19559C2[] = {
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C10[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C79S19559C10__A1__8S19559C2[] = {
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
static  VTT_ENTRY vtt_S19559C2[] = {
  {&(_ZTV8S19559C2[6]),  6,69},
  {&(_tg__ZTV8S19559C3__8S19559C2[6]),  6,12},
  {&(_tg__ZTV8S19559C98S19559C3__8S19559C2[6]),  6,9},
  {&(_tg__ZTV8S19559C7__8S19559C98S19559C3__8S19559C2[5]),  5,7},
  {&(_tg__ZTV8S19559C4__8S19559C98S19559C3__8S19559C2[6]),  6,9},
  {&(_tg__ZTV9S19559C10__8S19559C98S19559C3__8S19559C2[6]),  6,9},
  {&(_tg__ZTV8S19559C78S19559C3__A2__8S19559C2[3]),  3,5},
  {&(_tg__ZTV8S19559C4__8S19559C3__8S19559C2[6]),  6,9},
  {&(_tg__ZTV8S19559C7__8S19559C3__8S19559C2[5]),  5,7},
  {&(_tg__ZTV9S19559C10__8S19559C3__8S19559C2[6]),  6,9},
  {&(_tg__ZTV8S19559C7__A__8S19559C3__8S19559C2[3]),  3,5},
  {&(_tg__ZTV9S19559C12__8S19559C2[6]),  6,11},
  {&(_tg__ZTV9S19559C139S19559C12__8S19559C2[6]),  6,11},
  {&(_tg__ZTV8S19559C99S19559C139S19559C12__A1__8S19559C2[6]),  6,9},
  {&(_tg__ZTV8S19559C7__8S19559C99S19559C139S19559C12__A1__8S19559C2[5]),  5,7},
  {&(_tg__ZTV8S19559C4__8S19559C99S19559C139S19559C12__A1__8S19559C2[6]),  6,9},
  {&(_tg__ZTV9S19559C10__8S19559C99S19559C139S19559C12__A1__8S19559C2[6]),  6,9},
  {&(_tg__ZTV8S19559C7__9S19559C139S19559C12__8S19559C2[5]),  5,7},
  {&(_tg__ZTV8S19559C4__9S19559C139S19559C12__8S19559C2[6]),  6,9},
  {&(_tg__ZTV9S19559C10__9S19559C139S19559C12__8S19559C2[6]),  6,9},
  {&(_tg__ZTV9S19559C10__9S19559C12__8S19559C2[6]),  6,9},
  {&(_tg__ZTV8S19559C4__9S19559C12__8S19559C2[6]),  6,9},
  {&(_tg__ZTV8S19559C7__A1__9S19559C12__8S19559C2[5]),  5,7},
  {&(_tg__ZTV9S19559C15__8S19559C2[6]),  6,8},
  {&(_tg__ZTV9S19559C10__9S19559C15__8S19559C2[6]),  6,9},
  {&(_tg__ZTV8S19559C4__9S19559C15__8S19559C2[6]),  6,9},
  {&(_tg__ZTV8S19559C7__A1__9S19559C15__8S19559C2[5]),  5,7},
  {&(_tg__ZTV9S19559C10__A__8S19559C2[3]),  3,6},
  {&(_tg__ZTV8S19559C79S19559C10__A3__8S19559C2[3]),  3,5},
  {&(_ZTV8S19559C2[50]),  50,69},
  {&(_ZTV8S19559C2[58]),  58,69},
  {&(_ZTV8S19559C2[66]),  66,69},
  {&(_ZTV8S19559C2[17]),  17,69},
  {&(_ZTV8S19559C2[25]),  25,69},
  {&(_ZTV8S19559C2[36]),  36,69},
  {&(_ZTV8S19559C2[41]),  41,69},
  {&(_tg__ZTV8S19559C4__8S19559C2[4]),  4,7},
  {&(_tg__ZTV8S19559C7__8S19559C4__8S19559C2[5]),  5,7},
  {&(_tg__ZTV8S19559C7__8S19559C2[3]),  3,5},
  {&(_tg__ZTV9S19559C10__8S19559C2[3]),  3,6},
  {&(_tg__ZTV8S19559C79S19559C10__A1__8S19559C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19559C2[];
extern  VTBL_ENTRY _ZTV8S19559C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C2[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C15D0Ev,_ZTv0_n20_N9S19559C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1768_N9S19559C15D0Ev,_ZThn980_N9S19559C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C15D1Ev,_ZTv0_n20_N9S19559C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1768_N9S19559C15D1Ev,_ZThn980_N9S19559C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C12D0Ev,_ZTv0_n20_N9S19559C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N9S19559C12D0Ev,_ZThn1260_N9S19559C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C12D1Ev,_ZTv0_n20_N9S19559C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N9S19559C12D1Ev,_ZThn1260_N9S19559C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C13D0Ev,_ZTv0_n20_N9S19559C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N9S19559C13D0Ev,_ZThn1260_N9S19559C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C13D1Ev,_ZTv0_n20_N9S19559C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N9S19559C13D1Ev,_ZThn1260_N9S19559C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C3D0Ev,_ZTv0_n20_N8S19559C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19559C3D0Ev,_ZThn2676_N8S19559C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C3D1Ev,_ZTv0_n20_N8S19559C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19559C3D1Ev,_ZThn2676_N8S19559C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N8S19559C9D0Ev,_ZThn1260_N8S19559C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19559C9D0Ev,_ZThn2676_N8S19559C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N8S19559C9D1Ev,_ZThn1260_N8S19559C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19559C9D1Ev,_ZThn2676_N8S19559C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C2D0Ev,_ZTv0_n20_N8S19559C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19559C2D0Ev,_ZThn2676_N8S19559C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C2D1Ev,_ZTv0_n20_N8S19559C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19559C2D1Ev,_ZThn2676_N8S19559C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19559C2 = {  "S19559C2", // class name
  bases_S19559C2, 20,
  &(vtc_S19559C2[0]), // expected_vtbl_contents
  &(vtt_S19559C2[0]), // expected_vtt_contents
  ABISELECT(7056,3884), // object size
  NSPAIRA(_ZTI8S19559C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19559C2),69, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19559C2),41, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19559C17  {
  long double s19559c17f0;
  ::S19559C15 s19559c17f1[6];
  char s19559c17f2;
  void *s19559c17f3;
  void *s19559c17f4;
  int s19559c17f5[6];
  int s19559c17f6;
  void *s19559c17f7;
  long s19559c17f8;
  void *s19559c17f9;
  int s19559c17f10;
  void *s19559c17f11;
  void *s19559c17f12;
  virtual void  v14(); // _ZN9S19559C173v14Ev
  ~S19559C17(); // tgen
  S19559C17(); // tgen
};
//SIG(-1 S19559C17) C1{ v1 FD FC2{ VBC3{ BC4{ m Fc Fi FL FU5{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC6{ VBC4 v2 v3 Fp Fp Fi Fi FU7{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU7 Fp FL:3 FC4 Fl FU7} v4 Fp FD FC4[7] FD FU5 Fs Fl Fl} VBC8{ VBC4 VBC6 vd v5 FL FL FL Fl Fi FU7 Fc[10] Fi} Fi Fp Fi FU7}[6] Fc Fp Fp Fi[6] Fi Fp Fl Fp Fi Fp Fp}


void  S19559C17 ::v14(){vfunc_called(this, "_ZN9S19559C173v14Ev");}
S19559C17 ::~S19559C17(){ note_dtor("S19559C17", this);} // tgen
S19559C17 ::S19559C17(){ note_ctor("S19559C17", this);} // tgen

static void Test_S19559C17()
{
  extern Class_Descriptor cd_S19559C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(874,1899)];
    init_test(&cd_S19559C17, buf);
    S19559C17 *dp, &lv = *(dp=new (buf) S19559C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13968,7592), "sizeof(S19559C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19559C17)");
    check_field_offset(lv, s19559c17f0, ABISELECT(16,4), "S19559C17.s19559c17f0");
    check_field_offset(lv, s19559c17f1, ABISELECT(32,16), "S19559C17.s19559c17f1");
    check_field_offset(lv, s19559c17f2, ABISELECT(13856,7528), "S19559C17.s19559c17f2");
    check_field_offset(lv, s19559c17f3, ABISELECT(13864,7532), "S19559C17.s19559c17f3");
    check_field_offset(lv, s19559c17f4, ABISELECT(13872,7536), "S19559C17.s19559c17f4");
    check_field_offset(lv, s19559c17f5, ABISELECT(13880,7540), "S19559C17.s19559c17f5");
    check_field_offset(lv, s19559c17f6, ABISELECT(13904,7564), "S19559C17.s19559c17f6");
    check_field_offset(lv, s19559c17f7, ABISELECT(13912,7568), "S19559C17.s19559c17f7");
    check_field_offset(lv, s19559c17f8, ABISELECT(13920,7572), "S19559C17.s19559c17f8");
    check_field_offset(lv, s19559c17f9, ABISELECT(13928,7576), "S19559C17.s19559c17f9");
    check_field_offset(lv, s19559c17f10, ABISELECT(13936,7580), "S19559C17.s19559c17f10");
    check_field_offset(lv, s19559c17f11, ABISELECT(13944,7584), "S19559C17.s19559c17f11");
    check_field_offset(lv, s19559c17f12, ABISELECT(13952,7588), "S19559C17.s19559c17f12");
    test_class_info(&lv, &cd_S19559C17);
    dp->~S19559C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19559C17(Test_S19559C17, "S19559C17", ABISELECT(13968,7592));

#else // __cplusplus

extern void _ZN9S19559C17C1Ev();
extern void _ZN9S19559C17D1Ev();
Name_Map name_map_S19559C17[] = {
  NSPAIR(_ZN9S19559C17C1Ev),
  NSPAIR(_ZN9S19559C17D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19559C17[];
extern void _ZN9S19559C173v14Ev();
static  VTBL_ENTRY vtc_S19559C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C17[0]),
  (VTBL_ENTRY)&_ZN9S19559C173v14Ev,
};
extern VTBL_ENTRY _ZTI9S19559C17[];
extern  VTBL_ENTRY _ZTV9S19559C17[];
Class_Descriptor cd_S19559C17 = {  "S19559C17", // class name
  0,0,//no base classes
  &(vtc_S19559C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13968,7592), // object size
  NSPAIRA(_ZTI9S19559C17),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19559C17),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19559C16  : virtual S19559C10 , virtual S19559C7 , virtual S19559C4 , S19559C13 , virtual S19559C17 {
  char s19559c16f0;
  short s19559c16f1[3];
  ::S2488C21 s19559c16f2[10];
  ::S19559C10 s19559c16f3;
  __tsi64 s19559c16f4;
  __tsi64 s19559c16f5:5;
  int s19559c16f6;
  void *s19559c16f7[6];
  long s19559c16f8[2];
  __tsi64 s19559c16f9;
  int s19559c16f10;
  virtual  ~S19559C16(); // _ZN9S19559C16D2Ev
  S19559C16(); // tgen
};
//SIG(-1 S19559C16) C1{ VBC2{ BC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC5{ VBC3 v1 v2 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 Fl FU6} v3 Fp FD FC3[7] FD FU4 Fs Fl Fl} VBC5 VBC7{ VBC3 VBC5 vd v4 FL FL FL Fl Fi FU6 Fc[10] Fi} BC8{ BC9{ BC3 VBC5 VBC7 VBC2 vd v5 Fc Fi[7] Fl[5] Fl FL FL FU10{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} vd v6 v7 Fp Fp Fp Fi FC11{} Fl Fl} VBC12{ v8 FD FC13{ VBC2 VBC7 Fi Fp Fi FU6}[6] Fc Fp Fp Fi[6] Fi Fp Fl Fp Fi Fp Fp} vd Fc Fs[3] FC14{ BC3 VBC15{ VBC3 v9 v10 Fp Fp Fi Fi FU6 FL:0 FD FU6 Fp FL:3 FC3 Fl FU6} VBC16{ VBC3 VBC15 vd v11 FL FL FL Fl Fi FU6 Fc[10] Fi} VBC17{ BC3 BC15 v12 Fp FD FC3[7] FD FU4 Fs Fl Fl} VBC18{ VBC16 BC19{ BC3 VBC15 VBC16 VBC17 vd v13 Fc Fi[7] Fl[5] Fl FL FL FU10} BC3 BC15 vd v14 v15 v16 FU6 Fi Fl Fc Fp FC17 Fs} vd FL Fi Fp Fp Fl}[10] FC2 FL FL:5 Fi Fp[6] Fl[2] FL Fi}


 S19559C16 ::~S19559C16(){ note_dtor("S19559C16", this);}
S19559C16 ::S19559C16(){ note_ctor("S19559C16", this);} // tgen

static void Test_S19559C16()
{
  extern Class_Descriptor cd_S19559C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4275,9309)];
    init_test(&cd_S19559C16, buf);
    S19559C16 *dp, &lv = *(dp=new (buf) S19559C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(68384,37232), "sizeof(S19559C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19559C16)");
    /*is_ambiguous_... S19559C10::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C10*), ABISELECT(52592,28632), "S19559C16");
    check_base_class_offset(lv, (S2489C3*)(S19559C7*)(S19559C10*), ABISELECT(53776,29288), "S19559C16");
    /*is_ambiguous_... S19559C16::S19559C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C7*), ABISELECT(53776,29288), "S19559C16");
    check_base_class_offset(lv, (S2489C3*)(S19559C4*), ABISELECT(53776,29288), "S19559C16");
    check_base_class_offset(lv, (S19559C7*)(S19559C10*), ABISELECT(52208,28432), "S19559C16");
    check_base_class_offset(lv, (S19559C10*), ABISELECT(52208,28432), "S19559C16");
    check_base_class_offset(lv, (S19559C10*)(S19559C9*)(S19559C13*), ABISELECT(52208,28432), "S19559C16");
    /*is_ambiguous_... S19559C16::S19559C7 */ AMB_check_base_class_offset(lv, (S19559C7*), ABISELECT(53904,29360), "S19559C16");
    check_base_class_offset(lv, (S19559C7*)(S19559C4*), ABISELECT(53904,29360), "S19559C16");
    /*is_ambiguous_... S19559C9::S19559C7 */ AMB_check_base_class_offset(lv, (S19559C7*)(S19559C9*)(S19559C13*), ABISELECT(53904,29360), "S19559C16");
    check_base_class_offset(lv, (S19559C4*), ABISELECT(54288,29560), "S19559C16");
    check_base_class_offset(lv, (S19559C4*)(S19559C9*)(S19559C13*), ABISELECT(54288,29560), "S19559C16");
    /*is_ambiguous_... S19559C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C9*)(S19559C13*), ABISELECT(16,4), "S19559C16");
    check_base_class_offset(lv, (S19559C9*)(S19559C13*), 0, "S19559C16");
    check_base_class_offset(lv, (S19559C13*), 0, "S19559C16");
    check_base_class_offset(lv, (S19559C17*), ABISELECT(54416,29640), "S19559C16");
    check_field_offset(lv, s19559c16f0, ABISELECT(328,196), "S19559C16.s19559c16f0");
    check_field_offset(lv, s19559c16f1, ABISELECT(330,198), "S19559C16.s19559c16f1");
    check_field_offset(lv, s19559c16f2, ABISELECT(336,204), "S19559C16.s19559c16f2");
    check_field_offset(lv, s19559c16f3, ABISELECT(50416,27444), "S19559C16.s19559c16f3");
    check_field_offset(lv, s19559c16f4, ABISELECT(52112,28372), "S19559C16.s19559c16f4");
    set_bf_and_test(lv, s19559c16f5, ABISELECT(52120,28380), 0, 5, 1, "S19559C16");
    set_bf_and_test(lv, s19559c16f5, ABISELECT(52120,28380), 0, 5, hide_sll(1LL<<4), "S19559C16");
    check_field_offset(lv, s19559c16f6, ABISELECT(52124,28384), "S19559C16.s19559c16f6");
    check_field_offset(lv, s19559c16f7, ABISELECT(52128,28388), "S19559C16.s19559c16f7");
    check_field_offset(lv, s19559c16f8, ABISELECT(52176,28412), "S19559C16.s19559c16f8");
    check_field_offset(lv, s19559c16f9, ABISELECT(52192,28420), "S19559C16.s19559c16f9");
    check_field_offset(lv, s19559c16f10, ABISELECT(52200,28428), "S19559C16.s19559c16f10");
    test_class_info(&lv, &cd_S19559C16);
    dp->~S19559C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19559C16(Test_S19559C16, "S19559C16", ABISELECT(68384,37232));

#else // __cplusplus

extern void _ZN9S19559C16C1Ev();
extern void _ZN9S19559C16D2Ev();
Name_Map name_map_S19559C16[] = {
  NSPAIR(_ZN9S19559C16C1Ev),
  NSPAIR(_ZN9S19559C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C10;
extern VTBL_ENTRY _ZTI9S19559C10[];
extern  VTBL_ENTRY _ZTV9S19559C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C10[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C4;
extern VTBL_ENTRY _ZTI8S19559C4[];
extern  VTBL_ENTRY _ZTV8S19559C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C4[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C9;
extern VTBL_ENTRY _ZTI8S19559C9[];
extern  VTBL_ENTRY _ZTV8S19559C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C9[];
extern Class_Descriptor cd_S19559C13;
extern VTBL_ENTRY _ZTI9S19559C13[];
extern  VTBL_ENTRY _ZTV9S19559C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C13[];
extern Class_Descriptor cd_S19559C17;
extern VTBL_ENTRY _ZTI9S19559C17[];
extern  VTBL_ENTRY _ZTV9S19559C17[];
static Base_Class bases_S19559C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(52592,28632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(53776,29288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19559C7,    ABISELECT(52208,28432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19559C10,    ABISELECT(52208,28432), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19559C7,    ABISELECT(53904,29360), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19559C4,    ABISELECT(54288,29560), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19559C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19559C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19559C17,    ABISELECT(54416,29640), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19559C16[];
extern void _ZN9S19559C16D1Ev();
extern void _ZN9S19559C16D0Ev();
extern void _ZN8S19559C92v6Ev();
extern void _ZN9S19559C133v10Ev();
extern void _ZN9S19559C133v11Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19559C16D1Ev,_ZTv0_n20_N9S19559C16D1Ev)();
extern void ABISELECT(_ZThn54288_N9S19559C16D1Ev,_ZThn29560_N9S19559C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19559C16D0Ev,_ZTv0_n20_N9S19559C16D0Ev)();
extern void ABISELECT(_ZThn54288_N9S19559C16D0Ev,_ZThn29560_N9S19559C16D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
extern void _ZN9S19559C173v14Ev();
static  VTBL_ENTRY vtc_S19559C16[] = {
  ABISELECT(54416,29640),
  ABISELECT(52208,28432),
  ABISELECT(54288,29560),
  ABISELECT(53776,29288),
  ABISELECT(53904,29360),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C16[0]),
  (VTBL_ENTRY)&_ZN9S19559C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19559C16D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v11Ev,
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-52208,-28432),
  (VTBL_ENTRY)&(_ZTI9S19559C16[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-53904,-29360),
  (VTBL_ENTRY)&(_ZTI9S19559C16[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  0,
  ABISELECT(-54288,-29560),
  ABISELECT(-384,-200),
  ABISELECT(-512,-272),
  ABISELECT(-54288,-29560),
  (VTBL_ENTRY)&(_ZTI9S19559C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C16D1Ev,_ZTv0_n20_N9S19559C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C16D0Ev,_ZTv0_n20_N9S19559C16D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
  0,
  ABISELECT(-54416,-29640),
  (VTBL_ENTRY)&(_ZTI9S19559C16[0]),
  (VTBL_ENTRY)&_ZN9S19559C173v14Ev,
};
extern VTBL_ENTRY _ZTV9S19559C16[];
extern void _ZN9S19559C13D1Ev();
extern void _ZN9S19559C13D0Ev();
extern void _ZN8S19559C92v6Ev();
extern void _ZN9S19559C133v10Ev();
extern void _ZN9S19559C133v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C13__9S19559C16[] = {
  ABISELECT(52208,28432),
  ABISELECT(54288,29560),
  ABISELECT(53776,29288),
  ABISELECT(53904,29360),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&_ZN9S19559C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19559C13D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v11Ev,
};
extern void _ZN8S19559C9D1Ev();
extern void _ZN8S19559C9D0Ev();
extern void _ZN8S19559C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C99S19559C13__9S19559C16[] = {
  ABISELECT(52208,28432),
  ABISELECT(54288,29560),
  ABISELECT(53776,29288),
  ABISELECT(53904,29360),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C99S19559C13__9S19559C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-53904,-29360),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev)();
extern void ABISELECT(_ZThn54288_N8S19559C9D1Ev,_ZThn29560_N8S19559C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev)();
extern void ABISELECT(_ZThn54288_N8S19559C9D0Ev,_ZThn29560_N8S19559C9D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__8S19559C99S19559C13__9S19559C16[] = {
  0,
  ABISELECT(-54288,-29560),
  ABISELECT(-384,-200),
  ABISELECT(-512,-272),
  ABISELECT(-54288,-29560),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__8S19559C99S19559C13__9S19559C16[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-52208,-28432),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__9S19559C13__9S19559C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-53904,-29360),
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19559C13D1Ev,_ZTv0_n20_N9S19559C13D1Ev)();
extern void ABISELECT(_ZThn54288_N9S19559C13D1Ev,_ZThn29560_N9S19559C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19559C13D0Ev,_ZTv0_n20_N9S19559C13D0Ev)();
extern void ABISELECT(_ZThn54288_N9S19559C13D0Ev,_ZThn29560_N9S19559C13D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__9S19559C13__9S19559C16[] = {
  0,
  ABISELECT(-54288,-29560),
  ABISELECT(-384,-200),
  ABISELECT(-512,-272),
  ABISELECT(-54288,-29560),
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C13D1Ev,_ZTv0_n20_N9S19559C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C13D0Ev,_ZTv0_n20_N9S19559C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__9S19559C13__9S19559C16[] = {
  0,
  0,
  0,
  ABISELECT(1568,856),
  ABISELECT(-52208,-28432),
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__9S19559C16[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C10[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C79S19559C10__9S19559C16[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__A1__9S19559C16[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C4D1Ev();
extern void _ZN8S19559C4D0Ev();
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__9S19559C16[] = {
  ABISELECT(-384,-200),
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C4[0]),
  (VTBL_ENTRY)&_ZN8S19559C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C4__9S19559C16[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(384,200),
  (VTBL_ENTRY)&(_ZTI8S19559C4[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
static  VTT_ENTRY vtt_S19559C16[] = {
  {&(_ZTV9S19559C16[7]),  7,41},
  {&(_tg__ZTV9S19559C13__9S19559C16[6]),  6,11},
  {&(_tg__ZTV8S19559C99S19559C13__9S19559C16[6]),  6,9},
  {&(_tg__ZTV8S19559C7__8S19559C99S19559C13__9S19559C16[5]),  5,7},
  {&(_tg__ZTV8S19559C4__8S19559C99S19559C13__9S19559C16[6]),  6,9},
  {&(_tg__ZTV9S19559C10__8S19559C99S19559C13__9S19559C16[6]),  6,9},
  {&(_tg__ZTV8S19559C7__9S19559C13__9S19559C16[5]),  5,7},
  {&(_tg__ZTV8S19559C4__9S19559C13__9S19559C16[6]),  6,9},
  {&(_tg__ZTV9S19559C10__9S19559C13__9S19559C16[6]),  6,9},
  {&(_ZTV9S19559C16[18]),  18,41},
  {&(_ZTV9S19559C16[26]),  26,41},
  {&(_ZTV9S19559C16[34]),  34,41},
  {&(_ZTV9S19559C16[40]),  40,41},
  {&(_tg__ZTV9S19559C10__9S19559C16[3]),  3,6},
  {&(_tg__ZTV8S19559C79S19559C10__9S19559C16[3]),  3,5},
  {&(_tg__ZTV8S19559C7__A1__9S19559C16[3]),  3,5},
  {&(_tg__ZTV8S19559C4__9S19559C16[4]),  4,7},
  {&(_tg__ZTV8S19559C7__8S19559C4__9S19559C16[5]),  5,7},
};
extern VTBL_ENTRY _ZTI9S19559C16[];
extern  VTBL_ENTRY _ZTV9S19559C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C16[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C13D0Ev,_ZTv0_n20_N9S19559C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N9S19559C13D0Ev,_ZThn29560_N9S19559C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C13D1Ev,_ZTv0_n20_N9S19559C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N9S19559C13D1Ev,_ZThn29560_N9S19559C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N8S19559C9D0Ev,_ZThn29560_N8S19559C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N8S19559C9D1Ev,_ZThn29560_N8S19559C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C16D0Ev,_ZTv0_n20_N9S19559C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N9S19559C16D0Ev,_ZThn29560_N9S19559C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C16D1Ev,_ZTv0_n20_N9S19559C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn54288_N9S19559C16D1Ev,_ZThn29560_N9S19559C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19559C16 = {  "S19559C16", // class name
  bases_S19559C16, 10,
  &(vtc_S19559C16[0]), // expected_vtbl_contents
  &(vtt_S19559C16[0]), // expected_vtt_contents
  ABISELECT(68384,37232), // object size
  NSPAIRA(_ZTI9S19559C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19559C16),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19559C16),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19559C1  : virtual S19559C2 , S19559C16 , virtual S2489C18 {
  char s19559c1f0;
  void *s19559c1f1[5];
  void *s19559c1f2;
  int s19559c1f3;
  short s19559c1f4;
  long double s19559c1f5[8];
  virtual  ~S19559C1(); // _ZN8S19559C1D2Ev
  virtual void  v1(); // _ZN8S19559C12v1Ev
  S19559C1(); // tgen
};
//SIG(1 S19559C1) C1{ VBC2{ BC3{ VBC4{ VBC5{ m Fc Fi FL FU6{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC7{ VBC5 v2 v3 Fp Fp Fi Fi FU8{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU8 Fp FL:3 FC5 Fl FU8} vd v4 FL FL FL Fl Fi FU8 Fc[10] Fi} BC9{ BC5 VBC7 VBC4 VBC10{ BC5 BC7 v5 Fp FD FC5[7] FD FU6 Fs Fl Fl} vd v6 Fc Fi[7] Fl[5] Fl FL FL FU11{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} BC5 BC7 vd v7 v8 v9 FU8 Fi Fl Fc Fp FC10 Fs} BC12{ BC5 VBC10 VBC4 BC13{ BC9 vd v10 v11 Fp Fp Fp Fi FC14{} Fl Fl} vd FD} BC15{ VBC10 VBC4 Fi Fp Fi FU8} BC10 vd v12 v13 Fc FL FD[4] Fi[4] Fp} BC16{ VBC10 VBC7 VBC4 BC13 VBC17{ v14 FD FC15[6] Fc Fp Fp Fi[6] Fi Fp Fl Fp Fi Fp Fp} vd Fc Fs[3] FC18{ BC5 VBC19{ VBC5 v15 v16 Fp Fp Fi Fi FU8 FL:0 FD FU8 Fp FL:3 FC5 Fl FU8} VBC20{ VBC5 VBC19 vd v17 FL FL FL Fl Fi FU8 Fc[10] Fi} VBC21{ BC5 BC19 v18 Fp FD FC5[7] FD FU6 Fs Fl Fl} VBC22{ VBC20 BC23{ BC5 VBC19 VBC20 VBC21 vd v19 Fc Fi[7] Fl[5] Fl FL FL FU11} BC5 BC19 vd v20 v21 v22 FU8 Fi Fl Fc Fp FC21 Fs} vd FL Fi Fp Fp Fl}[10] FC10 FL FL:5 Fi Fp[6] Fl[2] FL Fi} VBC24{ vd m FU6} vd v1 Fc Fp[5] Fp Fi Fs FD[8]}


 S19559C1 ::~S19559C1(){ note_dtor("S19559C1", this);}
void  S19559C1 ::v1(){vfunc_called(this, "_ZN8S19559C12v1Ev");}
S19559C1 ::S19559C1(){ note_ctor("S19559C1", this);} // tgen

static void Test_S19559C1()
{
  extern Class_Descriptor cd_S19559C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4596,10022)];
    init_test(&cd_S19559C1, buf);
    S19559C1 *dp, &lv = *(dp=new (buf) S19559C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(73520,40084), "sizeof(S19559C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19559C1)");
    check_base_class_offset(lv, (S2489C3*)(S19559C4*), ABISELECT(57376,31320), "S19559C1");
    /*is_ambiguous_... S19559C1::S19559C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C7*), ABISELECT(57376,31320), "S19559C1");
    /*is_ambiguous_... S19559C1::S19559C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C7*)(S19559C10*), ABISELECT(57376,31320), "S19559C1");
    /*is_ambiguous_... S19559C3::S19559C7 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C7*)(S19559C3*)(S19559C2*), ABISELECT(57376,31320), "S19559C1");
    /*is_ambiguous_... S19559C2::S19559C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C7*)(S19559C10*)(S19559C2*), ABISELECT(57376,31320), "S19559C1");
    check_base_class_offset(lv, (S19559C7*)(S19559C4*), ABISELECT(57504,31392), "S19559C1");
    /*is_ambiguous_... S19559C9::S19559C7 */ AMB_check_base_class_offset(lv, (S19559C7*)(S19559C9*)(S19559C3*)(S19559C2*), ABISELECT(57504,31392), "S19559C1");
    /*is_ambiguous_... S19559C9::S19559C7 */ AMB_check_base_class_offset(lv, (S19559C7*)(S19559C9*)(S19559C13*)(S19559C12*)(S19559C2*), ABISELECT(57504,31392), "S19559C1");
    /*is_ambiguous_... S19559C16::S19559C7 */ AMB_check_base_class_offset(lv, (S19559C7*)(S19559C16*), ABISELECT(57504,31392), "S19559C1");
    /*is_ambiguous_... S19559C9::S19559C7 */ AMB_check_base_class_offset(lv, (S19559C7*)(S19559C9*)(S19559C13*)(S19559C16*), ABISELECT(57504,31392), "S19559C1");
    check_base_class_offset(lv, (S19559C4*)(S19559C3*)(S19559C2*), ABISELECT(57256,31240), "S19559C1");
    check_base_class_offset(lv, (S19559C4*)(S19559C9*)(S19559C3*)(S19559C2*), ABISELECT(57256,31240), "S19559C1");
    check_base_class_offset(lv, (S19559C4*)(S19559C12*)(S19559C2*), ABISELECT(57256,31240), "S19559C1");
    check_base_class_offset(lv, (S19559C4*)(S19559C9*)(S19559C13*)(S19559C12*)(S19559C2*), ABISELECT(57256,31240), "S19559C1");
    check_base_class_offset(lv, (S19559C4*)(S19559C15*)(S19559C2*), ABISELECT(57256,31240), "S19559C1");
    check_base_class_offset(lv, (S19559C4*)(S19559C16*), ABISELECT(57256,31240), "S19559C1");
    check_base_class_offset(lv, (S19559C4*)(S19559C9*)(S19559C13*)(S19559C16*), ABISELECT(57256,31240), "S19559C1");
    /*is_ambiguous_... S19559C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C9*)(S19559C3*)(S19559C2*), ABISELECT(52416,28568), "S19559C1");
    /*is_ambiguous_... S19559C1::S19559C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C10*), ABISELECT(58272,31792), "S19559C1");
    /*is_ambiguous_... S19559C1::S19559C10 */ AMB_check_base_class_offset(lv, (S19559C7*)(S19559C10*), ABISELECT(57888,31592), "S19559C1");
    check_base_class_offset(lv, (S19559C10*)(S19559C9*)(S19559C3*)(S19559C2*), ABISELECT(57888,31592), "S19559C1");
    check_base_class_offset(lv, (S19559C10*)(S19559C12*)(S19559C2*), ABISELECT(57888,31592), "S19559C1");
    check_base_class_offset(lv, (S19559C10*)(S19559C9*)(S19559C13*)(S19559C12*)(S19559C2*), ABISELECT(57888,31592), "S19559C1");
    check_base_class_offset(lv, (S19559C10*)(S19559C15*)(S19559C2*), ABISELECT(57888,31592), "S19559C1");
    check_base_class_offset(lv, (S19559C10*)(S19559C16*), ABISELECT(57888,31592), "S19559C1");
    check_base_class_offset(lv, (S19559C10*)(S19559C9*)(S19559C13*)(S19559C16*), ABISELECT(57888,31592), "S19559C1");
    check_base_class_offset(lv, (S19559C9*)(S19559C3*)(S19559C2*), ABISELECT(52400,28564), "S19559C1");
    /*is_ambiguous_... S19559C3::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C3*)(S19559C2*), ABISELECT(52688,28732), "S19559C1");
    /*is_ambiguous_... S19559C3::S19559C7 */ AMB_check_base_class_offset(lv, (S19559C7*)(S19559C3*)(S19559C2*), ABISELECT(52816,28804), "S19559C1");
    check_base_class_offset(lv, (S19559C3*)(S19559C2*), ABISELECT(52400,28564), "S19559C1");
    /*is_ambiguous_... S19559C12::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C12*)(S19559C2*), ABISELECT(55344,30176), "S19559C1");
    /*is_ambiguous_... S19559C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C9*)(S19559C13*)(S19559C12*)(S19559C2*), ABISELECT(55024,29984), "S19559C1");
    check_base_class_offset(lv, (S19559C9*)(S19559C13*)(S19559C12*)(S19559C2*), ABISELECT(55008,29980), "S19559C1");
    check_base_class_offset(lv, (S19559C13*)(S19559C12*)(S19559C2*), ABISELECT(55008,29980), "S19559C1");
    check_base_class_offset(lv, (S19559C12*)(S19559C2*), ABISELECT(55008,29980), "S19559C1");
    check_base_class_offset(lv, (S19559C15*)(S19559C2*), ABISELECT(55488,30260), "S19559C1");
    /*is_ambiguous_... S19559C2::S19559C10 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C10*)(S19559C2*), ABISELECT(55968,30504), "S19559C1");
    /*is_ambiguous_... S19559C2::S19559C10 */ AMB_check_base_class_offset(lv, (S19559C7*)(S19559C10*)(S19559C2*), ABISELECT(55584,30304), "S19559C1");
    /*is_ambiguous_... S19559C2::S19559C10 */ AMB_check_base_class_offset(lv, (S19559C10*)(S19559C2*), ABISELECT(55584,30304), "S19559C1");
    check_base_class_offset(lv, (S19559C2*), ABISELECT(52400,28564), "S19559C1");
    /*is_ambiguous_... S19559C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S19559C9*)(S19559C13*)(S19559C16*), ABISELECT(16,4), "S19559C1");
    check_base_class_offset(lv, (S19559C9*)(S19559C13*)(S19559C16*), 0, "S19559C1");
    check_base_class_offset(lv, (S19559C13*)(S19559C16*), 0, "S19559C1");
    check_base_class_offset(lv, (S19559C17*)(S19559C16*), ABISELECT(59456,32448), "S19559C1");
    check_base_class_offset(lv, (S19559C16*), 0, "S19559C1");
    check_base_class_offset(lv, (S2489C18*), ABISELECT(73424,40040), "S19559C1");
    check_field_offset(lv, s19559c1f0, ABISELECT(52204,28432), "S19559C1.s19559c1f0");
    check_field_offset(lv, s19559c1f1, ABISELECT(52208,28436), "S19559C1.s19559c1f1");
    check_field_offset(lv, s19559c1f2, ABISELECT(52248,28456), "S19559C1.s19559c1f2");
    check_field_offset(lv, s19559c1f3, ABISELECT(52256,28460), "S19559C1.s19559c1f3");
    check_field_offset(lv, s19559c1f4, ABISELECT(52260,28464), "S19559C1.s19559c1f4");
    check_field_offset(lv, s19559c1f5, ABISELECT(52272,28468), "S19559C1.s19559c1f5");
    test_class_info(&lv, &cd_S19559C1);
    dp->~S19559C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19559C1(Test_S19559C1, "S19559C1", ABISELECT(73520,40084));

#else // __cplusplus

extern void _ZN8S19559C1C1Ev();
extern void _ZN8S19559C1D2Ev();
Name_Map name_map_S19559C1[] = {
  NSPAIR(_ZN8S19559C1C1Ev),
  NSPAIR(_ZN8S19559C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C4;
extern VTBL_ENTRY _ZTI8S19559C4[];
extern  VTBL_ENTRY _ZTV8S19559C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C4[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C10;
extern VTBL_ENTRY _ZTI9S19559C10[];
extern  VTBL_ENTRY _ZTV9S19559C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C10[];
extern Class_Descriptor cd_S19559C9;
extern VTBL_ENTRY _ZTI8S19559C9[];
extern  VTBL_ENTRY _ZTV8S19559C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C9[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C3;
extern VTBL_ENTRY _ZTI8S19559C3[];
extern  VTBL_ENTRY _ZTV8S19559C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C9;
extern VTBL_ENTRY _ZTI8S19559C9[];
extern  VTBL_ENTRY _ZTV8S19559C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C9[];
extern Class_Descriptor cd_S19559C13;
extern VTBL_ENTRY _ZTI9S19559C13[];
extern  VTBL_ENTRY _ZTV9S19559C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C13[];
extern Class_Descriptor cd_S19559C12;
extern VTBL_ENTRY _ZTI9S19559C12[];
extern  VTBL_ENTRY _ZTV9S19559C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C12[];
extern Class_Descriptor cd_S19559C15;
extern VTBL_ENTRY _ZTI9S19559C15[];
extern  VTBL_ENTRY _ZTV9S19559C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C15[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C7;
extern VTBL_ENTRY _ZTI8S19559C7[];
extern  VTBL_ENTRY _ZTV8S19559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C7[];
extern Class_Descriptor cd_S19559C10;
extern VTBL_ENTRY _ZTI9S19559C10[];
extern  VTBL_ENTRY _ZTV9S19559C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C10[];
extern Class_Descriptor cd_S19559C2;
extern VTBL_ENTRY _ZTI8S19559C2[];
extern  VTBL_ENTRY _ZTV8S19559C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C2[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S19559C9;
extern VTBL_ENTRY _ZTI8S19559C9[];
extern  VTBL_ENTRY _ZTV8S19559C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C9[];
extern Class_Descriptor cd_S19559C13;
extern VTBL_ENTRY _ZTI9S19559C13[];
extern  VTBL_ENTRY _ZTV9S19559C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C13[];
extern Class_Descriptor cd_S19559C17;
extern VTBL_ENTRY _ZTI9S19559C17[];
extern  VTBL_ENTRY _ZTV9S19559C17[];
extern Class_Descriptor cd_S19559C16;
extern VTBL_ENTRY _ZTI9S19559C16[];
extern  VTBL_ENTRY _ZTV9S19559C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19559C16[];
extern Class_Descriptor cd_S2489C18;
extern VTBL_ENTRY _ZTI8S2489C18[];
extern  VTBL_ENTRY _ZTV8S2489C18[];
static Base_Class bases_S19559C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(57376,31320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19559C7,    ABISELECT(57504,31392), //bcp->offset
    80, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19559C4,    ABISELECT(57256,31240), //bcp->offset
    71, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(52416,28568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(58272,31792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19559C7,    ABISELECT(57888,31592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19559C10,    ABISELECT(57888,31592), //bcp->offset
    87, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19559C9,    ABISELECT(52400,28564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(52688,28732), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19559C7,    ABISELECT(52816,28804), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19559C3,    ABISELECT(52400,28564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(55344,30176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(55024,29984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19559C9,    ABISELECT(55008,29980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19559C13,    ABISELECT(55008,29980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19559C12,    ABISELECT(55008,29980), //bcp->offset
    46, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19559C15,    ABISELECT(55488,30260), //bcp->offset
    57, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(55968,30504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19559C7,    ABISELECT(55584,30304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19559C10,    ABISELECT(55584,30304), //bcp->offset
    65, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19559C2,    ABISELECT(52400,28564), //bcp->offset
    15, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19559C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19559C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19559C17,    ABISELECT(59456,32448), //bcp->offset
    96, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19559C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C18,    ABISELECT(73424,40040), //bcp->offset
    100, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19559C1[];
extern void _ZN8S19559C1D1Ev();
extern void _ZN8S19559C1D0Ev();
extern void _ZN8S19559C92v6Ev();
extern void _ZN9S19559C133v10Ev();
extern void _ZN9S19559C133v11Ev();
extern void _ZN8S19559C12v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S19559C1D1Ev,_ZTv0_n28_N8S19559C1D1Ev)();
extern void ABISELECT(_ZThn52400_N8S19559C1D1Ev,_ZThn28564_N8S19559C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19559C1D0Ev,_ZTv0_n28_N8S19559C1D0Ev)();
extern void ABISELECT(_ZThn52400_N8S19559C1D0Ev,_ZThn28564_N8S19559C1D0Ev)() __attribute__((weak));
extern void _ZN8S19559C92v6Ev();
extern void _ZN8S19559C32v7Ev();
extern void _ZN8S19559C32v8Ev();
extern void _ZN8S19559C32v9Ev();
extern void _ZN8S19559C23v12Ev();
extern void _ZN8S19559C23v13Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void ABISELECT(_ZTvn2608_n56_N8S19559C1D1Ev,_ZTvn1416_n28_N8S19559C1D1Ev)();
extern void ABISELECT(_ZTvn2608_n56_N8S19559C1D0Ev,_ZTvn1416_n28_N8S19559C1D0Ev)();
extern void _ZN8S19559C92v6Ev();
extern void _ZN9S19559C133v10Ev();
extern void _ZN9S19559C133v11Ev();
extern void ABISELECT(_ZTvn3088_n56_N8S19559C1D1Ev,_ZTvn1696_n28_N8S19559C1D1Ev)();
extern void ABISELECT(_ZTvn3088_n56_N8S19559C1D0Ev,_ZTvn1696_n28_N8S19559C1D0Ev)();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
extern void ABISELECT(_ZTv0_n40_N8S19559C1D1Ev,_ZTv0_n20_N8S19559C1D1Ev)();
extern void ABISELECT(_ZThn57256_N8S19559C1D1Ev,_ZThn31240_N8S19559C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19559C1D0Ev,_ZTv0_n20_N8S19559C1D0Ev)();
extern void ABISELECT(_ZThn57256_N8S19559C1D0Ev,_ZThn31240_N8S19559C1D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
extern void _ZN9S19559C173v14Ev();
extern void ABISELECT(_ZTv0_n24_N8S19559C1D1Ev,_ZTv0_n12_N8S19559C1D1Ev)();
extern void ABISELECT(_ZThn73424_N8S19559C1D1Ev,_ZThn40040_N8S19559C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19559C1D0Ev,_ZTv0_n12_N8S19559C1D0Ev)();
extern void ABISELECT(_ZThn73424_N8S19559C1D0Ev,_ZThn40040_N8S19559C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19559C1[] = {
  ABISELECT(73424,40040),
  ABISELECT(52400,28564),
  ABISELECT(59456,32448),
  ABISELECT(57888,31592),
  ABISELECT(57256,31240),
  ABISELECT(57376,31320),
  ABISELECT(57504,31392),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C1[0]),
  (VTBL_ENTRY)&_ZN8S19559C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v11Ev,
  (VTBL_ENTRY)&_ZN8S19559C12v1Ev,
  ABISELECT(3184,1740),
  ABISELECT(2608,1416),
  ABISELECT(2608,1416),
  0,
  0,
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-52400,-28564),
  ABISELECT(5488,3028),
  ABISELECT(4856,2676),
  ABISELECT(4976,2756),
  ABISELECT(5104,2828),
  ABISELECT(-52400,-28564),
  (VTBL_ENTRY)&(_ZTI8S19559C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19559C1D1Ev,_ZTv0_n28_N8S19559C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19559C1D0Ev,_ZTv0_n28_N8S19559C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN8S19559C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19559C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19559C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19559C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19559C23v13Ev,
  ABISELECT(4560,2516),
  ABISELECT(-52816,-28804),
  (VTBL_ENTRY)&(_ZTI8S19559C1[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  ABISELECT(2880,1612),
  ABISELECT(2248,1260),
  ABISELECT(2368,1340),
  ABISELECT(2496,1412),
  ABISELECT(-55008,-29980),
  (VTBL_ENTRY)&(_ZTI8S19559C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2608_n56_N8S19559C1D1Ev,_ZTvn1416_n28_N8S19559C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2608_n56_N8S19559C1D0Ev,_ZTvn1416_n28_N8S19559C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v11Ev,
  ABISELECT(2016,1132),
  ABISELECT(1768,980),
  ABISELECT(1888,1060),
  ABISELECT(2400,1332),
  ABISELECT(-55488,-30260),
  (VTBL_ENTRY)&(_ZTI8S19559C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn3088_n56_N8S19559C1D1Ev,_ZTvn1696_n28_N8S19559C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn3088_n56_N8S19559C1D0Ev,_ZTvn1696_n28_N8S19559C1D0Ev),
  ABISELECT(1792,1016),
  ABISELECT(-55584,-30304),
  (VTBL_ENTRY)&(_ZTI8S19559C1[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
  0,
  ABISELECT(-57256,-31240),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-57256,-31240),
  (VTBL_ENTRY)&(_ZTI8S19559C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C1D1Ev,_ZTv0_n20_N8S19559C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C1D0Ev,_ZTv0_n20_N8S19559C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-57504,-31392),
  (VTBL_ENTRY)&(_ZTI8S19559C1[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-57888,-31592),
  (VTBL_ENTRY)&(_ZTI8S19559C1[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
  0,
  ABISELECT(-59456,-32448),
  (VTBL_ENTRY)&(_ZTI8S19559C1[0]),
  (VTBL_ENTRY)&_ZN9S19559C173v14Ev,
  ABISELECT(-73424,-40040),
  ABISELECT(-73424,-40040),
  (VTBL_ENTRY)&(_ZTI8S19559C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19559C1D1Ev,_ZTv0_n12_N8S19559C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19559C1D0Ev,_ZTv0_n12_N8S19559C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19559C1[];
extern void _ZN9S19559C16D1Ev();
extern void _ZN9S19559C16D0Ev();
extern void _ZN8S19559C92v6Ev();
extern void _ZN9S19559C133v10Ev();
extern void _ZN9S19559C133v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C16__8S19559C1[] = {
  ABISELECT(59456,32448),
  ABISELECT(57888,31592),
  ABISELECT(57256,31240),
  ABISELECT(57376,31320),
  ABISELECT(57504,31392),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C16[0]),
  (VTBL_ENTRY)&_ZN9S19559C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19559C16D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v11Ev,
};
extern void _ZN9S19559C13D1Ev();
extern void _ZN9S19559C13D0Ev();
extern void _ZN8S19559C92v6Ev();
extern void _ZN9S19559C133v10Ev();
extern void _ZN9S19559C133v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C139S19559C16__A1__8S19559C1[] = {
  ABISELECT(57888,31592),
  ABISELECT(57256,31240),
  ABISELECT(57376,31320),
  ABISELECT(57504,31392),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&_ZN9S19559C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19559C13D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v11Ev,
};
extern void _ZN8S19559C9D1Ev();
extern void _ZN8S19559C9D0Ev();
extern void _ZN8S19559C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C99S19559C139S19559C16__A2__8S19559C1[] = {
  ABISELECT(57888,31592),
  ABISELECT(57256,31240),
  ABISELECT(57376,31320),
  ABISELECT(57504,31392),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C99S19559C139S19559C16__A2__8S19559C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-57504,-31392),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev)();
extern void ABISELECT(_ZThn57256_N8S19559C9D1Ev,_ZThn31240_N8S19559C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev)();
extern void ABISELECT(_ZThn57256_N8S19559C9D0Ev,_ZThn31240_N8S19559C9D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__8S19559C99S19559C139S19559C16__A2__8S19559C1[] = {
  0,
  ABISELECT(-57256,-31240),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-57256,-31240),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__8S19559C99S19559C139S19559C16__A2__8S19559C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-57888,-31592),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__9S19559C139S19559C16__A1__8S19559C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-57504,-31392),
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19559C13D1Ev,_ZTv0_n20_N9S19559C13D1Ev)();
extern void ABISELECT(_ZThn57256_N9S19559C13D1Ev,_ZThn31240_N9S19559C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19559C13D0Ev,_ZTv0_n20_N9S19559C13D0Ev)();
extern void ABISELECT(_ZThn57256_N9S19559C13D0Ev,_ZThn31240_N9S19559C13D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__9S19559C139S19559C16__A1__8S19559C1[] = {
  0,
  ABISELECT(-57256,-31240),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-57256,-31240),
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C13D1Ev,_ZTv0_n20_N9S19559C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C13D0Ev,_ZTv0_n20_N9S19559C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__9S19559C139S19559C16__A1__8S19559C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-57888,-31592),
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__9S19559C16__8S19559C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-57888,-31592),
  (VTBL_ENTRY)&(_ZTI9S19559C16[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__A1__9S19559C16__8S19559C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-57504,-31392),
  (VTBL_ENTRY)&(_ZTI9S19559C16[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19559C16D1Ev,_ZTv0_n20_N9S19559C16D1Ev)();
extern void ABISELECT(_ZThn57256_N9S19559C16D1Ev,_ZThn31240_N9S19559C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19559C16D0Ev,_ZTv0_n20_N9S19559C16D0Ev)();
extern void ABISELECT(_ZThn57256_N9S19559C16D0Ev,_ZThn31240_N9S19559C16D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__9S19559C16__8S19559C1[] = {
  0,
  ABISELECT(-57256,-31240),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-57256,-31240),
  (VTBL_ENTRY)&(_ZTI9S19559C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C16D1Ev,_ZTv0_n20_N9S19559C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C16D0Ev,_ZTv0_n20_N9S19559C16D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN9S19559C173v14Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C17__9S19559C16__8S19559C1[] = {
  0,
  ABISELECT(-59456,-32448),
  (VTBL_ENTRY)&(_ZTI9S19559C16[0]),
  (VTBL_ENTRY)&_ZN9S19559C173v14Ev,
};
extern void _ZN8S19559C2D1Ev();
extern void _ZN8S19559C2D0Ev();
extern void _ZN8S19559C92v6Ev();
extern void _ZN8S19559C32v7Ev();
extern void _ZN8S19559C32v8Ev();
extern void _ZN8S19559C32v9Ev();
extern void _ZN8S19559C23v12Ev();
extern void _ZN8S19559C23v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C2__8S19559C1[] = {
  ABISELECT(5488,3028),
  ABISELECT(4856,2676),
  ABISELECT(4976,2756),
  ABISELECT(5104,2828),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C2[0]),
  (VTBL_ENTRY)&_ZN8S19559C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN8S19559C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19559C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19559C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19559C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19559C23v13Ev,
};
extern void _ZN8S19559C3D1Ev();
extern void _ZN8S19559C3D0Ev();
extern void _ZN8S19559C92v6Ev();
extern void _ZN8S19559C32v7Ev();
extern void _ZN8S19559C32v8Ev();
extern void _ZN8S19559C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C38S19559C2__8S19559C1[] = {
  ABISELECT(5488,3028),
  ABISELECT(4856,2676),
  ABISELECT(4976,2756),
  ABISELECT(5104,2828),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C3[0]),
  (VTBL_ENTRY)&_ZN8S19559C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN8S19559C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19559C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19559C32v9Ev,
};
extern void _ZN8S19559C9D1Ev();
extern void _ZN8S19559C9D0Ev();
extern void _ZN8S19559C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C98S19559C38S19559C2__8S19559C1[] = {
  ABISELECT(5488,3028),
  ABISELECT(4856,2676),
  ABISELECT(4976,2756),
  ABISELECT(5104,2828),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C98S19559C38S19559C2__8S19559C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-5104,-2828),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev)();
extern void ABISELECT(_ZThn4856_N8S19559C9D1Ev,_ZThn2676_N8S19559C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev)();
extern void ABISELECT(_ZThn4856_N8S19559C9D0Ev,_ZThn2676_N8S19559C9D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__8S19559C98S19559C38S19559C2__8S19559C1[] = {
  0,
  ABISELECT(-4856,-2676),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-4856,-2676),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__8S19559C98S19559C38S19559C2__8S19559C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-5488,-3028),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C78S19559C38S19559C2__A2__8S19559C1[] = {
  ABISELECT(4560,2516),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19559C3D1Ev,_ZTv0_n20_N8S19559C3D1Ev)();
extern void ABISELECT(_ZThn4856_N8S19559C3D1Ev,_ZThn2676_N8S19559C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19559C3D0Ev,_ZTv0_n20_N8S19559C3D0Ev)();
extern void ABISELECT(_ZThn4856_N8S19559C3D0Ev,_ZThn2676_N8S19559C3D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__8S19559C38S19559C2__8S19559C1[] = {
  0,
  ABISELECT(-4856,-2676),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-4856,-2676),
  (VTBL_ENTRY)&(_ZTI8S19559C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C3D1Ev,_ZTv0_n20_N8S19559C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C3D0Ev,_ZTv0_n20_N8S19559C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C38S19559C2__8S19559C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-5104,-2828),
  (VTBL_ENTRY)&(_ZTI8S19559C3[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__8S19559C38S19559C2__8S19559C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-5488,-3028),
  (VTBL_ENTRY)&(_ZTI8S19559C3[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__A__8S19559C38S19559C2__8S19559C1[] = {
  ABISELECT(4560,2516),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S19559C3[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN9S19559C12D1Ev();
extern void _ZN9S19559C12D0Ev();
extern void _ZN8S19559C92v6Ev();
extern void _ZN9S19559C133v10Ev();
extern void _ZN9S19559C133v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C128S19559C2__8S19559C1[] = {
  ABISELECT(2880,1612),
  ABISELECT(2248,1260),
  ABISELECT(2368,1340),
  ABISELECT(2496,1412),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C12[0]),
  (VTBL_ENTRY)&_ZN9S19559C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19559C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v11Ev,
};
extern void _ZN9S19559C13D1Ev();
extern void _ZN9S19559C13D0Ev();
extern void _ZN8S19559C92v6Ev();
extern void _ZN9S19559C133v10Ev();
extern void _ZN9S19559C133v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C139S19559C128S19559C2__8S19559C1[] = {
  ABISELECT(2880,1612),
  ABISELECT(2248,1260),
  ABISELECT(2368,1340),
  ABISELECT(2496,1412),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&_ZN9S19559C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19559C13D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v11Ev,
};
extern void _ZN8S19559C9D1Ev();
extern void _ZN8S19559C9D0Ev();
extern void _ZN8S19559C92v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C99S19559C139S19559C128S19559C2__A1__8S19559C1[] = {
  ABISELECT(2880,1612),
  ABISELECT(2248,1260),
  ABISELECT(2368,1340),
  ABISELECT(2496,1412),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C99S19559C139S19559C128S19559C2__A1__8S19559C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2496,-1412),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev)();
extern void ABISELECT(_ZThn2248_N8S19559C9D1Ev,_ZThn1260_N8S19559C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev)();
extern void ABISELECT(_ZThn2248_N8S19559C9D0Ev,_ZThn1260_N8S19559C9D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__8S19559C99S19559C139S19559C128S19559C2__A1__8S19559C1[] = {
  0,
  ABISELECT(-2248,-1260),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-2248,-1260),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__8S19559C99S19559C139S19559C128S19559C2__A1__8S19559C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-2880,-1612),
  (VTBL_ENTRY)&(_ZTI8S19559C9[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__9S19559C139S19559C128S19559C2__8S19559C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2496,-1412),
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19559C13D1Ev,_ZTv0_n20_N9S19559C13D1Ev)();
extern void ABISELECT(_ZThn2248_N9S19559C13D1Ev,_ZThn1260_N9S19559C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19559C13D0Ev,_ZTv0_n20_N9S19559C13D0Ev)();
extern void ABISELECT(_ZThn2248_N9S19559C13D0Ev,_ZThn1260_N9S19559C13D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__9S19559C139S19559C128S19559C2__8S19559C1[] = {
  0,
  ABISELECT(-2248,-1260),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-2248,-1260),
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C13D1Ev,_ZTv0_n20_N9S19559C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C13D0Ev,_ZTv0_n20_N9S19559C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__9S19559C139S19559C128S19559C2__8S19559C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-2880,-1612),
  (VTBL_ENTRY)&(_ZTI9S19559C13[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__9S19559C128S19559C2__8S19559C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-2880,-1612),
  (VTBL_ENTRY)&(_ZTI9S19559C12[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19559C12D1Ev,_ZTv0_n20_N9S19559C12D1Ev)();
extern void ABISELECT(_ZThn2248_N9S19559C12D1Ev,_ZThn1260_N9S19559C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19559C12D0Ev,_ZTv0_n20_N9S19559C12D0Ev)();
extern void ABISELECT(_ZThn2248_N9S19559C12D0Ev,_ZThn1260_N9S19559C12D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__9S19559C128S19559C2__8S19559C1[] = {
  0,
  ABISELECT(-2248,-1260),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-2248,-1260),
  (VTBL_ENTRY)&(_ZTI9S19559C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C12D1Ev,_ZTv0_n20_N9S19559C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C12D0Ev,_ZTv0_n20_N9S19559C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__A1__9S19559C128S19559C2__8S19559C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2496,-1412),
  (VTBL_ENTRY)&(_ZTI9S19559C12[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN9S19559C15D1Ev();
extern void _ZN9S19559C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C158S19559C2__8S19559C1[] = {
  ABISELECT(2016,1132),
  ABISELECT(1768,980),
  ABISELECT(1888,1060),
  ABISELECT(2400,1332),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C15[0]),
  (VTBL_ENTRY)&_ZN9S19559C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19559C15D0Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__9S19559C158S19559C2__8S19559C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-2400,-1332),
  (VTBL_ENTRY)&(_ZTI9S19559C15[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19559C15D1Ev,_ZTv0_n20_N9S19559C15D1Ev)();
extern void ABISELECT(_ZThn1768_N9S19559C15D1Ev,_ZThn980_N9S19559C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19559C15D0Ev,_ZTv0_n20_N9S19559C15D0Ev)();
extern void ABISELECT(_ZThn1768_N9S19559C15D0Ev,_ZThn980_N9S19559C15D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__9S19559C158S19559C2__8S19559C1[] = {
  0,
  ABISELECT(-1768,-980),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-1768,-980),
  (VTBL_ENTRY)&(_ZTI9S19559C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C15D1Ev,_ZTv0_n20_N9S19559C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19559C15D0Ev,_ZTv0_n20_N9S19559C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__A1__9S19559C158S19559C2__8S19559C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2016,-1132),
  (VTBL_ENTRY)&(_ZTI9S19559C15[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C108S19559C2__A1__8S19559C1[] = {
  ABISELECT(1792,1016),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C10[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C79S19559C108S19559C2__A3__8S19559C1[] = {
  ABISELECT(1792,1016),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19559C2D1Ev,_ZTv0_n20_N8S19559C2D1Ev)();
extern void ABISELECT(_ZThn4856_N8S19559C2D1Ev,_ZThn2676_N8S19559C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19559C2D0Ev,_ZTv0_n20_N8S19559C2D0Ev)();
extern void ABISELECT(_ZThn4856_N8S19559C2D0Ev,_ZThn2676_N8S19559C2D0Ev)() __attribute__((weak));
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__8S19559C2__8S19559C1[] = {
  0,
  ABISELECT(-4856,-2676),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-4856,-2676),
  (VTBL_ENTRY)&(_ZTI8S19559C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C2D1Ev,_ZTv0_n20_N8S19559C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19559C2D0Ev,_ZTv0_n20_N8S19559C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C2__8S19559C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-5104,-2828),
  (VTBL_ENTRY)&(_ZTI8S19559C2[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__8S19559C2__8S19559C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-5488,-3028),
  (VTBL_ENTRY)&(_ZTI8S19559C2[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C78S19559C3__A2__8S19559C2__8S19559C1[] = {
  ABISELECT(4560,2516),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S19559C2[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void ABISELECT(_ZThn2608_N8S19559C2D1Ev,_ZThn1416_N8S19559C2D1Ev)();
extern void ABISELECT(_ZThn2608_N8S19559C2D0Ev,_ZThn1416_N8S19559C2D0Ev)();
extern void _ZN8S19559C92v6Ev();
extern void _ZN9S19559C133v10Ev();
extern void _ZN9S19559C133v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C12__8S19559C2__8S19559C1[] = {
  ABISELECT(2880,1612),
  ABISELECT(2248,1260),
  ABISELECT(2368,1340),
  ABISELECT(2496,1412),
  ABISELECT(-2608,-1416),
  (VTBL_ENTRY)&(_ZTI8S19559C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2608_N8S19559C2D1Ev,_ZThn1416_N8S19559C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2608_N8S19559C2D0Ev,_ZThn1416_N8S19559C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19559C92v6Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v10Ev,
  (VTBL_ENTRY)&_ZN9S19559C133v11Ev,
};
extern void ABISELECT(_ZThn3088_N8S19559C2D1Ev,_ZThn1696_N8S19559C2D1Ev)();
extern void ABISELECT(_ZThn3088_N8S19559C2D0Ev,_ZThn1696_N8S19559C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19559C15__8S19559C2__8S19559C1[] = {
  ABISELECT(2016,1132),
  ABISELECT(1768,980),
  ABISELECT(1888,1060),
  ABISELECT(2400,1332),
  ABISELECT(-3088,-1696),
  (VTBL_ENTRY)&(_ZTI8S19559C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3088_N8S19559C2D1Ev,_ZThn1696_N8S19559C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3088_N8S19559C2D0Ev,_ZThn1696_N8S19559C2D0Ev),
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__A__8S19559C2__8S19559C1[] = {
  ABISELECT(1792,1016),
  ABISELECT(-3184,-1740),
  (VTBL_ENTRY)&(_ZTI8S19559C2[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C4D1Ev();
extern void _ZN8S19559C4D0Ev();
extern void _ZN8S19559C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C4__8S19559C1[] = {
  ABISELECT(248,152),
  ABISELECT(120,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C4[0]),
  (VTBL_ENTRY)&_ZN8S19559C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19559C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19559C42v4Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C4__8S19559C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-248,-152),
  (VTBL_ENTRY)&(_ZTI8S19559C4[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C7__8S19559C1[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
extern void _ZN9S19559C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19559C10__8S19559C1[] = {
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI9S19559C10[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19559C102v5Ev,
};
extern void _ZN8S19559C72v2Ev();
extern void _ZN8S19559C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19559C79S19559C10__A1__8S19559C1[] = {
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI8S19559C7[0]),
  (VTBL_ENTRY)&_ZN8S19559C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19559C72v3Ev,
};
static  VTT_ENTRY vtt_S19559C1[] = {
  {&(_ZTV8S19559C1[9]),  9,105},
  {&(_tg__ZTV9S19559C16__8S19559C1[7]),  7,12},
  {&(_tg__ZTV9S19559C139S19559C16__A1__8S19559C1[6]),  6,11},
  {&(_tg__ZTV8S19559C99S19559C139S19559C16__A2__8S19559C1[6]),  6,9},
  {&(_tg__ZTV8S19559C7__8S19559C99S19559C139S19559C16__A2__8S19559C1[5]),  5,7},
  {&(_tg__ZTV8S19559C4__8S19559C99S19559C139S19559C16__A2__8S19559C1[6]),  6,9},
  {&(_tg__ZTV9S19559C10__8S19559C99S19559C139S19559C16__A2__8S19559C1[6]),  6,9},
  {&(_tg__ZTV8S19559C7__9S19559C139S19559C16__A1__8S19559C1[5]),  5,7},
  {&(_tg__ZTV8S19559C4__9S19559C139S19559C16__A1__8S19559C1[6]),  6,9},
  {&(_tg__ZTV9S19559C10__9S19559C139S19559C16__A1__8S19559C1[6]),  6,9},
  {&(_tg__ZTV9S19559C10__9S19559C16__8S19559C1[6]),  6,9},
  {&(_tg__ZTV8S19559C7__A1__9S19559C16__8S19559C1[5]),  5,7},
  {&(_tg__ZTV8S19559C4__9S19559C16__8S19559C1[6]),  6,9},
  {&(_tg__ZTV9S19559C17__9S19559C16__8S19559C1[3]),  3,4},
  {&(_ZTV8S19559C1[33]),  33,105},
  {&(_ZTV8S19559C1[77]),  77,105},
  {&(_ZTV8S19559C1[85]),  85,105},
  {&(_ZTV8S19559C1[93]),  93,105},
  {&(_ZTV8S19559C1[44]),  44,105},
  {&(_ZTV8S19559C1[52]),  52,105},
  {&(_ZTV8S19559C1[63]),  63,105},
  {&(_ZTV8S19559C1[68]),  68,105},
  {&(_ZTV8S19559C1[99]),  99,105},
  {&(_ZTV8S19559C1[103]),  103,105},
  {&(_tg__ZTV8S19559C2__8S19559C1[6]),  6,14},
  {&(_tg__ZTV8S19559C38S19559C2__8S19559C1[6]),  6,12},
  {&(_tg__ZTV8S19559C98S19559C38S19559C2__8S19559C1[6]),  6,9},
  {&(_tg__ZTV8S19559C7__8S19559C98S19559C38S19559C2__8S19559C1[5]),  5,7},
  {&(_tg__ZTV8S19559C4__8S19559C98S19559C38S19559C2__8S19559C1[6]),  6,9},
  {&(_tg__ZTV9S19559C10__8S19559C98S19559C38S19559C2__8S19559C1[6]),  6,9},
  {&(_tg__ZTV8S19559C78S19559C38S19559C2__A2__8S19559C1[3]),  3,5},
  {&(_tg__ZTV8S19559C4__8S19559C38S19559C2__8S19559C1[6]),  6,9},
  {&(_tg__ZTV8S19559C7__8S19559C38S19559C2__8S19559C1[5]),  5,7},
  {&(_tg__ZTV9S19559C10__8S19559C38S19559C2__8S19559C1[6]),  6,9},
  {&(_tg__ZTV8S19559C7__A__8S19559C38S19559C2__8S19559C1[3]),  3,5},
  {&(_tg__ZTV9S19559C128S19559C2__8S19559C1[6]),  6,11},
  {&(_tg__ZTV9S19559C139S19559C128S19559C2__8S19559C1[6]),  6,11},
  {&(_tg__ZTV8S19559C99S19559C139S19559C128S19559C2__A1__8S19559C1[6]),  6,9},
  {&(_tg__ZTV8S19559C7__8S19559C99S19559C139S19559C128S19559C2__A1__8S19559C1[5]),  5,7},
  {&(_tg__ZTV8S19559C4__8S19559C99S19559C139S19559C128S19559C2__A1__8S19559C1[6]),  6,9},
  {&(_tg__ZTV9S19559C10__8S19559C99S19559C139S19559C128S19559C2__A1__8S19559C1[6]),  6,9},
  {&(_tg__ZTV8S19559C7__9S19559C139S19559C128S19559C2__8S19559C1[5]),  5,7},
  {&(_tg__ZTV8S19559C4__9S19559C139S19559C128S19559C2__8S19559C1[6]),  6,9},
  {&(_tg__ZTV9S19559C10__9S19559C139S19559C128S19559C2__8S19559C1[6]),  6,9},
  {&(_tg__ZTV9S19559C10__9S19559C128S19559C2__8S19559C1[6]),  6,9},
  {&(_tg__ZTV8S19559C4__9S19559C128S19559C2__8S19559C1[6]),  6,9},
  {&(_tg__ZTV8S19559C7__A1__9S19559C128S19559C2__8S19559C1[5]),  5,7},
  {&(_tg__ZTV9S19559C158S19559C2__8S19559C1[6]),  6,8},
  {&(_tg__ZTV9S19559C10__9S19559C158S19559C2__8S19559C1[6]),  6,9},
  {&(_tg__ZTV8S19559C4__9S19559C158S19559C2__8S19559C1[6]),  6,9},
  {&(_tg__ZTV8S19559C7__A1__9S19559C158S19559C2__8S19559C1[5]),  5,7},
  {&(_tg__ZTV9S19559C108S19559C2__A1__8S19559C1[3]),  3,6},
  {&(_tg__ZTV8S19559C79S19559C108S19559C2__A3__8S19559C1[3]),  3,5},
  {&(_tg__ZTV8S19559C4__8S19559C2__8S19559C1[6]),  6,9},
  {&(_tg__ZTV8S19559C7__8S19559C2__8S19559C1[5]),  5,7},
  {&(_tg__ZTV9S19559C10__8S19559C2__8S19559C1[6]),  6,9},
  {&(_tg__ZTV8S19559C78S19559C3__A2__8S19559C2__8S19559C1[3]),  3,5},
  {&(_tg__ZTV9S19559C12__8S19559C2__8S19559C1[6]),  6,11},
  {&(_tg__ZTV9S19559C15__8S19559C2__8S19559C1[6]),  6,8},
  {&(_tg__ZTV9S19559C10__A__8S19559C2__8S19559C1[3]),  3,6},
  {&(_tg__ZTV8S19559C4__8S19559C1[4]),  4,7},
  {&(_tg__ZTV8S19559C7__8S19559C4__8S19559C1[5]),  5,7},
  {&(_tg__ZTV8S19559C7__8S19559C1[3]),  3,5},
  {&(_tg__ZTV9S19559C10__8S19559C1[3]),  3,6},
  {&(_tg__ZTV8S19559C79S19559C10__A1__8S19559C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19559C1[];
extern  VTBL_ENTRY _ZTV8S19559C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19559C1[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C2D0Ev,_ZTv0_n20_N8S19559C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19559C2D0Ev,_ZThn2676_N8S19559C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C2D1Ev,_ZTv0_n20_N8S19559C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19559C2D1Ev,_ZThn2676_N8S19559C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C15D0Ev,_ZTv0_n20_N9S19559C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1768_N9S19559C15D0Ev,_ZThn980_N9S19559C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C15D1Ev,_ZTv0_n20_N9S19559C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1768_N9S19559C15D1Ev,_ZThn980_N9S19559C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C12D0Ev,_ZTv0_n20_N9S19559C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N9S19559C12D0Ev,_ZThn1260_N9S19559C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C12D1Ev,_ZTv0_n20_N9S19559C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N9S19559C12D1Ev,_ZThn1260_N9S19559C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C3D0Ev,_ZTv0_n20_N8S19559C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19559C3D0Ev,_ZThn2676_N8S19559C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C3D1Ev,_ZTv0_n20_N8S19559C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19559C3D1Ev,_ZThn2676_N8S19559C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C16D0Ev,_ZTv0_n20_N9S19559C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn57256_N9S19559C16D0Ev,_ZThn31240_N9S19559C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C16D1Ev,_ZTv0_n20_N9S19559C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn57256_N9S19559C16D1Ev,_ZThn31240_N9S19559C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C13D0Ev,_ZTv0_n20_N9S19559C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N9S19559C13D0Ev,_ZThn1260_N9S19559C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn57256_N9S19559C13D0Ev,_ZThn31240_N9S19559C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19559C13D1Ev,_ZTv0_n20_N9S19559C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N9S19559C13D1Ev,_ZThn1260_N9S19559C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn57256_N9S19559C13D1Ev,_ZThn31240_N9S19559C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C9D0Ev,_ZTv0_n20_N8S19559C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N8S19559C9D0Ev,_ZThn1260_N8S19559C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19559C9D0Ev,_ZThn2676_N8S19559C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn57256_N8S19559C9D0Ev,_ZThn31240_N8S19559C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C9D1Ev,_ZTv0_n20_N8S19559C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2248_N8S19559C9D1Ev,_ZThn1260_N8S19559C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4856_N8S19559C9D1Ev,_ZThn2676_N8S19559C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn57256_N8S19559C9D1Ev,_ZThn31240_N8S19559C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19559C1D0Ev,_ZTv0_n12_N8S19559C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn73424_N8S19559C1D0Ev,_ZThn40040_N8S19559C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19559C1D1Ev,_ZTv0_n12_N8S19559C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn73424_N8S19559C1D1Ev,_ZThn40040_N8S19559C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C1D0Ev,_ZTv0_n20_N8S19559C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn57256_N8S19559C1D0Ev,_ZThn31240_N8S19559C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19559C1D1Ev,_ZTv0_n20_N8S19559C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn57256_N8S19559C1D1Ev,_ZThn31240_N8S19559C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19559C1D0Ev,_ZTv0_n28_N8S19559C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52400_N8S19559C1D0Ev,_ZThn28564_N8S19559C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19559C1D1Ev,_ZTv0_n28_N8S19559C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52400_N8S19559C1D1Ev,_ZThn28564_N8S19559C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19559C1 = {  "S19559C1", // class name
  bases_S19559C1, 27,
  &(vtc_S19559C1[0]), // expected_vtbl_contents
  &(vtt_S19559C1[0]), // expected_vtt_contents
  ABISELECT(73520,40084), // object size
  NSPAIRA(_ZTI8S19559C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19559C1),105, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19559C1),65, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19277C3_nt  {
  virtual void  v1(); // _ZN11S19277C3_nt2v1Ev
  ~S19277C3_nt(); // tgen
  S19277C3_nt(); // tgen
};
//SIG(-1 S19277C3_nt) C1{ v1}


void  S19277C3_nt ::v1(){vfunc_called(this, "_ZN11S19277C3_nt2v1Ev");}
S19277C3_nt ::~S19277C3_nt(){ note_dtor("S19277C3_nt", this);} // tgen
S19277C3_nt ::S19277C3_nt(){ note_ctor("S19277C3_nt", this);} // tgen

//skip512 S19277C3_nt

#else // __cplusplus

extern void _ZN11S19277C3_ntC1Ev();
extern void _ZN11S19277C3_ntD1Ev();
Name_Map name_map_S19277C3_nt[] = {
  NSPAIR(_ZN11S19277C3_ntC1Ev),
  NSPAIR(_ZN11S19277C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY vtc_S19277C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19277C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
VTBL_ENTRY *P__ZTI11S19277C3_nt = _ZTI11S19277C3_nt; 
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
Class_Descriptor cd_S19277C3_nt = {  "S19277C3_nt", // class name
  0,0,//no base classes
  &(vtc_S19277C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S19277C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S19277C3_nt),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19277C4  : virtual S19277C3_nt {
  void *s19277c4f0[3];
  ::S2489C12_nt s19277c4f1;
  void *s19277c4f2;
  virtual void  v2(); // _ZN8S19277C42v2Ev
  virtual void  v3(); // _ZN8S19277C42v3Ev
  virtual void  v4(); // _ZN8S19277C42v4Ev
  ~S19277C4(); // tgen
  S19277C4(); // tgen
};
//SIG(-1 S19277C4) C1{ VBC2{ v4} v1 v2 v3 Fp[3] FC3{} Fp}


void  S19277C4 ::v2(){vfunc_called(this, "_ZN8S19277C42v2Ev");}
void  S19277C4 ::v3(){vfunc_called(this, "_ZN8S19277C42v3Ev");}
void  S19277C4 ::v4(){vfunc_called(this, "_ZN8S19277C42v4Ev");}
S19277C4 ::~S19277C4(){ note_dtor("S19277C4", this);} // tgen
S19277C4 ::S19277C4(){ note_ctor("S19277C4", this);} // tgen

static void Test_S19277C4()
{
  extern Class_Descriptor cd_S19277C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S19277C4, buf);
    S19277C4 *dp, &lv = *(dp=new (buf) S19277C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19277C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19277C4)");
    check_base_class_offset(lv, (S19277C3_nt*), 0, "S19277C4");
    check_field_offset(lv, s19277c4f0, ABISELECT(8,4), "S19277C4.s19277c4f0");
    check_field_offset(lv, s19277c4f1, ABISELECT(32,16), "S19277C4.s19277c4f1");
    check_field_offset(lv, s19277c4f2, ABISELECT(40,20), "S19277C4.s19277c4f2");
    test_class_info(&lv, &cd_S19277C4);
    dp->~S19277C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19277C4(Test_S19277C4, "S19277C4", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19277C4C1Ev();
extern void _ZN8S19277C4D1Ev();
Name_Map name_map_S19277C4[] = {
  NSPAIR(_ZN8S19277C4C1Ev),
  NSPAIR(_ZN8S19277C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
static Base_Class bases_S19277C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19277C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19277C4[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY vtc_S19277C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S19277C4[];
static  VTT_ENTRY vtt_S19277C4[] = {
  {&(_ZTV8S19277C4[4]),  4,8},
  {&(_ZTV8S19277C4[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
Class_Descriptor cd_S19277C4 = {  "S19277C4", // class name
  bases_S19277C4, 1,
  &(vtc_S19277C4[0]), // expected_vtbl_contents
  &(vtt_S19277C4[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19277C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19277C4),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19277C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19277C2  : S19277C3_nt {
  char s19277c2f0[5];
  ::S19277C4 s19277c2f1[2];
  int s19277c2f2;
  void *s19277c2f3[7];
  ::S19277C4 s19277c2f4;
  ::S19277C3_nt s19277c2f5;
  char s19277c2f6;
  int s19277c2f7;
  short s19277c2f8[5];
  int s19277c2f9[8];
  __tsi64 s19277c2f10;
  char s19277c2f11:8;
  ~S19277C2(); // tgen
  S19277C2(); // tgen
};
//SIG(-1 S19277C2) C1{ BC2{ v1} Fc[5] FC3{ VBC2 v2 v3 v4 Fp[3] FC4{} Fp}[2] Fi Fp[7] FC3 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}


S19277C2 ::~S19277C2(){ note_dtor("S19277C2", this);} // tgen
S19277C2 ::S19277C2(){ note_ctor("S19277C2", this);} // tgen

static void Test_S19277C2()
{
  extern Class_Descriptor cd_S19277C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,47)];
    init_test(&cd_S19277C2, buf);
    S19277C2 *dp, &lv = *(dp=new (buf) S19277C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,184), "sizeof(S19277C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19277C2)");
    check_base_class_offset(lv, (S19277C3_nt*), 0, "S19277C2");
    check_field_offset(lv, s19277c2f0, ABISELECT(8,4), "S19277C2.s19277c2f0");
    check_field_offset(lv, s19277c2f1, ABISELECT(16,12), "S19277C2.s19277c2f1");
    check_field_offset(lv, s19277c2f2, ABISELECT(112,60), "S19277C2.s19277c2f2");
    check_field_offset(lv, s19277c2f3, ABISELECT(120,64), "S19277C2.s19277c2f3");
    check_field_offset(lv, s19277c2f4, ABISELECT(176,92), "S19277C2.s19277c2f4");
    check_field_offset(lv, s19277c2f5, ABISELECT(224,116), "S19277C2.s19277c2f5");
    check_field_offset(lv, s19277c2f6, ABISELECT(232,120), "S19277C2.s19277c2f6");
    check_field_offset(lv, s19277c2f7, ABISELECT(236,124), "S19277C2.s19277c2f7");
    check_field_offset(lv, s19277c2f8, ABISELECT(240,128), "S19277C2.s19277c2f8");
    check_field_offset(lv, s19277c2f9, ABISELECT(252,140), "S19277C2.s19277c2f9");
    check_field_offset(lv, s19277c2f10, ABISELECT(288,172), "S19277C2.s19277c2f10");
    set_bf_and_test(lv, s19277c2f11, ABISELECT(296,180), 0, 8, 1, "S19277C2");
    set_bf_and_test(lv, s19277c2f11, ABISELECT(296,180), 0, 8, hide_sll(1LL<<7), "S19277C2");
    test_class_info(&lv, &cd_S19277C2);
    dp->~S19277C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19277C2(Test_S19277C2, "S19277C2", ABISELECT(304,184));

#else // __cplusplus

extern void _ZN8S19277C2C1Ev();
extern void _ZN8S19277C2D1Ev();
Name_Map name_map_S19277C2[] = {
  NSPAIR(_ZN8S19277C2C1Ev),
  NSPAIR(_ZN8S19277C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
static Base_Class bases_S19277C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19277C3_nt,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19277C2[];
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY vtc_S19277C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C2[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern VTBL_ENTRY _ZTI8S19277C2[];
extern  VTBL_ENTRY _ZTV8S19277C2[];
Class_Descriptor cd_S19277C2 = {  "S19277C2", // class name
  bases_S19277C2, 1,
  &(vtc_S19277C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,184), // object size
  NSPAIRA(_ZTI8S19277C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19277C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19277C8  : S19277C2 , virtual S19277C3_nt , virtual S19277C4 {
  int s19277c8f0;
  void *s19277c8f1;
  ~S19277C8(); // tgen
  S19277C8(); // tgen
};
//SIG(-1 S19277C8) C1{ BC2{ BC3{ v1} Fc[5] FC4{ VBC3 v2 v3 v4 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC3 VBC4 Fi Fp}


S19277C8 ::~S19277C8(){ note_dtor("S19277C8", this);} // tgen
S19277C8 ::S19277C8(){ note_ctor("S19277C8", this);} // tgen

static void Test_S19277C8()
{
  extern Class_Descriptor cd_S19277C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,55)];
    init_test(&cd_S19277C8, buf);
    S19277C8 *dp, &lv = *(dp=new (buf) S19277C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,216), "sizeof(S19277C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19277C8)");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C2*), 0, "S19277C8");
    check_base_class_offset(lv, (S19277C2*), 0, "S19277C8");
    /*is_ambiguous_... S19277C8::S19277C3_nt */ AMB_check_base_class_offset(lv, (S19277C3_nt*), ABISELECT(312,192), "S19277C8");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*), ABISELECT(312,192), "S19277C8");
    check_base_class_offset(lv, (S19277C4*), ABISELECT(312,192), "S19277C8");
    check_field_offset(lv, s19277c8f0, ABISELECT(300,184), "S19277C8.s19277c8f0");
    check_field_offset(lv, s19277c8f1, ABISELECT(304,188), "S19277C8.s19277c8f1");
    test_class_info(&lv, &cd_S19277C8);
    dp->~S19277C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19277C8(Test_S19277C8, "S19277C8", ABISELECT(360,216));

#else // __cplusplus

extern void _ZN8S19277C8C1Ev();
extern void _ZN8S19277C8D1Ev();
Name_Map name_map_S19277C8[] = {
  NSPAIR(_ZN8S19277C8C1Ev),
  NSPAIR(_ZN8S19277C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C2;
extern VTBL_ENTRY _ZTI8S19277C2[];
extern  VTBL_ENTRY _ZTV8S19277C2[];
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
static Base_Class bases_S19277C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19277C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19277C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19277C3_nt,    ABISELECT(312,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19277C4,    ABISELECT(312,192), //bcp->offset
    5, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19277C8[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY vtc_S19277C8[] = {
  ABISELECT(312,192),
  ABISELECT(312,192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C8[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-192),
  (VTBL_ENTRY)&(_ZTI8S19277C8[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S19277C8[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__8S19277C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
static  VTT_ENTRY vtt_S19277C8[] = {
  {&(_ZTV8S19277C8[4]),  4,16},
  {&(_ZTV8S19277C8[12]),  12,16},
  {&(_ZTV8S19277C8[12]),  12,16},
  {&(_tg__ZTV8S19277C4__8S19277C8[4]),  4,8},
  {&(_tg__ZTV8S19277C4__8S19277C8[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S19277C8[];
extern  VTBL_ENTRY _ZTV8S19277C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C8[];
Class_Descriptor cd_S19277C8 = {  "S19277C8", // class name
  bases_S19277C8, 4,
  &(vtc_S19277C8[0]), // expected_vtbl_contents
  &(vtt_S19277C8[0]), // expected_vtt_contents
  ABISELECT(360,216), // object size
  NSPAIRA(_ZTI8S19277C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19277C8),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19277C8),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19277C7  : S19277C4 {
  void *s19277c7f0;
  ::S19277C8 s19277c7f1;
  int s19277c7f2;
  void *s19277c7f3;
  int s19277c7f4[2];
  virtual void  v5(); // _ZN8S19277C72v5Ev
  virtual void  v6(); // _ZN8S19277C72v6Ev
  ~S19277C7(); // tgen
  S19277C7(); // tgen
};
//SIG(-1 S19277C7) C1{ BC2{ VBC3{ v3} v4 v5 v6 Fp[3] FC4{} Fp} v1 v2 Fp FC5{ BC6{ BC3 Fc[5] FC2[2] Fi Fp[7] FC2 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC3 VBC2 Fi Fp} Fi Fp Fi[2]}


void  S19277C7 ::v5(){vfunc_called(this, "_ZN8S19277C72v5Ev");}
void  S19277C7 ::v6(){vfunc_called(this, "_ZN8S19277C72v6Ev");}
S19277C7 ::~S19277C7(){ note_dtor("S19277C7", this);} // tgen
S19277C7 ::S19277C7(){ note_ctor("S19277C7", this);} // tgen

static void Test_S19277C7()
{
  extern Class_Descriptor cd_S19277C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(56,66)];
    init_test(&cd_S19277C7, buf);
    S19277C7 *dp, &lv = *(dp=new (buf) S19277C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(440,260), "sizeof(S19277C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19277C7)");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*), 0, "S19277C7");
    check_base_class_offset(lv, (S19277C4*), 0, "S19277C7");
    check_field_offset(lv, s19277c7f0, ABISELECT(48,24), "S19277C7.s19277c7f0");
    check_field_offset(lv, s19277c7f1, ABISELECT(56,28), "S19277C7.s19277c7f1");
    check_field_offset(lv, s19277c7f2, ABISELECT(416,244), "S19277C7.s19277c7f2");
    check_field_offset(lv, s19277c7f3, ABISELECT(424,248), "S19277C7.s19277c7f3");
    check_field_offset(lv, s19277c7f4, ABISELECT(432,252), "S19277C7.s19277c7f4");
    test_class_info(&lv, &cd_S19277C7);
    dp->~S19277C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19277C7(Test_S19277C7, "S19277C7", ABISELECT(440,260));

#else // __cplusplus

extern void _ZN8S19277C7C1Ev();
extern void _ZN8S19277C7D1Ev();
Name_Map name_map_S19277C7[] = {
  NSPAIR(_ZN8S19277C7C1Ev),
  NSPAIR(_ZN8S19277C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
static Base_Class bases_S19277C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19277C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19277C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19277C7[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
static  VTBL_ENTRY vtc_S19277C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C7[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
};
extern VTBL_ENTRY _ZTV8S19277C7[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__8S19277C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
static  VTT_ENTRY vtt_S19277C7[] = {
  {&(_ZTV8S19277C7[4]),  4,10},
  {&(_tg__ZTV8S19277C4__8S19277C7[4]),  4,8},
  {&(_tg__ZTV8S19277C4__8S19277C7[4]),  4,8},
  {&(_ZTV8S19277C7[4]),  4,10},
};
extern VTBL_ENTRY _ZTI8S19277C7[];
extern  VTBL_ENTRY _ZTV8S19277C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C7[];
Class_Descriptor cd_S19277C7 = {  "S19277C7", // class name
  bases_S19277C7, 2,
  &(vtc_S19277C7[0]), // expected_vtbl_contents
  &(vtt_S19277C7[0]), // expected_vtt_contents
  ABISELECT(440,260), // object size
  NSPAIRA(_ZTI8S19277C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19277C7),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19277C7),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19277C11  : S19277C3_nt {
  char s19277c11f0;
  __tsi64 s19277c11f1;
  int s19277c11f2[3];
  ::S19277C2 s19277c11f3;
  virtual void  v13(); // _ZN9S19277C113v13Ev
  ~S19277C11(); // tgen
  S19277C11(); // tgen
};
//SIG(-1 S19277C11) C1{ BC2{ v2} v1 Fc FL Fi[3] FC3{ BC2 Fc[5] FC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}}


void  S19277C11 ::v13(){vfunc_called(this, "_ZN9S19277C113v13Ev");}
S19277C11 ::~S19277C11(){ note_dtor("S19277C11", this);} // tgen
S19277C11 ::S19277C11(){ note_ctor("S19277C11", this);} // tgen

static void Test_S19277C11()
{
  extern Class_Descriptor cd_S19277C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,54)];
    init_test(&cd_S19277C11, buf);
    S19277C11 *dp, &lv = *(dp=new (buf) S19277C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,212), "sizeof(S19277C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19277C11)");
    check_base_class_offset(lv, (S19277C3_nt*), 0, "S19277C11");
    check_field_offset(lv, s19277c11f0, ABISELECT(8,4), "S19277C11.s19277c11f0");
    check_field_offset(lv, s19277c11f1, ABISELECT(16,8), "S19277C11.s19277c11f1");
    check_field_offset(lv, s19277c11f2, ABISELECT(24,16), "S19277C11.s19277c11f2");
    check_field_offset(lv, s19277c11f3, ABISELECT(40,28), "S19277C11.s19277c11f3");
    test_class_info(&lv, &cd_S19277C11);
    dp->~S19277C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19277C11(Test_S19277C11, "S19277C11", ABISELECT(344,212));

#else // __cplusplus

extern void _ZN9S19277C11C1Ev();
extern void _ZN9S19277C11D1Ev();
Name_Map name_map_S19277C11[] = {
  NSPAIR(_ZN9S19277C11C1Ev),
  NSPAIR(_ZN9S19277C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
static Base_Class bases_S19277C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19277C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19277C11[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN9S19277C113v13Ev();
static  VTBL_ENTRY vtc_S19277C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C11[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN9S19277C113v13Ev,
};
extern VTBL_ENTRY _ZTI9S19277C11[];
extern  VTBL_ENTRY _ZTV9S19277C11[];
Class_Descriptor cd_S19277C11 = {  "S19277C11", // class name
  bases_S19277C11, 1,
  &(vtc_S19277C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,212), // object size
  NSPAIRA(_ZTI9S19277C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19277C11),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19277C10  : virtual S19277C2 {
  void *s19277c10f0;
  __tsi64 s19277c10f1;
  void *s19277c10f2[6];
  ::S19277C3_nt s19277c10f3;
  ::S19277C11 s19277c10f4;
  void *s19277c10f5;
  int s19277c10f6;
  virtual void  v10(); // _ZN9S19277C103v10Ev
  ~S19277C10(); // tgen
  S19277C10(); // tgen
};
//SIG(-1 S19277C10) C1{ VBC2{ BC3{ v2} Fc[5] FC4{ VBC3 v4 v5 v6 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v1 Fp FL Fp[6] FC3 FC6{ BC3 v3 Fc FL Fi[3] FC2} Fp Fi}


void  S19277C10 ::v10(){vfunc_called(this, "_ZN9S19277C103v10Ev");}
S19277C10 ::~S19277C10(){ note_dtor("S19277C10", this);} // tgen
S19277C10 ::S19277C10(){ note_ctor("S19277C10", this);} // tgen

static void Test_S19277C10()
{
  extern Class_Descriptor cd_S19277C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(94,113)];
    init_test(&cd_S19277C10, buf);
    S19277C10 *dp, &lv = *(dp=new (buf) S19277C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(744,448), "sizeof(S19277C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19277C10)");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C2*), ABISELECT(440,264), "S19277C10");
    check_base_class_offset(lv, (S19277C2*), ABISELECT(440,264), "S19277C10");
    check_field_offset(lv, s19277c10f0, ABISELECT(8,4), "S19277C10.s19277c10f0");
    check_field_offset(lv, s19277c10f1, ABISELECT(16,8), "S19277C10.s19277c10f1");
    check_field_offset(lv, s19277c10f2, ABISELECT(24,16), "S19277C10.s19277c10f2");
    check_field_offset(lv, s19277c10f3, ABISELECT(72,40), "S19277C10.s19277c10f3");
    check_field_offset(lv, s19277c10f4, ABISELECT(80,44), "S19277C10.s19277c10f4");
    check_field_offset(lv, s19277c10f5, ABISELECT(424,256), "S19277C10.s19277c10f5");
    check_field_offset(lv, s19277c10f6, ABISELECT(432,260), "S19277C10.s19277c10f6");
    test_class_info(&lv, &cd_S19277C10);
    dp->~S19277C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19277C10(Test_S19277C10, "S19277C10", ABISELECT(744,448));

#else // __cplusplus

extern void _ZN9S19277C10C1Ev();
extern void _ZN9S19277C10D1Ev();
Name_Map name_map_S19277C10[] = {
  NSPAIR(_ZN9S19277C10C1Ev),
  NSPAIR(_ZN9S19277C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C2;
extern VTBL_ENTRY _ZTI8S19277C2[];
extern  VTBL_ENTRY _ZTV8S19277C2[];
static Base_Class bases_S19277C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19277C3_nt,    ABISELECT(440,264), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19277C2,    ABISELECT(440,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19277C10[];
extern void _ZN9S19277C103v10Ev();
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY vtc_S19277C10[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV9S19277C10[];
static  VTT_ENTRY vtt_S19277C10[] = {
  {&(_ZTV9S19277C10[3]),  3,8},
  {&(_ZTV9S19277C10[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S19277C10[];
extern  VTBL_ENTRY _ZTV9S19277C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C10[];
Class_Descriptor cd_S19277C10 = {  "S19277C10", // class name
  bases_S19277C10, 2,
  &(vtc_S19277C10[0]), // expected_vtbl_contents
  &(vtt_S19277C10[0]), // expected_vtt_contents
  ABISELECT(744,448), // object size
  NSPAIRA(_ZTI9S19277C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19277C10),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19277C10),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19277C9  {
  void *s19277c9f0[2];
  int s19277c9f1[2];
  void *s19277c9f2[15];
  int s19277c9f3;
  ::S19277C10 s19277c9f4;
  virtual void  v7(); // _ZN8S19277C92v7Ev
  virtual void  v8(); // _ZN8S19277C92v8Ev
  ~S19277C9(); // tgen
  S19277C9(); // tgen
};
//SIG(-1 S19277C9) C1{ v1 v2 Fp[2] Fi[2] Fp[15] Fi FC2{ VBC3{ BC4{ v4} Fc[5] FC5{ VBC4 v6 v7 v8 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v3 Fp FL Fp[6] FC4 FC7{ BC4 v5 Fc FL Fi[3] FC3} Fp Fi}}


void  S19277C9 ::v7(){vfunc_called(this, "_ZN8S19277C92v7Ev");}
void  S19277C9 ::v8(){vfunc_called(this, "_ZN8S19277C92v8Ev");}
S19277C9 ::~S19277C9(){ note_dtor("S19277C9", this);} // tgen
S19277C9 ::S19277C9(){ note_ctor("S19277C9", this);} // tgen

static void Test_S19277C9()
{
  extern Class_Descriptor cd_S19277C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(114,134)];
    init_test(&cd_S19277C9, buf);
    S19277C9 *dp, &lv = *(dp=new (buf) S19277C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(904,532), "sizeof(S19277C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19277C9)");
    check_field_offset(lv, s19277c9f0, ABISELECT(8,4), "S19277C9.s19277c9f0");
    check_field_offset(lv, s19277c9f1, ABISELECT(24,12), "S19277C9.s19277c9f1");
    check_field_offset(lv, s19277c9f2, ABISELECT(32,20), "S19277C9.s19277c9f2");
    check_field_offset(lv, s19277c9f3, ABISELECT(152,80), "S19277C9.s19277c9f3");
    check_field_offset(lv, s19277c9f4, ABISELECT(160,84), "S19277C9.s19277c9f4");
    test_class_info(&lv, &cd_S19277C9);
    dp->~S19277C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19277C9(Test_S19277C9, "S19277C9", ABISELECT(904,532));

#else // __cplusplus

extern void _ZN8S19277C9C1Ev();
extern void _ZN8S19277C9D1Ev();
Name_Map name_map_S19277C9[] = {
  NSPAIR(_ZN8S19277C9C1Ev),
  NSPAIR(_ZN8S19277C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19277C9[];
extern void _ZN8S19277C92v7Ev();
extern void _ZN8S19277C92v8Ev();
static  VTBL_ENTRY vtc_S19277C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C9[0]),
  (VTBL_ENTRY)&_ZN8S19277C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19277C92v8Ev,
};
extern VTBL_ENTRY _ZTI8S19277C9[];
extern  VTBL_ENTRY _ZTV8S19277C9[];
Class_Descriptor cd_S19277C9 = {  "S19277C9", // class name
  0,0,//no base classes
  &(vtc_S19277C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(904,532), // object size
  NSPAIRA(_ZTI8S19277C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19277C9),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19277C12_nt  {
  int s19277c12f0;
  virtual  ~S19277C12_nt(); // _ZN12S19277C12_ntD1Ev
  virtual void  v9(); // _ZN12S19277C12_nt2v9Ev
  S19277C12_nt(); // tgen
};
//SIG(-1 S19277C12_nt) C1{ vd v1 Fi}


 S19277C12_nt ::~S19277C12_nt(){ note_dtor("S19277C12_nt", this);}
void  S19277C12_nt ::v9(){vfunc_called(this, "_ZN12S19277C12_nt2v9Ev");}
S19277C12_nt ::S19277C12_nt(){ note_ctor("S19277C12_nt", this);} // tgen

//skip512 S19277C12_nt

#else // __cplusplus

extern void _ZN12S19277C12_ntC1Ev();
extern void _ZN12S19277C12_ntD1Ev();
Name_Map name_map_S19277C12_nt[] = {
  NSPAIR(_ZN12S19277C12_ntC1Ev),
  NSPAIR(_ZN12S19277C12_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI12S19277C12_nt[];
extern void _ZN12S19277C12_ntD1Ev();
extern void _ZN12S19277C12_ntD0Ev();
extern void _ZN12S19277C12_nt2v9Ev();
static  VTBL_ENTRY vtc_S19277C12_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S19277C12_nt[0]),
  (VTBL_ENTRY)&_ZN12S19277C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S19277C12_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S19277C12_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI12S19277C12_nt[];
VTBL_ENTRY *P__ZTI12S19277C12_nt = _ZTI12S19277C12_nt; 
extern  VTBL_ENTRY _ZTV12S19277C12_nt[];
Class_Descriptor cd_S19277C12_nt = {  "S19277C12_nt", // class name
  0,0,//no base classes
  &(vtc_S19277C12_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI12S19277C12_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV12S19277C12_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19277C14  : virtual S19277C4 , S19277C10 {
  void *s19277c14f0;
  ::S19277C3_nt s19277c14f1;
  __tsi64 s19277c14f2[8];
  ::S19277C4 s19277c14f3;
  void *s19277c14f4;
  virtual void  v11(); // _ZN9S19277C143v11Ev
  ~S19277C14(); // tgen
  S19277C14(); // tgen
};
//SIG(-1 S19277C14) C1{ VBC2{ VBC3{ v2} v3 v4 v5 Fp[3] FC4{} Fp} BC5{ VBC6{ BC3 Fc[5] FC2[2] Fi Fp[7] FC2 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v6 Fp FL Fp[6] FC3 FC7{ BC3 v7 Fc FL Fi[3] FC6} Fp Fi} v1 Fp FC3 FL[8] FC2 Fp}


void  S19277C14 ::v11(){vfunc_called(this, "_ZN9S19277C143v11Ev");}
S19277C14 ::~S19277C14(){ note_dtor("S19277C14", this);} // tgen
S19277C14 ::S19277C14(){ note_ctor("S19277C14", this);} // tgen

static void Test_S19277C14()
{
  extern Class_Descriptor cd_S19277C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(117,144)];
    init_test(&cd_S19277C14, buf);
    S19277C14 *dp, &lv = *(dp=new (buf) S19277C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(928,572), "sizeof(S19277C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19277C14)");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*), ABISELECT(576,364), "S19277C14");
    check_base_class_offset(lv, (S19277C4*), ABISELECT(576,364), "S19277C14");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C2*), ABISELECT(624,388), "S19277C14");
    check_base_class_offset(lv, (S19277C2*)(S19277C10*), ABISELECT(624,388), "S19277C14");
    check_base_class_offset(lv, (S19277C10*), 0, "S19277C14");
    check_field_offset(lv, s19277c14f0, ABISELECT(440,264), "S19277C14.s19277c14f0");
    check_field_offset(lv, s19277c14f1, ABISELECT(448,268), "S19277C14.s19277c14f1");
    check_field_offset(lv, s19277c14f2, ABISELECT(456,272), "S19277C14.s19277c14f2");
    check_field_offset(lv, s19277c14f3, ABISELECT(520,336), "S19277C14.s19277c14f3");
    check_field_offset(lv, s19277c14f4, ABISELECT(568,360), "S19277C14.s19277c14f4");
    test_class_info(&lv, &cd_S19277C14);
    dp->~S19277C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19277C14(Test_S19277C14, "S19277C14", ABISELECT(928,572));

#else // __cplusplus

extern void _ZN9S19277C14C1Ev();
extern void _ZN9S19277C14D1Ev();
Name_Map name_map_S19277C14[] = {
  NSPAIR(_ZN9S19277C14C1Ev),
  NSPAIR(_ZN9S19277C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C2;
extern VTBL_ENTRY _ZTI8S19277C2[];
extern  VTBL_ENTRY _ZTV8S19277C2[];
extern Class_Descriptor cd_S19277C10;
extern VTBL_ENTRY _ZTI9S19277C10[];
extern  VTBL_ENTRY _ZTV9S19277C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C10[];
static Base_Class bases_S19277C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19277C3_nt,    ABISELECT(576,364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19277C4,    ABISELECT(576,364), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19277C3_nt,    ABISELECT(624,388), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19277C2,    ABISELECT(624,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19277C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19277C14[];
extern void _ZN9S19277C103v10Ev();
extern void _ZN9S19277C143v11Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY vtc_S19277C14[] = {
  ABISELECT(576,364),
  ABISELECT(576,364),
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19277C143v11Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-576,-364),
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV9S19277C14[];
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C10__9S19277C14[] = {
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__9S19277C10__9S19277C14[] = {
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__9S19277C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
static  VTT_ENTRY vtt_S19277C14[] = {
  {&(_ZTV9S19277C14[5]),  5,22},
  {&(_tg__ZTV9S19277C10__9S19277C14[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__9S19277C10__9S19277C14[3]),  3,4},
  {&(_ZTV9S19277C14[14]),  14,22},
  {&(_ZTV9S19277C14[14]),  14,22},
  {&(_ZTV9S19277C14[21]),  21,22},
  {&(_tg__ZTV8S19277C4__9S19277C14[4]),  4,8},
  {&(_tg__ZTV8S19277C4__9S19277C14[4]),  4,8},
};
extern VTBL_ENTRY _ZTI9S19277C14[];
extern  VTBL_ENTRY _ZTV9S19277C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C14[];
Class_Descriptor cd_S19277C14 = {  "S19277C14", // class name
  bases_S19277C14, 5,
  &(vtc_S19277C14[0]), // expected_vtbl_contents
  &(vtt_S19277C14[0]), // expected_vtt_contents
  ABISELECT(928,572), // object size
  NSPAIRA(_ZTI9S19277C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19277C14),22, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19277C14),8, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19277C15  : virtual S19277C3_nt , S19277C7 , virtual S19277C10 {
  void *s19277c15f0[2];
  int s19277c15f1[9];
  ::S19277C11 s19277c15f2;
  ::S19277C3_nt s19277c15f3[9];
  __tsi64 s19277c15f4;
  long double s19277c15f5;
  void *s19277c15f6;
  __tsi64 s19277c15f7;
  long s19277c15f8;
  __tsi64 s19277c15f9;
  virtual  ~S19277C15(); // _ZN9S19277C15D2Ev
  virtual void  v12(); // _ZN9S19277C153v12Ev
  S19277C15(); // tgen
};
//SIG(-1 S19277C15) C1{ VBC2{ v2} BC3{ BC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp} v6 v7 Fp FC6{ BC7{ BC2 Fc[5] FC4[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC2 VBC4 Fi Fp} Fi Fp Fi[2]} VBC8{ VBC7 v8 Fp FL Fp[6] FC2 FC9{ BC2 v9 Fc FL Fi[3] FC7} Fp Fi} vd v1 Fp[2] Fi[9] FC9 FC2[9] FL FD Fp FL Fl FL}


 S19277C15 ::~S19277C15(){ note_dtor("S19277C15", this);}
void  S19277C15 ::v12(){vfunc_called(this, "_ZN9S19277C153v12Ev");}
S19277C15 ::S19277C15(){ note_ctor("S19277C15", this);} // tgen

static void Test_S19277C15()
{
  extern Class_Descriptor cd_S19277C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(109,262)];
    init_test(&cd_S19277C15, buf);
    S19277C15 *dp, &lv = *(dp=new (buf) S19277C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1728,1044), "sizeof(S19277C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19277C15)");
    /*is_ambiguous_... S19277C15::S19277C3_nt */ AMB_check_base_class_offset(lv, (S19277C3_nt*), 0, "S19277C15");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*)(S19277C7*), 0, "S19277C15");
    check_base_class_offset(lv, (S19277C4*)(S19277C7*), 0, "S19277C15");
    check_base_class_offset(lv, (S19277C7*), 0, "S19277C15");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C2*), ABISELECT(1416,860), "S19277C15");
    check_base_class_offset(lv, (S19277C2*)(S19277C10*), ABISELECT(1416,860), "S19277C15");
    check_base_class_offset(lv, (S19277C10*), ABISELECT(976,596), "S19277C15");
    check_field_offset(lv, s19277c15f0, ABISELECT(440,260), "S19277C15.s19277c15f0");
    check_field_offset(lv, s19277c15f1, ABISELECT(456,268), "S19277C15.s19277c15f1");
    check_field_offset(lv, s19277c15f2, ABISELECT(496,304), "S19277C15.s19277c15f2");
    check_field_offset(lv, s19277c15f3, ABISELECT(840,516), "S19277C15.s19277c15f3");
    check_field_offset(lv, s19277c15f4, ABISELECT(912,552), "S19277C15.s19277c15f4");
    check_field_offset(lv, s19277c15f5, ABISELECT(928,560), "S19277C15.s19277c15f5");
    check_field_offset(lv, s19277c15f6, ABISELECT(944,572), "S19277C15.s19277c15f6");
    check_field_offset(lv, s19277c15f7, ABISELECT(952,576), "S19277C15.s19277c15f7");
    check_field_offset(lv, s19277c15f8, ABISELECT(960,584), "S19277C15.s19277c15f8");
    check_field_offset(lv, s19277c15f9, ABISELECT(968,588), "S19277C15.s19277c15f9");
    test_class_info(&lv, &cd_S19277C15);
    dp->~S19277C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19277C15(Test_S19277C15, "S19277C15", ABISELECT(1728,1044));

#else // __cplusplus

extern void _ZN9S19277C15C1Ev();
extern void _ZN9S19277C15D2Ev();
Name_Map name_map_S19277C15[] = {
  NSPAIR(_ZN9S19277C15C1Ev),
  NSPAIR(_ZN9S19277C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C7;
extern VTBL_ENTRY _ZTI8S19277C7[];
extern  VTBL_ENTRY _ZTV8S19277C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C7[];
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C2;
extern VTBL_ENTRY _ZTI8S19277C2[];
extern  VTBL_ENTRY _ZTV8S19277C2[];
extern Class_Descriptor cd_S19277C10;
extern VTBL_ENTRY _ZTI9S19277C10[];
extern  VTBL_ENTRY _ZTV9S19277C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C10[];
static Base_Class bases_S19277C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19277C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19277C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19277C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19277C3_nt,    ABISELECT(1416,860), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19277C2,    ABISELECT(1416,860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19277C10,    ABISELECT(976,596), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19277C15[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void _ZN9S19277C15D1Ev();
extern void _ZN9S19277C15D0Ev();
extern void _ZN9S19277C153v12Ev();
extern void _ZN9S19277C103v10Ev();
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY vtc_S19277C15[] = {
  ABISELECT(1416,860),
  ABISELECT(976,596),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C15[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  (VTBL_ENTRY)&_ZN9S19277C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19277C15D0Ev,
  (VTBL_ENTRY)&_ZN9S19277C153v12Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI9S19277C15[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  0,
  ABISELECT(-1416,-860),
  (VTBL_ENTRY)&(_ZTI9S19277C15[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV9S19277C15[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C7__9S19277C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C7[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C48S19277C7__9S19277C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C10__9S19277C15[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__9S19277C10__9S19277C15[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
static  VTT_ENTRY vtt_S19277C15[] = {
  {&(_ZTV9S19277C15[6]),  6,24},
  {&(_tg__ZTV8S19277C7__9S19277C15[4]),  4,10},
  {&(_tg__ZTV8S19277C48S19277C7__9S19277C15[4]),  4,8},
  {&(_tg__ZTV8S19277C48S19277C7__9S19277C15[4]),  4,8},
  {&(_tg__ZTV8S19277C7__9S19277C15[4]),  4,10},
  {&(_ZTV9S19277C15[6]),  6,24},
  {&(_ZTV9S19277C15[19]),  19,24},
  {&(_ZTV9S19277C15[23]),  23,24},
  {&(_tg__ZTV9S19277C10__9S19277C15[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__9S19277C10__9S19277C15[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19277C15[];
extern  VTBL_ENTRY _ZTV9S19277C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C15[];
Class_Descriptor cd_S19277C15 = {  "S19277C15", // class name
  bases_S19277C15, 6,
  &(vtc_S19277C15[0]), // expected_vtbl_contents
  &(vtt_S19277C15[0]), // expected_vtt_contents
  ABISELECT(1728,1044), // object size
  NSPAIRA(_ZTI9S19277C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19277C15),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19277C15),10, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19277C13  : S19277C4 , S19277C14 , virtual S19277C15 , virtual S19277C9 , virtual S19277C11 {
  short s19277c13f0;
  ::S2489C12_nt s19277c13f1;
  char s19277c13f2;
  void *s19277c13f3[2];
  int s19277c13f4[2];
  __tsi64 s19277c13f5;
  virtual void  v14(); // _ZN9S19277C133v14Ev
  ~S19277C13(); // tgen
  S19277C13(); // tgen
};
//SIG(-1 S19277C13) C1{ BC2{ VBC3{ v2} v3 v4 v5 Fp[3] FC4{} Fp} BC5{ VBC2 BC6{ VBC7{ BC3 Fc[5] FC2[2] Fi Fp[7] FC2 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v6 Fp FL Fp[6] FC3 FC8{ BC3 v13 Fc FL Fi[3] FC7} Fp Fi} v7 Fp FC3 FL[8] FC2 Fp} VBC9{ VBC3 BC10{ BC2 v8 v9 Fp FC11{ BC7 VBC3 VBC2 Fi Fp} Fi Fp Fi[2]} VBC6 vd v10 Fp[2] Fi[9] FC8 FC3[9] FL FD Fp FL Fl FL} VBC12{ v11 v12 Fp[2] Fi[2] Fp[15] Fi FC6} VBC8 v1 Fs FC4 Fc Fp[2] Fi[2] FL}


void  S19277C13 ::v14(){vfunc_called(this, "_ZN9S19277C133v14Ev");}
S19277C13 ::~S19277C13(){ note_dtor("S19277C13", this);} // tgen
S19277C13 ::S19277C13(){ note_ctor("S19277C13", this);} // tgen

static void Test_S19277C13()
{
  extern Class_Descriptor cd_S19277C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(232,558)];
    init_test(&cd_S19277C13, buf);
    S19277C13 *dp, &lv = *(dp=new (buf) S19277C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3696,2228), "sizeof(S19277C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19277C13)");
    /*is_ambiguous_... S19277C13::S19277C4 */ AMB_check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*), 0, "S19277C13");
    /*is_ambiguous_... S19277C13::S19277C4 */ AMB_check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*), 0, "S19277C13");
    /*is_ambiguous_... S19277C15::S19277C3_nt */ AMB_check_base_class_offset(lv, (S19277C3_nt*)(S19277C15*), 0, "S19277C13");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*)(S19277C7*)(S19277C15*), 0, "S19277C13");
    /*is_ambiguous_... S19277C13::S19277C4 */ AMB_check_base_class_offset(lv, (S19277C4*), 0, "S19277C13");
    check_base_class_offset(lv, (S19277C4*)(S19277C14*), ABISELECT(664,416), "S19277C13");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C2*), ABISELECT(712,440), "S19277C13");
    check_base_class_offset(lv, (S19277C2*)(S19277C10*)(S19277C14*), ABISELECT(712,440), "S19277C13");
    /*is_ambiguous_... S19277C13::S19277C10 */ AMB_check_base_class_offset(lv, (S19277C2*)(S19277C10*), ABISELECT(712,440), "S19277C13");
    check_base_class_offset(lv, (S19277C10*)(S19277C14*), ABISELECT(48,24), "S19277C13");
    check_base_class_offset(lv, (S19277C14*), ABISELECT(48,24), "S19277C13");
    check_base_class_offset(lv, (S19277C4*)(S19277C7*)(S19277C15*), ABISELECT(1024,624), "S19277C13");
    check_base_class_offset(lv, (S19277C7*)(S19277C15*), ABISELECT(1024,624), "S19277C13");
    check_base_class_offset(lv, (S19277C10*)(S19277C15*), ABISELECT(2000,1220), "S19277C13");
    check_base_class_offset(lv, (S19277C15*), ABISELECT(1024,624), "S19277C13");
    check_base_class_offset(lv, (S19277C9*), ABISELECT(2440,1484), "S19277C13");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C11*), ABISELECT(3344,2016), "S19277C13");
    check_base_class_offset(lv, (S19277C11*), ABISELECT(3344,2016), "S19277C13");
    check_field_offset(lv, s19277c13f0, ABISELECT(624,388), "S19277C13.s19277c13f0");
    check_field_offset(lv, s19277c13f1, ABISELECT(626,390), "S19277C13.s19277c13f1");
    check_field_offset(lv, s19277c13f2, ABISELECT(627,391), "S19277C13.s19277c13f2");
    check_field_offset(lv, s19277c13f3, ABISELECT(632,392), "S19277C13.s19277c13f3");
    check_field_offset(lv, s19277c13f4, ABISELECT(648,400), "S19277C13.s19277c13f4");
    check_field_offset(lv, s19277c13f5, ABISELECT(656,408), "S19277C13.s19277c13f5");
    test_class_info(&lv, &cd_S19277C13);
    dp->~S19277C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19277C13(Test_S19277C13, "S19277C13", ABISELECT(3696,2228));

#else // __cplusplus

extern void _ZN9S19277C13C1Ev();
extern void _ZN9S19277C13D1Ev();
Name_Map name_map_S19277C13[] = {
  NSPAIR(_ZN9S19277C13C1Ev),
  NSPAIR(_ZN9S19277C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C2;
extern VTBL_ENTRY _ZTI8S19277C2[];
extern  VTBL_ENTRY _ZTV8S19277C2[];
extern Class_Descriptor cd_S19277C10;
extern VTBL_ENTRY _ZTI9S19277C10[];
extern  VTBL_ENTRY _ZTV9S19277C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C10[];
extern Class_Descriptor cd_S19277C14;
extern VTBL_ENTRY _ZTI9S19277C14[];
extern  VTBL_ENTRY _ZTV9S19277C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C14[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C7;
extern VTBL_ENTRY _ZTI8S19277C7[];
extern  VTBL_ENTRY _ZTV8S19277C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C7[];
extern Class_Descriptor cd_S19277C10;
extern VTBL_ENTRY _ZTI9S19277C10[];
extern  VTBL_ENTRY _ZTV9S19277C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C10[];
extern Class_Descriptor cd_S19277C15;
extern VTBL_ENTRY _ZTI9S19277C15[];
extern  VTBL_ENTRY _ZTV9S19277C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C15[];
extern Class_Descriptor cd_S19277C9;
extern VTBL_ENTRY _ZTI8S19277C9[];
extern  VTBL_ENTRY _ZTV8S19277C9[];
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C11;
extern VTBL_ENTRY _ZTI9S19277C11[];
extern  VTBL_ENTRY _ZTV9S19277C11[];
static Base_Class bases_S19277C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19277C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19277C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19277C4,    ABISELECT(664,416), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19277C3_nt,    ABISELECT(712,440), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19277C2,    ABISELECT(712,440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19277C10,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19277C14,    ABISELECT(48,24), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19277C4,    ABISELECT(1024,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19277C7,    ABISELECT(1024,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19277C10,    ABISELECT(2000,1220), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19277C15,    ABISELECT(1024,624), //bcp->offset
    39, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19277C9,    ABISELECT(2440,1484), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19277C3_nt,    ABISELECT(3344,2016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19277C11,    ABISELECT(3344,2016), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19277C13[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN9S19277C133v14Ev();
extern void _ZN9S19277C13D1Ev();
extern void _ZN9S19277C13D0Ev();
extern void _ZN9S19277C103v10Ev();
extern void _ZN9S19277C143v11Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19277C13D1Ev,_ZTv0_n48_N9S19277C13D1Ev)();
extern void ABISELECT(_ZThn1024_N9S19277C13D1Ev,_ZThn624_N9S19277C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19277C13D0Ev,_ZTv0_n48_N9S19277C13D0Ev)();
extern void ABISELECT(_ZThn1024_N9S19277C13D0Ev,_ZThn624_N9S19277C13D0Ev)() __attribute__((weak));
extern void _ZN9S19277C153v12Ev();
extern void _ZN9S19277C103v10Ev();
extern void _ZN8S19277C92v7Ev();
extern void _ZN8S19277C92v8Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN9S19277C113v13Ev();
static  VTBL_ENTRY vtc_S19277C13[] = {
  ABISELECT(3344,2016),
  ABISELECT(2440,1484),
  ABISELECT(2000,1220),
  ABISELECT(1024,624),
  ABISELECT(712,440),
  ABISELECT(664,416),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19277C133v14Ev,
  (VTBL_ENTRY)&_ZN9S19277C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19277C13D0Ev,
  ABISELECT(-48,-24),
  ABISELECT(616,392),
  ABISELECT(664,416),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19277C143v11Ev,
  0,
  0,
  0,
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  0,
  ABISELECT(-712,-440),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  0,
  ABISELECT(-1024,-624),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-184),
  ABISELECT(976,596),
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19277C13D1Ev,_ZTv0_n48_N9S19277C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19277C13D0Ev,_ZTv0_n48_N9S19277C13D0Ev),
  (VTBL_ENTRY)&_ZN9S19277C153v12Ev,
  0,
  ABISELECT(-1288,-780),
  ABISELECT(-2000,-1220),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  0,
  0,
  ABISELECT(-2440,-1484),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN8S19277C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19277C92v8Ev,
  0,
  0,
  ABISELECT(-3344,-2016),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN9S19277C113v13Ev,
};
extern VTBL_ENTRY _ZTV9S19277C13[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__A__9S19277C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN9S19277C103v10Ev();
extern void _ZN9S19277C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C14__9S19277C13[] = {
  ABISELECT(-48,-24),
  ABISELECT(616,392),
  ABISELECT(664,416),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19277C143v11Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C109S19277C14__9S19277C13[] = {
  ABISELECT(664,416),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__9S19277C109S19277C14__9S19277C13[] = {
  0,
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__9S19277C14__9S19277C13[] = {
  0,
  0,
  0,
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  ABISELECT(-616,-392),
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__9S19277C14__9S19277C13[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C14__9S19277C13[] = {
  0,
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__A1__9S19277C13[] = {
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C4__A1__9S19277C13[] = {
  0,
  ABISELECT(664,416),
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void _ZN9S19277C15D1Ev();
extern void _ZN9S19277C15D0Ev();
extern void _ZN9S19277C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C15__9S19277C13[] = {
  ABISELECT(-312,-184),
  ABISELECT(976,596),
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C15[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  (VTBL_ENTRY)&_ZN9S19277C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19277C15D0Ev,
  (VTBL_ENTRY)&_ZN9S19277C153v12Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C79S19277C15__9S19277C13[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C7[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C48S19277C79S19277C15__A2__9S19277C13[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C48S19277C79S19277C15__A2__9S19277C13[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C79S19277C15__9S19277C13[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S19277C7[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__9S19277C15__9S19277C13[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI9S19277C15[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C10__9S19277C15__9S19277C13[] = {
  0,
  ABISELECT(-1288,-780),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI9S19277C15[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C15__9S19277C13[] = {
  0,
  ABISELECT(312,184),
  (VTBL_ENTRY)&(_ZTI9S19277C15[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C10__A1__9S19277C13[] = {
  ABISELECT(-1288,-780),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__9S19277C10__A1__9S19277C13[] = {
  0,
  ABISELECT(1288,780),
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
static  VTT_ENTRY vtt_S19277C13[] = {
  {&(_ZTV9S19277C13[10]),  10,78},
  {&(_tg__ZTV8S19277C4__A__9S19277C13[4]),  4,8},
  {&(_tg__ZTV8S19277C4__A__9S19277C13[4]),  4,8},
  {&(_tg__ZTV9S19277C14__9S19277C13[5]),  5,7},
  {&(_tg__ZTV9S19277C109S19277C14__9S19277C13[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__9S19277C109S19277C14__9S19277C13[3]),  3,4},
  {&(_tg__ZTV8S19277C4__9S19277C14__9S19277C13[7]),  7,11},
  {&(_tg__ZTV11S19277C3_nt__9S19277C14__9S19277C13[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C14__9S19277C13[3]),  3,4},
  {&(_ZTV9S19277C13[10]),  10,78},
  {&(_ZTV9S19277C13[22]),  22,78},
  {&(_ZTV9S19277C13[31]),  31,78},
  {&(_ZTV9S19277C13[38]),  38,78},
  {&(_ZTV9S19277C13[52]),  52,78},
  {&(_ZTV9S19277C13[65]),  65,78},
  {&(_ZTV9S19277C13[70]),  70,78},
  {&(_ZTV9S19277C13[76]),  76,78},
  {&(_tg__ZTV8S19277C4__A1__9S19277C13[4]),  4,8},
  {&(_tg__ZTV11S19277C3_nt__8S19277C4__A1__9S19277C13[3]),  3,4},
  {&(_tg__ZTV9S19277C15__9S19277C13[6]),  6,15},
  {&(_tg__ZTV8S19277C79S19277C15__9S19277C13[4]),  4,10},
  {&(_tg__ZTV8S19277C48S19277C79S19277C15__A2__9S19277C13[4]),  4,8},
  {&(_tg__ZTV11S19277C3_nt__8S19277C48S19277C79S19277C15__A2__9S19277C13[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt__8S19277C79S19277C15__9S19277C13[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt__9S19277C15__9S19277C13[3]),  3,4},
  {&(_tg__ZTV9S19277C10__9S19277C15__9S19277C13[4]),  4,5},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C15__9S19277C13[3]),  3,4},
  {&(_tg__ZTV9S19277C10__A1__9S19277C13[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__9S19277C10__A1__9S19277C13[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19277C13[];
extern  VTBL_ENTRY _ZTV9S19277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C13[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19277C13D0Ev,_ZTv0_n48_N9S19277C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N9S19277C13D0Ev,_ZThn624_N9S19277C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19277C13D1Ev,_ZTv0_n48_N9S19277C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N9S19277C13D1Ev,_ZThn624_N9S19277C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19277C13 = {  "S19277C13", // class name
  bases_S19277C13, 14,
  &(vtc_S19277C13[0]), // expected_vtbl_contents
  &(vtt_S19277C13[0]), // expected_vtt_contents
  ABISELECT(3696,2228), // object size
  NSPAIRA(_ZTI9S19277C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19277C13),78, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19277C13),29, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19277C6  : virtual S19277C7 , virtual S19277C9 , virtual S19277C12_nt , virtual S19277C13 {
  __tsi64 s19277c6f0;
  int s19277c6f1;
  char s19277c6f2;
  void *s19277c6f3;
  __tsi64 s19277c6f4;
  long double s19277c6f5;
  char s19277c6f6;
  short s19277c6f7;
  virtual void  v15(); // _ZN8S19277C63v15Ev
  virtual void  v16(); // _ZN8S19277C63v16Ev
  ~S19277C6(); // tgen
  S19277C6(); // tgen
};
//SIG(-1 S19277C6) C1{ VBC2{ BC3{ VBC4{ v3} v4 v5 v6 Fp[3] FC5{} Fp} v7 v8 Fp FC6{ BC7{ BC4 Fc[5] FC3[2] Fi Fp[7] FC3 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC4 VBC3 Fi Fp} Fi Fp Fi[2]} VBC8{ v9 v10 Fp[2] Fi[2] Fp[15] Fi FC9{ VBC7 v12 Fp FL Fp[6] FC4 FC10{ BC4 v15 Fc FL Fi[3] FC7} Fp Fi}} VBC11{ vd v11 Fi} VBC12{ BC3 BC13{ VBC3 BC9 v13 Fp FC4 FL[8] FC3 Fp} VBC14{ VBC4 BC2 VBC9 vd v14 Fp[2] Fi[9] FC10 FC4[9] FL FD Fp FL Fl FL} VBC8 VBC10 v16 Fs FC5 Fc Fp[2] Fi[2] FL} v1 v2 FL Fi Fc Fp FL FD Fc Fs}


void  S19277C6 ::v15(){vfunc_called(this, "_ZN8S19277C63v15Ev");}
void  S19277C6 ::v16(){vfunc_called(this, "_ZN8S19277C63v16Ev");}
S19277C6 ::~S19277C6(){ note_dtor("S19277C6", this);} // tgen
S19277C6 ::S19277C6(){ note_ctor("S19277C6", this);} // tgen

static void Test_S19277C6()
{
  extern Class_Descriptor cd_S19277C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(264,637)];
    init_test(&cd_S19277C6, buf);
    S19277C6 *dp, &lv = *(dp=new (buf) S19277C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4208,2544), "sizeof(S19277C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19277C6)");
    /*is_ambiguous_... S19277C6::S19277C7 */ AMB_check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*)(S19277C7*), 0, "S19277C6");
    /*is_ambiguous_... S19277C13::S19277C4 */ AMB_check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*)(S19277C13*), 0, "S19277C6");
    /*is_ambiguous_... S19277C6::S19277C4 */ AMB_check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*), 0, "S19277C6");
    /*is_ambiguous_... S19277C15::S19277C3_nt */ AMB_check_base_class_offset(lv, (S19277C3_nt*)(S19277C15*), 0, "S19277C6");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*)(S19277C7*)(S19277C15*), 0, "S19277C6");
    /*is_ambiguous_... S19277C6::S19277C7 */ AMB_check_base_class_offset(lv, (S19277C4*)(S19277C7*), ABISELECT(72,48), "S19277C6");
    /*is_ambiguous_... S19277C6::S19277C7 */ AMB_check_base_class_offset(lv, (S19277C7*), ABISELECT(72,48), "S19277C6");
    check_base_class_offset(lv, (S19277C9*), ABISELECT(512,308), "S19277C6");
    check_base_class_offset(lv, (S19277C9*)(S19277C13*), ABISELECT(512,308), "S19277C6");
    check_base_class_offset(lv, (S19277C12_nt*), ABISELECT(1416,840), "S19277C6");
    /*is_ambiguous_... S19277C13::S19277C4 */ AMB_check_base_class_offset(lv, (S19277C4*)(S19277C13*), ABISELECT(1432,848), "S19277C6");
    check_base_class_offset(lv, (S19277C4*)(S19277C14*)(S19277C13*), ABISELECT(2096,1264), "S19277C6");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C2*), ABISELECT(2144,1288), "S19277C6");
    check_base_class_offset(lv, (S19277C2*)(S19277C10*)(S19277C14*)(S19277C13*), ABISELECT(2144,1288), "S19277C6");
    /*is_ambiguous_... S19277C6::S19277C10 */ AMB_check_base_class_offset(lv, (S19277C2*)(S19277C10*), ABISELECT(2144,1288), "S19277C6");
    check_base_class_offset(lv, (S19277C10*)(S19277C14*)(S19277C13*), ABISELECT(1480,872), "S19277C6");
    check_base_class_offset(lv, (S19277C14*)(S19277C13*), ABISELECT(1480,872), "S19277C6");
    check_base_class_offset(lv, (S19277C4*)(S19277C7*)(S19277C15*), ABISELECT(2448,1472), "S19277C6");
    check_base_class_offset(lv, (S19277C7*)(S19277C15*), ABISELECT(2448,1472), "S19277C6");
    check_base_class_offset(lv, (S19277C10*)(S19277C15*), ABISELECT(3424,2068), "S19277C6");
    check_base_class_offset(lv, (S19277C15*)(S19277C13*), ABISELECT(2448,1472), "S19277C6");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C11*), ABISELECT(3864,2332), "S19277C6");
    check_base_class_offset(lv, (S19277C11*)(S19277C13*), ABISELECT(3864,2332), "S19277C6");
    check_base_class_offset(lv, (S19277C13*), ABISELECT(1432,848), "S19277C6");
    check_field_offset(lv, s19277c6f0, ABISELECT(8,4), "S19277C6.s19277c6f0");
    check_field_offset(lv, s19277c6f1, ABISELECT(16,12), "S19277C6.s19277c6f1");
    check_field_offset(lv, s19277c6f2, ABISELECT(20,16), "S19277C6.s19277c6f2");
    check_field_offset(lv, s19277c6f3, ABISELECT(24,20), "S19277C6.s19277c6f3");
    check_field_offset(lv, s19277c6f4, ABISELECT(32,24), "S19277C6.s19277c6f4");
    check_field_offset(lv, s19277c6f5, ABISELECT(48,32), "S19277C6.s19277c6f5");
    check_field_offset(lv, s19277c6f6, ABISELECT(64,44), "S19277C6.s19277c6f6");
    check_field_offset(lv, s19277c6f7, ABISELECT(66,46), "S19277C6.s19277c6f7");
    test_class_info(&lv, &cd_S19277C6);
    dp->~S19277C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19277C6(Test_S19277C6, "S19277C6", ABISELECT(4208,2544));

#else // __cplusplus

extern void _ZN8S19277C6C1Ev();
extern void _ZN8S19277C6D1Ev();
Name_Map name_map_S19277C6[] = {
  NSPAIR(_ZN8S19277C6C1Ev),
  NSPAIR(_ZN8S19277C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C7;
extern VTBL_ENTRY _ZTI8S19277C7[];
extern  VTBL_ENTRY _ZTV8S19277C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C7[];
extern Class_Descriptor cd_S19277C9;
extern VTBL_ENTRY _ZTI8S19277C9[];
extern  VTBL_ENTRY _ZTV8S19277C9[];
extern Class_Descriptor cd_S19277C12_nt;
extern VTBL_ENTRY _ZTI12S19277C12_nt[];
extern  VTBL_ENTRY _ZTV12S19277C12_nt[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C2;
extern VTBL_ENTRY _ZTI8S19277C2[];
extern  VTBL_ENTRY _ZTV8S19277C2[];
extern Class_Descriptor cd_S19277C10;
extern VTBL_ENTRY _ZTI9S19277C10[];
extern  VTBL_ENTRY _ZTV9S19277C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C10[];
extern Class_Descriptor cd_S19277C14;
extern VTBL_ENTRY _ZTI9S19277C14[];
extern  VTBL_ENTRY _ZTV9S19277C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C14[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C7;
extern VTBL_ENTRY _ZTI8S19277C7[];
extern  VTBL_ENTRY _ZTV8S19277C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C7[];
extern Class_Descriptor cd_S19277C10;
extern VTBL_ENTRY _ZTI9S19277C10[];
extern  VTBL_ENTRY _ZTV9S19277C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C10[];
extern Class_Descriptor cd_S19277C15;
extern VTBL_ENTRY _ZTI9S19277C15[];
extern  VTBL_ENTRY _ZTV9S19277C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C15[];
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C11;
extern VTBL_ENTRY _ZTI9S19277C11[];
extern  VTBL_ENTRY _ZTV9S19277C11[];
extern Class_Descriptor cd_S19277C13;
extern VTBL_ENTRY _ZTI9S19277C13[];
extern  VTBL_ENTRY _ZTV9S19277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C13[];
static Base_Class bases_S19277C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19277C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19277C4,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19277C7,    ABISELECT(72,48), //bcp->offset
    18, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19277C9,    ABISELECT(512,308), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19277C12_nt,    ABISELECT(1416,840), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19277C4,    ABISELECT(1432,848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19277C4,    ABISELECT(2096,1264), //bcp->offset
    77, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19277C3_nt,    ABISELECT(2144,1288), //bcp->offset
    88, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19277C2,    ABISELECT(2144,1288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19277C10,    ABISELECT(1480,872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19277C14,    ABISELECT(1480,872), //bcp->offset
    70, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19277C4,    ABISELECT(2448,1472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19277C7,    ABISELECT(2448,1472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19277C10,    ABISELECT(3424,2068), //bcp->offset
    114, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19277C15,    ABISELECT(2448,1472), //bcp->offset
    92, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19277C3_nt,    ABISELECT(3864,2332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19277C11,    ABISELECT(3864,2332), //bcp->offset
    119, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19277C13,    ABISELECT(1432,848), //bcp->offset
    46, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19277C6[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C63v15Ev();
extern void _ZN8S19277C63v16Ev();
extern void _ZN8S19277C6D1Ev();
extern void _ZN8S19277C6D0Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void _ZN8S19277C92v7Ev();
extern void _ZN8S19277C92v8Ev();
extern void ABISELECT(_ZTv0_n24_N8S19277C6D1Ev,_ZTv0_n12_N8S19277C6D1Ev)();
extern void ABISELECT(_ZThn1416_N8S19277C6D1Ev,_ZThn840_N8S19277C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19277C6D0Ev,_ZTv0_n12_N8S19277C6D0Ev)();
extern void ABISELECT(_ZThn1416_N8S19277C6D0Ev,_ZThn840_N8S19277C6D0Ev)() __attribute__((weak));
extern void _ZN12S19277C12_nt2v9Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN9S19277C133v14Ev();
extern void ABISELECT(_ZTv0_n120_N8S19277C6D1Ev,_ZTv0_n60_N8S19277C6D1Ev)();
extern void ABISELECT(_ZThn1432_N8S19277C6D1Ev,_ZThn848_N8S19277C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S19277C6D0Ev,_ZTv0_n60_N8S19277C6D0Ev)();
extern void ABISELECT(_ZThn1432_N8S19277C6D0Ev,_ZThn848_N8S19277C6D0Ev)() __attribute__((weak));
extern void _ZN9S19277C103v10Ev();
extern void _ZN9S19277C143v11Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N8S19277C6D1Ev,_ZTv0_n48_N8S19277C6D1Ev)();
extern void ABISELECT(_ZThn2448_N8S19277C6D1Ev,_ZThn1472_N8S19277C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19277C6D0Ev,_ZTv0_n48_N8S19277C6D0Ev)();
extern void ABISELECT(_ZThn2448_N8S19277C6D0Ev,_ZThn1472_N8S19277C6D0Ev)() __attribute__((weak));
extern void _ZN9S19277C153v12Ev();
extern void _ZN9S19277C103v10Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN9S19277C113v13Ev();
static  VTBL_ENTRY vtc_S19277C6[] = {
  ABISELECT(3864,2332),
  ABISELECT(3424,2068),
  ABISELECT(2448,1472),
  ABISELECT(2144,1288),
  ABISELECT(2096,1264),
  ABISELECT(1432,848),
  ABISELECT(1416,840),
  ABISELECT(512,308),
  0,
  ABISELECT(72,48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19277C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19277C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19277C6D0Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  0,
  0,
  ABISELECT(-512,-308),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN8S19277C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19277C92v8Ev,
  0,
  ABISELECT(-1416,-840),
  ABISELECT(-1416,-840),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19277C6D1Ev,_ZTv0_n12_N8S19277C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19277C6D0Ev,_ZTv0_n12_N8S19277C6D0Ev),
  (VTBL_ENTRY)&_ZN12S19277C12_nt2v9Ev,
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-1432,-848),
  0,
  0,
  0,
  0,
  ABISELECT(2432,1484),
  ABISELECT(-920,-540),
  ABISELECT(1992,1220),
  ABISELECT(1016,624),
  ABISELECT(712,440),
  ABISELECT(664,416),
  ABISELECT(-1432,-848),
  ABISELECT(-1432,-848),
  ABISELECT(-1432,-848),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19277C133v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19277C6D1Ev,_ZTv0_n60_N8S19277C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19277C6D0Ev,_ZTv0_n60_N8S19277C6D0Ev),
  ABISELECT(-1480,-872),
  ABISELECT(616,392),
  ABISELECT(664,416),
  ABISELECT(-1480,-872),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19277C143v11Ev,
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  0,
  ABISELECT(-2144,-1288),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  0,
  ABISELECT(-2448,-1472),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-184),
  ABISELECT(976,596),
  ABISELECT(-2448,-1472),
  ABISELECT(-2448,-1472),
  ABISELECT(-2448,-1472),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19277C6D1Ev,_ZTv0_n48_N8S19277C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19277C6D0Ev,_ZTv0_n48_N8S19277C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19277C153v12Ev,
  0,
  ABISELECT(-1280,-780),
  ABISELECT(-3424,-2068),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  0,
  0,
  ABISELECT(-3864,-2332),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN9S19277C113v13Ev,
};
extern VTBL_ENTRY _ZTV8S19277C6[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C7__8S19277C6[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C7[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C48S19277C7__8S19277C6[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C48S19277C7__8S19277C6[] = {
  0,
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C7__8S19277C6[] = {
  0,
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S19277C7[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN9S19277C133v14Ev();
extern void _ZN9S19277C13D1Ev();
extern void _ZN9S19277C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C13__8S19277C6[] = {
  ABISELECT(2432,1484),
  ABISELECT(-920,-540),
  ABISELECT(1992,1220),
  ABISELECT(1016,624),
  ABISELECT(712,440),
  ABISELECT(664,416),
  ABISELECT(-1432,-848),
  ABISELECT(-1432,-848),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19277C133v14Ev,
  (VTBL_ENTRY)&_ZN9S19277C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19277C13D0Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C49S19277C13__A1__8S19277C6[] = {
  ABISELECT(-1432,-848),
  ABISELECT(-1432,-848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C49S19277C13__A1__8S19277C6[] = {
  0,
  ABISELECT(1432,848),
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN9S19277C103v10Ev();
extern void _ZN9S19277C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C149S19277C13__8S19277C6[] = {
  ABISELECT(-1480,-872),
  ABISELECT(616,392),
  ABISELECT(664,416),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19277C143v11Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C109S19277C149S19277C13__8S19277C6[] = {
  ABISELECT(664,416),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__9S19277C109S19277C149S19277C13__8S19277C6[] = {
  0,
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__9S19277C149S19277C13__8S19277C6[] = {
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-616,-392),
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__9S19277C149S19277C13__8S19277C6[] = {
  0,
  ABISELECT(1480,872),
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C149S19277C13__8S19277C6[] = {
  0,
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__9S19277C13__8S19277C6[] = {
  0,
  ABISELECT(1432,848),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN9S19277C103v10Ev();
extern void _ZN9S19277C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C14__9S19277C13__8S19277C6[] = {
  ABISELECT(-1480,-872),
  ABISELECT(616,392),
  ABISELECT(664,416),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19277C143v11Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__A1__9S19277C13__8S19277C6[] = {
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C13__8S19277C6[] = {
  0,
  ABISELECT(-712,-440),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19277C13D1Ev,_ZTv0_n48_N9S19277C13D1Ev)();
extern void ABISELECT(_ZThn1016_N9S19277C13D1Ev,_ZThn624_N9S19277C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19277C13D0Ev,_ZTv0_n48_N9S19277C13D0Ev)();
extern void ABISELECT(_ZThn1016_N9S19277C13D0Ev,_ZThn624_N9S19277C13D0Ev)() __attribute__((weak));
extern void _ZN9S19277C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C15__9S19277C13__8S19277C6[] = {
  0,
  ABISELECT(-1016,-624),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-184),
  ABISELECT(976,596),
  ABISELECT(-2448,-1472),
  ABISELECT(-2448,-1472),
  ABISELECT(-1016,-624),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19277C13D1Ev,_ZTv0_n48_N9S19277C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19277C13D0Ev,_ZTv0_n48_N9S19277C13D0Ev),
  (VTBL_ENTRY)&_ZN9S19277C153v12Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C10__A1__9S19277C13__8S19277C6[] = {
  0,
  ABISELECT(-1280,-780),
  ABISELECT(-1992,-1220),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN8S19277C92v7Ev();
extern void _ZN8S19277C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C9__9S19277C13__8S19277C6[] = {
  0,
  0,
  ABISELECT(920,540),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN8S19277C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19277C92v8Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN9S19277C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C11__9S19277C13__8S19277C6[] = {
  0,
  0,
  ABISELECT(-2432,-1484),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN9S19277C113v13Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__A2__8S19277C6[] = {
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C4__A2__8S19277C6[] = {
  0,
  ABISELECT(2096,1264),
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void _ZN9S19277C15D1Ev();
extern void _ZN9S19277C15D0Ev();
extern void _ZN9S19277C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C15__8S19277C6[] = {
  ABISELECT(-304,-184),
  ABISELECT(976,596),
  ABISELECT(-2448,-1472),
  ABISELECT(-2448,-1472),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C15[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  (VTBL_ENTRY)&_ZN9S19277C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19277C15D0Ev,
  (VTBL_ENTRY)&_ZN9S19277C153v12Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C79S19277C15__A1__8S19277C6[] = {
  ABISELECT(-2448,-1472),
  ABISELECT(-2448,-1472),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C7[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C48S19277C79S19277C15__A3__8S19277C6[] = {
  ABISELECT(-2448,-1472),
  ABISELECT(-2448,-1472),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C48S19277C79S19277C15__A3__8S19277C6[] = {
  0,
  ABISELECT(2448,1472),
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C79S19277C15__A1__8S19277C6[] = {
  0,
  ABISELECT(2448,1472),
  (VTBL_ENTRY)&(_ZTI8S19277C7[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__9S19277C15__8S19277C6[] = {
  0,
  ABISELECT(2448,1472),
  (VTBL_ENTRY)&(_ZTI9S19277C15[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C10__9S19277C15__8S19277C6[] = {
  0,
  ABISELECT(-1280,-780),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI9S19277C15[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C15__8S19277C6[] = {
  0,
  ABISELECT(304,184),
  (VTBL_ENTRY)&(_ZTI9S19277C15[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C10__A1__8S19277C6[] = {
  ABISELECT(-1280,-780),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__9S19277C10__A1__8S19277C6[] = {
  0,
  ABISELECT(1280,780),
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
static  VTT_ENTRY vtt_S19277C6[] = {
  {&(_ZTV8S19277C6[13]),  13,125},
  {&(_ZTV8S19277C6[27]),  27,125},
  {&(_ZTV8S19277C6[13]),  13,125},
  {&(_ZTV8S19277C6[37]),  37,125},
  {&(_ZTV8S19277C6[43]),  43,125},
  {&(_ZTV8S19277C6[63]),  63,125},
  {&(_ZTV8S19277C6[75]),  75,125},
  {&(_ZTV8S19277C6[84]),  84,125},
  {&(_ZTV8S19277C6[91]),  91,125},
  {&(_ZTV8S19277C6[105]),  105,125},
  {&(_ZTV8S19277C6[118]),  118,125},
  {&(_ZTV8S19277C6[123]),  123,125},
  {&(_tg__ZTV8S19277C7__8S19277C6[4]),  4,10},
  {&(_tg__ZTV8S19277C48S19277C7__8S19277C6[4]),  4,8},
  {&(_tg__ZTV11S19277C3_nt__8S19277C48S19277C7__8S19277C6[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt__8S19277C7__8S19277C6[3]),  3,4},
  {&(_tg__ZTV9S19277C13__8S19277C6[10]),  10,17},
  {&(_tg__ZTV8S19277C49S19277C13__A1__8S19277C6[4]),  4,8},
  {&(_tg__ZTV11S19277C3_nt__8S19277C49S19277C13__A1__8S19277C6[3]),  3,4},
  {&(_tg__ZTV9S19277C149S19277C13__8S19277C6[5]),  5,7},
  {&(_tg__ZTV9S19277C109S19277C149S19277C13__8S19277C6[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__9S19277C109S19277C149S19277C13__8S19277C6[3]),  3,4},
  {&(_tg__ZTV8S19277C4__9S19277C149S19277C13__8S19277C6[7]),  7,11},
  {&(_tg__ZTV11S19277C3_nt__9S19277C149S19277C13__8S19277C6[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C149S19277C13__8S19277C6[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt__9S19277C13__8S19277C6[3]),  3,4},
  {&(_tg__ZTV9S19277C14__9S19277C13__8S19277C6[5]),  5,7},
  {&(_tg__ZTV8S19277C4__A1__9S19277C13__8S19277C6[7]),  7,11},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C13__8S19277C6[3]),  3,4},
  {&(_tg__ZTV9S19277C15__9S19277C13__8S19277C6[13]),  13,22},
  {&(_tg__ZTV9S19277C10__A1__9S19277C13__8S19277C6[4]),  4,5},
  {&(_tg__ZTV8S19277C9__9S19277C13__8S19277C6[4]),  4,6},
  {&(_tg__ZTV9S19277C11__9S19277C13__8S19277C6[4]),  4,6},
  {&(_tg__ZTV8S19277C4__A2__8S19277C6[4]),  4,8},
  {&(_tg__ZTV11S19277C3_nt__8S19277C4__A2__8S19277C6[3]),  3,4},
  {&(_tg__ZTV9S19277C15__8S19277C6[6]),  6,15},
  {&(_tg__ZTV8S19277C79S19277C15__A1__8S19277C6[4]),  4,10},
  {&(_tg__ZTV8S19277C48S19277C79S19277C15__A3__8S19277C6[4]),  4,8},
  {&(_tg__ZTV11S19277C3_nt__8S19277C48S19277C79S19277C15__A3__8S19277C6[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt__8S19277C79S19277C15__A1__8S19277C6[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt__9S19277C15__8S19277C6[3]),  3,4},
  {&(_tg__ZTV9S19277C10__9S19277C15__8S19277C6[4]),  4,5},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C15__8S19277C6[3]),  3,4},
  {&(_tg__ZTV9S19277C10__A1__8S19277C6[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__9S19277C10__A1__8S19277C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19277C6[];
extern  VTBL_ENTRY _ZTV8S19277C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C6[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19277C13D0Ev,_ZTv0_n48_N9S19277C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1016_N9S19277C13D0Ev,_ZThn624_N9S19277C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19277C13D1Ev,_ZTv0_n48_N9S19277C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1016_N9S19277C13D1Ev,_ZThn624_N9S19277C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19277C6D0Ev,_ZTv0_n48_N8S19277C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2448_N8S19277C6D0Ev,_ZThn1472_N8S19277C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19277C6D1Ev,_ZTv0_n48_N8S19277C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2448_N8S19277C6D1Ev,_ZThn1472_N8S19277C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19277C6D0Ev,_ZTv0_n60_N8S19277C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S19277C6D0Ev,_ZThn848_N8S19277C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19277C6D1Ev,_ZTv0_n60_N8S19277C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S19277C6D1Ev,_ZThn848_N8S19277C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19277C6D0Ev,_ZTv0_n12_N8S19277C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1416_N8S19277C6D0Ev,_ZThn840_N8S19277C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19277C6D1Ev,_ZTv0_n12_N8S19277C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1416_N8S19277C6D1Ev,_ZThn840_N8S19277C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19277C6 = {  "S19277C6", // class name
  bases_S19277C6, 18,
  &(vtc_S19277C6[0]), // expected_vtbl_contents
  &(vtt_S19277C6[0]), // expected_vtt_contents
  ABISELECT(4208,2544), // object size
  NSPAIRA(_ZTI8S19277C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19277C6),125, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19277C6),45, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19277C17  {
  long s19277c17f0;
  char s19277c17f1;
  void  mf19277c17(); // _ZN9S19277C1710mf19277c17Ev
};
//SIG(-1 S19277C17) C1{ m Fl Fc}


void  S19277C17 ::mf19277c17(){}

static void Test_S19277C17()
{
  {
    init_simple_test("S19277C17");
    S19277C17 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19277C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19277C17)");
    check_field_offset(lv, s19277c17f0, 0, "S19277C17.s19277c17f0");
    check_field_offset(lv, s19277c17f1, ABISELECT(8,4), "S19277C17.s19277c17f1");
  }
}
static Arrange_To_Call_Me vS19277C17(Test_S19277C17, "S19277C17", ABISELECT(16,8));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S19277C17[];
VTBL_ENTRY *P__ZTI9S19277C17 = _ZTI9S19277C17; 
Class_Descriptor cd_S19277C17 = {  "S19277C17", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19277C17),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S19277C20  {
  void *s19277c20f0;
  __tsi64 s19277c20f1;
  __tsi64 s19277c20f2;
  int s19277c20f3:27;
  short s19277c20f4:16;
  short s19277c20f5;
  void *s19277c20f6;
  void  mf19277c20(); // _ZN9S19277C2010mf19277c20Ev
};
//SIG(1 S19277C20) U1{ m Fp FL FL Fi:27 Fs:16 Fs Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S19277C19  : S19277C7 {
  short s19277c19f0:16;
  __tsi64 s19277c19f1;
  char s19277c19f2;
  __tsi64 s19277c19f3[10];
  int s19277c19f4[10];
  __tsi64 s19277c19f5[4];
  void *s19277c19f6;
  ::S19277C20 s19277c19f7;
  virtual void  v18(); // _ZN9S19277C193v18Ev
  ~S19277C19(); // tgen
  S19277C19(); // tgen
};
//SIG(-1 S19277C19) C1{ BC2{ BC3{ VBC4{ v2} v3 v4 v5 Fp[3] FC5{} Fp} v6 v7 Fp FC6{ BC7{ BC4 Fc[5] FC3[2] Fi Fp[7] FC3 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC4 VBC3 Fi Fp} Fi Fp Fi[2]} v1 Fs:16 FL Fc FL[10] Fi[10] FL[4] Fp FU8{ m Fp FL FL Fi:27 Fs:16 Fs Fp}}


void  S19277C19 ::v18(){vfunc_called(this, "_ZN9S19277C193v18Ev");}
S19277C19 ::~S19277C19(){ note_dtor("S19277C19", this);} // tgen
S19277C19 ::S19277C19(){ note_ctor("S19277C19", this);} // tgen

static void Test_S19277C19()
{
  extern Class_Descriptor cd_S19277C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(80,111)];
    init_test(&cd_S19277C19, buf);
    S19277C19 *dp, &lv = *(dp=new (buf) S19277C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(632,440), "sizeof(S19277C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19277C19)");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*)(S19277C7*), 0, "S19277C19");
    check_base_class_offset(lv, (S19277C4*)(S19277C7*), 0, "S19277C19");
    check_base_class_offset(lv, (S19277C7*), 0, "S19277C19");
    set_bf_and_test(lv, s19277c19f0, ABISELECT(440,260), 0, 16, 1, "S19277C19");
    set_bf_and_test(lv, s19277c19f0, ABISELECT(440,260), 0, 16, hide_sll(1LL<<15), "S19277C19");
    check_field_offset(lv, s19277c19f1, ABISELECT(448,264), "S19277C19.s19277c19f1");
    check_field_offset(lv, s19277c19f2, ABISELECT(456,272), "S19277C19.s19277c19f2");
    check_field_offset(lv, s19277c19f3, ABISELECT(464,276), "S19277C19.s19277c19f3");
    check_field_offset(lv, s19277c19f4, ABISELECT(544,356), "S19277C19.s19277c19f4");
    check_field_offset(lv, s19277c19f5, ABISELECT(584,396), "S19277C19.s19277c19f5");
    check_field_offset(lv, s19277c19f6, ABISELECT(616,428), "S19277C19.s19277c19f6");
    check_field_offset(lv, s19277c19f7, ABISELECT(624,432), "S19277C19.s19277c19f7");
    test_class_info(&lv, &cd_S19277C19);
    dp->~S19277C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19277C19(Test_S19277C19, "S19277C19", ABISELECT(632,440));

#else // __cplusplus

extern void _ZN9S19277C19C1Ev();
extern void _ZN9S19277C19D1Ev();
Name_Map name_map_S19277C19[] = {
  NSPAIR(_ZN9S19277C19C1Ev),
  NSPAIR(_ZN9S19277C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C7;
extern VTBL_ENTRY _ZTI8S19277C7[];
extern  VTBL_ENTRY _ZTV8S19277C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C7[];
static Base_Class bases_S19277C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19277C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19277C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19277C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19277C19[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void _ZN9S19277C193v18Ev();
static  VTBL_ENTRY vtc_S19277C19[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C19[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  (VTBL_ENTRY)&_ZN9S19277C193v18Ev,
};
extern VTBL_ENTRY _ZTV9S19277C19[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C7__9S19277C19[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C7[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C48S19277C7__9S19277C19[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
static  VTT_ENTRY vtt_S19277C19[] = {
  {&(_ZTV9S19277C19[4]),  4,11},
  {&(_tg__ZTV8S19277C7__9S19277C19[4]),  4,10},
  {&(_tg__ZTV8S19277C48S19277C7__9S19277C19[4]),  4,8},
  {&(_tg__ZTV8S19277C48S19277C7__9S19277C19[4]),  4,8},
  {&(_tg__ZTV8S19277C7__9S19277C19[4]),  4,10},
  {&(_ZTV9S19277C19[4]),  4,11},
};
extern VTBL_ENTRY _ZTI9S19277C19[];
extern  VTBL_ENTRY _ZTV9S19277C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C19[];
Class_Descriptor cd_S19277C19 = {  "S19277C19", // class name
  bases_S19277C19, 3,
  &(vtc_S19277C19[0]), // expected_vtbl_contents
  &(vtt_S19277C19[0]), // expected_vtt_contents
  ABISELECT(632,440), // object size
  NSPAIRA(_ZTI9S19277C19),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19277C19),11, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19277C19),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19277C18  : virtual S19277C8 , S19277C19 {
  ::S19277C4 s19277c18f0;
  __tsi64 s19277c18f1:28;
  void *s19277c18f2;
  __tsi64 s19277c18f3;
  short s19277c18f4;
  virtual void  v17(); // _ZN9S19277C183v17Ev
  ~S19277C18(); // tgen
  S19277C18(); // tgen
};
//SIG(-1 S19277C18) C1{ VBC2{ BC3{ BC4{ v2} Fc[5] FC5{ VBC4 v3 v4 v5 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC4 VBC5 Fi Fp} BC7{ BC8{ BC5 v6 v7 Fp FC2 Fi Fp Fi[2]} v8 Fs:16 FL Fc FL[10] Fi[10] FL[4] Fp FU9{ m Fp FL FL Fi:27 Fs:16 Fs Fp}} v1 FC5 FL:28 Fp FL Fs}


void  S19277C18 ::v17(){vfunc_called(this, "_ZN9S19277C183v17Ev");}
S19277C18 ::~S19277C18(){ note_dtor("S19277C18", this);} // tgen
S19277C18 ::S19277C18(){ note_ctor("S19277C18", this);} // tgen

static void Test_S19277C18()
{
  extern Class_Descriptor cd_S19277C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(135,176)];
    init_test(&cd_S19277C18, buf);
    S19277C18 *dp, &lv = *(dp=new (buf) S19277C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1072,700), "sizeof(S19277C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19277C18)");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C2*)(S19277C8*), ABISELECT(712,484), "S19277C18");
    check_base_class_offset(lv, (S19277C2*)(S19277C8*), ABISELECT(712,484), "S19277C18");
    /*is_ambiguous_... S19277C8::S19277C3_nt */ AMB_check_base_class_offset(lv, (S19277C3_nt*)(S19277C8*), ABISELECT(1024,676), "S19277C18");
    /*is_ambiguous_... S19277C18::S19277C4 */ AMB_check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*), ABISELECT(1024,676), "S19277C18");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*)(S19277C7*)(S19277C19*), ABISELECT(1024,676), "S19277C18");
    check_base_class_offset(lv, (S19277C4*)(S19277C8*), ABISELECT(1024,676), "S19277C18");
    check_base_class_offset(lv, (S19277C8*), ABISELECT(712,484), "S19277C18");
    check_base_class_offset(lv, (S19277C4*)(S19277C7*)(S19277C19*), 0, "S19277C18");
    check_base_class_offset(lv, (S19277C7*)(S19277C19*), 0, "S19277C18");
    check_base_class_offset(lv, (S19277C19*), 0, "S19277C18");
    check_field_offset(lv, s19277c18f0, ABISELECT(632,440), "S19277C18.s19277c18f0");
    set_bf_and_test(lv, s19277c18f1, ABISELECT(680,464), 0, 28, 1, "S19277C18");
    set_bf_and_test(lv, s19277c18f1, ABISELECT(680,464), 0, 28, hide_sll(1LL<<27), "S19277C18");
    check_field_offset(lv, s19277c18f2, ABISELECT(688,468), "S19277C18.s19277c18f2");
    check_field_offset(lv, s19277c18f3, ABISELECT(696,472), "S19277C18.s19277c18f3");
    check_field_offset(lv, s19277c18f4, ABISELECT(704,480), "S19277C18.s19277c18f4");
    test_class_info(&lv, &cd_S19277C18);
    dp->~S19277C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19277C18(Test_S19277C18, "S19277C18", ABISELECT(1072,700));

#else // __cplusplus

extern void _ZN9S19277C18C1Ev();
extern void _ZN9S19277C18D1Ev();
Name_Map name_map_S19277C18[] = {
  NSPAIR(_ZN9S19277C18C1Ev),
  NSPAIR(_ZN9S19277C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C2;
extern VTBL_ENTRY _ZTI8S19277C2[];
extern  VTBL_ENTRY _ZTV8S19277C2[];
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C8;
extern VTBL_ENTRY _ZTI8S19277C8[];
extern  VTBL_ENTRY _ZTV8S19277C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C8[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C7;
extern VTBL_ENTRY _ZTI8S19277C7[];
extern  VTBL_ENTRY _ZTV8S19277C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C7[];
extern Class_Descriptor cd_S19277C19;
extern VTBL_ENTRY _ZTI9S19277C19[];
extern  VTBL_ENTRY _ZTV9S19277C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C19[];
static Base_Class bases_S19277C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19277C3_nt,    ABISELECT(712,484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19277C2,    ABISELECT(712,484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19277C3_nt,    ABISELECT(1024,676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19277C4,    ABISELECT(1024,676), //bcp->offset
    20, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19277C8,    ABISELECT(712,484), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19277C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19277C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19277C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19277C18[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void _ZN9S19277C193v18Ev();
extern void _ZN9S19277C183v17Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY vtc_S19277C18[] = {
  ABISELECT(1024,676),
  ABISELECT(712,484),
  ABISELECT(1024,676),
  ABISELECT(1024,676),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C18[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  (VTBL_ENTRY)&_ZN9S19277C193v18Ev,
  (VTBL_ENTRY)&_ZN9S19277C183v17Ev,
  0,
  ABISELECT(312,192),
  ABISELECT(312,192),
  ABISELECT(-712,-484),
  (VTBL_ENTRY)&(_ZTI9S19277C18[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-676),
  (VTBL_ENTRY)&(_ZTI9S19277C18[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern VTBL_ENTRY _ZTV9S19277C18[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void _ZN9S19277C193v18Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C19__9S19277C18[] = {
  ABISELECT(1024,676),
  ABISELECT(1024,676),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C19[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  (VTBL_ENTRY)&_ZN9S19277C193v18Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C79S19277C19__9S19277C18[] = {
  ABISELECT(1024,676),
  ABISELECT(1024,676),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C7[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C48S19277C79S19277C19__A1__9S19277C18[] = {
  ABISELECT(1024,676),
  ABISELECT(1024,676),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C48S19277C79S19277C19__A1__9S19277C18[] = {
  0,
  ABISELECT(-1024,-676),
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C79S19277C19__9S19277C18[] = {
  0,
  ABISELECT(-1024,-676),
  (VTBL_ENTRY)&(_ZTI8S19277C7[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__9S19277C19__9S19277C18[] = {
  0,
  ABISELECT(-1024,-676),
  (VTBL_ENTRY)&(_ZTI9S19277C19[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C8__9S19277C18[] = {
  ABISELECT(312,192),
  ABISELECT(312,192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C8[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__8S19277C8__9S19277C18[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-192),
  (VTBL_ENTRY)&(_ZTI8S19277C8[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__9S19277C18[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
static  VTT_ENTRY vtt_S19277C18[] = {
  {&(_ZTV9S19277C18[6]),  6,31},
  {&(_tg__ZTV9S19277C19__9S19277C18[4]),  4,11},
  {&(_tg__ZTV8S19277C79S19277C19__9S19277C18[4]),  4,10},
  {&(_tg__ZTV8S19277C48S19277C79S19277C19__A1__9S19277C18[4]),  4,8},
  {&(_tg__ZTV11S19277C3_nt__8S19277C48S19277C79S19277C19__A1__9S19277C18[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt__8S19277C79S19277C19__9S19277C18[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt__9S19277C19__9S19277C18[3]),  3,4},
  {&(_ZTV9S19277C18[19]),  19,31},
  {&(_ZTV9S19277C18[27]),  27,31},
  {&(_ZTV9S19277C18[27]),  27,31},
  {&(_tg__ZTV8S19277C8__9S19277C18[4]),  4,5},
  {&(_tg__ZTV8S19277C4__8S19277C8__9S19277C18[7]),  7,11},
  {&(_tg__ZTV8S19277C4__8S19277C8__9S19277C18[7]),  7,11},
  {&(_tg__ZTV8S19277C4__9S19277C18[4]),  4,8},
  {&(_tg__ZTV8S19277C4__9S19277C18[4]),  4,8},
};
extern VTBL_ENTRY _ZTI9S19277C18[];
extern  VTBL_ENTRY _ZTV9S19277C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C18[];
Class_Descriptor cd_S19277C18 = {  "S19277C18", // class name
  bases_S19277C18, 8,
  &(vtc_S19277C18[0]), // expected_vtbl_contents
  &(vtt_S19277C18[0]), // expected_vtt_contents
  ABISELECT(1072,700), // object size
  NSPAIRA(_ZTI9S19277C18),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19277C18),31, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19277C18),15, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19277C16  : S19277C13 , S19277C17 {
  int s19277c16f0;
  long double s19277c16f1[10];
  int s19277c16f2;
  void *s19277c16f3;
  ::S19277C13 s19277c16f4;
  int s19277c16f5[2];
  ::S19277C18 s19277c16f6;
  int s19277c16f7;
  __tsi64 s19277c16f8;
  __tsi64 s19277c16f9;
  int s19277c16f10;
  int s19277c16f11;
  __tsi64 s19277c16f12;
  ~S19277C16(); // tgen
  S19277C16(); // tgen
};
//SIG(-1 S19277C16) C1{ BC2{ BC3{ VBC4{ v1} v2 v3 v4 Fp[3] FC5{} Fp} BC6{ VBC3 BC7{ VBC8{ BC4 Fc[5] FC3[2] Fi Fp[7] FC3 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v5 Fp FL Fp[6] FC4 FC9{ BC4 v12 Fc FL Fi[3] FC8} Fp Fi} v6 Fp FC4 FL[8] FC3 Fp} VBC10{ VBC4 BC11{ BC3 v7 v8 Fp FC12{ BC8 VBC4 VBC3 Fi Fp} Fi Fp Fi[2]} VBC7 vd v9 Fp[2] Fi[9] FC9 FC4[9] FL FD Fp FL Fl FL} VBC13{ v10 v11 Fp[2] Fi[2] Fp[15] Fi FC7} VBC9 v13 Fs FC5 Fc Fp[2] Fi[2] FL} BC14{ m Fl Fc} Fi FD[10] Fi Fp FC2 Fi[2] FC15{ VBC12 BC16{ BC11 v15 Fs:16 FL Fc FL[10] Fi[10] FL[4] Fp FU17{ m Fp FL FL Fi:27 Fs:16 Fs Fp}} v14 FC3 FL:28 Fp FL Fs} Fi FL FL Fi Fi FL}


S19277C16 ::~S19277C16(){ note_dtor("S19277C16", this);} // tgen
S19277C16 ::S19277C16(){ note_ctor("S19277C16", this);} // tgen

static void Test_S19277C16()
{
  extern Class_Descriptor cd_S19277C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(545,1336)];
    init_test(&cd_S19277C16, buf);
    S19277C16 *dp, &lv = *(dp=new (buf) S19277C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8704,5340), "sizeof(S19277C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19277C16)");
    /*is_ambiguous_... S19277C13::S19277C4 */ AMB_check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*)(S19277C13*), 0, "S19277C16");
    /*is_ambiguous_... S19277C16::S19277C4 */ AMB_check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*), 0, "S19277C16");
    /*is_ambiguous_... S19277C15::S19277C3_nt */ AMB_check_base_class_offset(lv, (S19277C3_nt*)(S19277C15*), 0, "S19277C16");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*)(S19277C7*)(S19277C15*), 0, "S19277C16");
    /*is_ambiguous_... S19277C13::S19277C4 */ AMB_check_base_class_offset(lv, (S19277C4*)(S19277C13*), 0, "S19277C16");
    check_base_class_offset(lv, (S19277C4*)(S19277C14*)(S19277C13*), ABISELECT(5680,3528), "S19277C16");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C2*), ABISELECT(5728,3552), "S19277C16");
    check_base_class_offset(lv, (S19277C2*)(S19277C10*)(S19277C14*)(S19277C13*), ABISELECT(5728,3552), "S19277C16");
    /*is_ambiguous_... S19277C16::S19277C10 */ AMB_check_base_class_offset(lv, (S19277C2*)(S19277C10*), ABISELECT(5728,3552), "S19277C16");
    check_base_class_offset(lv, (S19277C10*)(S19277C14*)(S19277C13*), ABISELECT(48,24), "S19277C16");
    check_base_class_offset(lv, (S19277C14*)(S19277C13*), ABISELECT(48,24), "S19277C16");
    check_base_class_offset(lv, (S19277C4*)(S19277C7*)(S19277C15*), ABISELECT(6032,3736), "S19277C16");
    check_base_class_offset(lv, (S19277C7*)(S19277C15*), ABISELECT(6032,3736), "S19277C16");
    check_base_class_offset(lv, (S19277C10*)(S19277C15*), ABISELECT(7008,4332), "S19277C16");
    check_base_class_offset(lv, (S19277C15*)(S19277C13*), ABISELECT(6032,3736), "S19277C16");
    check_base_class_offset(lv, (S19277C9*)(S19277C13*), ABISELECT(7448,4596), "S19277C16");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C11*), ABISELECT(8352,5128), "S19277C16");
    check_base_class_offset(lv, (S19277C11*)(S19277C13*), ABISELECT(8352,5128), "S19277C16");
    check_base_class_offset(lv, (S19277C13*), 0, "S19277C16");
    check_base_class_offset(lv, (S19277C17*), ABISELECT(664,416), "S19277C16");
    check_field_offset(lv, s19277c16f0, ABISELECT(680,424), "S19277C16.s19277c16f0");
    check_field_offset(lv, s19277c16f1, ABISELECT(688,428), "S19277C16.s19277c16f1");
    check_field_offset(lv, s19277c16f2, ABISELECT(848,548), "S19277C16.s19277c16f2");
    check_field_offset(lv, s19277c16f3, ABISELECT(856,552), "S19277C16.s19277c16f3");
    check_field_offset(lv, s19277c16f4, ABISELECT(864,556), "S19277C16.s19277c16f4");
    check_field_offset(lv, s19277c16f5, ABISELECT(4560,2784), "S19277C16.s19277c16f5");
    check_field_offset(lv, s19277c16f6, ABISELECT(4568,2792), "S19277C16.s19277c16f6");
    check_field_offset(lv, s19277c16f7, ABISELECT(5640,3492), "S19277C16.s19277c16f7");
    check_field_offset(lv, s19277c16f8, ABISELECT(5648,3496), "S19277C16.s19277c16f8");
    check_field_offset(lv, s19277c16f9, ABISELECT(5656,3504), "S19277C16.s19277c16f9");
    check_field_offset(lv, s19277c16f10, ABISELECT(5664,3512), "S19277C16.s19277c16f10");
    check_field_offset(lv, s19277c16f11, ABISELECT(5668,3516), "S19277C16.s19277c16f11");
    check_field_offset(lv, s19277c16f12, ABISELECT(5672,3520), "S19277C16.s19277c16f12");
    test_class_info(&lv, &cd_S19277C16);
    dp->~S19277C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19277C16(Test_S19277C16, "S19277C16", ABISELECT(8704,5340));

#else // __cplusplus

extern void _ZN9S19277C16C1Ev();
extern void _ZN9S19277C16D1Ev();
Name_Map name_map_S19277C16[] = {
  NSPAIR(_ZN9S19277C16C1Ev),
  NSPAIR(_ZN9S19277C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C2;
extern VTBL_ENTRY _ZTI8S19277C2[];
extern  VTBL_ENTRY _ZTV8S19277C2[];
extern Class_Descriptor cd_S19277C10;
extern VTBL_ENTRY _ZTI9S19277C10[];
extern  VTBL_ENTRY _ZTV9S19277C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C10[];
extern Class_Descriptor cd_S19277C14;
extern VTBL_ENTRY _ZTI9S19277C14[];
extern  VTBL_ENTRY _ZTV9S19277C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C14[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C7;
extern VTBL_ENTRY _ZTI8S19277C7[];
extern  VTBL_ENTRY _ZTV8S19277C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C7[];
extern Class_Descriptor cd_S19277C10;
extern VTBL_ENTRY _ZTI9S19277C10[];
extern  VTBL_ENTRY _ZTV9S19277C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C10[];
extern Class_Descriptor cd_S19277C15;
extern VTBL_ENTRY _ZTI9S19277C15[];
extern  VTBL_ENTRY _ZTV9S19277C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C15[];
extern Class_Descriptor cd_S19277C9;
extern VTBL_ENTRY _ZTI8S19277C9[];
extern  VTBL_ENTRY _ZTV8S19277C9[];
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C11;
extern VTBL_ENTRY _ZTI9S19277C11[];
extern  VTBL_ENTRY _ZTV9S19277C11[];
extern Class_Descriptor cd_S19277C13;
extern VTBL_ENTRY _ZTI9S19277C13[];
extern  VTBL_ENTRY _ZTV9S19277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C13[];
extern Class_Descriptor cd_S19277C17;
extern VTBL_ENTRY _ZTI9S19277C17[];
static Base_Class bases_S19277C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19277C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19277C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19277C4,    ABISELECT(5680,3528), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19277C3_nt,    ABISELECT(5728,3552), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19277C2,    ABISELECT(5728,3552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19277C10,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19277C14,    ABISELECT(48,24), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19277C4,    ABISELECT(6032,3736), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19277C7,    ABISELECT(6032,3736), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19277C10,    ABISELECT(7008,4332), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19277C15,    ABISELECT(6032,3736), //bcp->offset
    39, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19277C9,    ABISELECT(7448,4596), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19277C3_nt,    ABISELECT(8352,5128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19277C11,    ABISELECT(8352,5128), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19277C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19277C17,    ABISELECT(664,416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19277C16[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN9S19277C133v14Ev();
extern void _ZN9S19277C16D1Ev();
extern void _ZN9S19277C16D0Ev();
extern void _ZN9S19277C103v10Ev();
extern void _ZN9S19277C143v11Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19277C16D1Ev,_ZTv0_n48_N9S19277C16D1Ev)();
extern void ABISELECT(_ZThn6032_N9S19277C16D1Ev,_ZThn3736_N9S19277C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19277C16D0Ev,_ZTv0_n48_N9S19277C16D0Ev)();
extern void ABISELECT(_ZThn6032_N9S19277C16D0Ev,_ZThn3736_N9S19277C16D0Ev)() __attribute__((weak));
extern void _ZN9S19277C153v12Ev();
extern void _ZN9S19277C103v10Ev();
extern void _ZN8S19277C92v7Ev();
extern void _ZN8S19277C92v8Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN9S19277C113v13Ev();
static  VTBL_ENTRY vtc_S19277C16[] = {
  ABISELECT(8352,5128),
  ABISELECT(7448,4596),
  ABISELECT(7008,4332),
  ABISELECT(6032,3736),
  ABISELECT(5728,3552),
  ABISELECT(5680,3528),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C16[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19277C133v14Ev,
  (VTBL_ENTRY)&_ZN9S19277C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19277C16D0Ev,
  ABISELECT(-48,-24),
  ABISELECT(5632,3504),
  ABISELECT(5680,3528),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19277C16[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19277C143v11Ev,
  0,
  0,
  0,
  ABISELECT(-5680,-3528),
  ABISELECT(-5680,-3528),
  ABISELECT(-5680,-3528),
  (VTBL_ENTRY)&(_ZTI9S19277C16[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  0,
  ABISELECT(-5728,-3552),
  (VTBL_ENTRY)&(_ZTI9S19277C16[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  0,
  ABISELECT(-6032,-3736),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-184),
  ABISELECT(976,596),
  ABISELECT(-6032,-3736),
  ABISELECT(-6032,-3736),
  ABISELECT(-6032,-3736),
  (VTBL_ENTRY)&(_ZTI9S19277C16[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19277C16D1Ev,_ZTv0_n48_N9S19277C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19277C16D0Ev,_ZTv0_n48_N9S19277C16D0Ev),
  (VTBL_ENTRY)&_ZN9S19277C153v12Ev,
  0,
  ABISELECT(-1280,-780),
  ABISELECT(-7008,-4332),
  (VTBL_ENTRY)&(_ZTI9S19277C16[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  0,
  0,
  ABISELECT(-7448,-4596),
  (VTBL_ENTRY)&(_ZTI9S19277C16[0]),
  (VTBL_ENTRY)&_ZN8S19277C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19277C92v8Ev,
  0,
  0,
  ABISELECT(-8352,-5128),
  (VTBL_ENTRY)&(_ZTI9S19277C16[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN9S19277C113v13Ev,
};
extern VTBL_ENTRY _ZTV9S19277C16[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN9S19277C133v14Ev();
extern void _ZN9S19277C13D1Ev();
extern void _ZN9S19277C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C13__9S19277C16[] = {
  ABISELECT(8352,5128),
  ABISELECT(7448,4596),
  ABISELECT(7008,4332),
  ABISELECT(6032,3736),
  ABISELECT(5728,3552),
  ABISELECT(5680,3528),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19277C133v14Ev,
  (VTBL_ENTRY)&_ZN9S19277C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19277C13D0Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C49S19277C13__9S19277C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN9S19277C103v10Ev();
extern void _ZN9S19277C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C149S19277C13__9S19277C16[] = {
  ABISELECT(-48,-24),
  ABISELECT(5632,3504),
  ABISELECT(5680,3528),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19277C143v11Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C109S19277C149S19277C13__9S19277C16[] = {
  ABISELECT(5680,3528),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__9S19277C109S19277C149S19277C13__9S19277C16[] = {
  0,
  ABISELECT(-5680,-3528),
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__9S19277C149S19277C13__9S19277C16[] = {
  0,
  0,
  0,
  ABISELECT(-5680,-3528),
  ABISELECT(-5680,-3528),
  ABISELECT(-5632,-3504),
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__9S19277C149S19277C13__9S19277C16[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C149S19277C13__9S19277C16[] = {
  0,
  ABISELECT(-5680,-3528),
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN9S19277C103v10Ev();
extern void _ZN9S19277C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C14__9S19277C13__9S19277C16[] = {
  ABISELECT(-48,-24),
  ABISELECT(5632,3504),
  ABISELECT(5680,3528),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19277C143v11Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__A1__9S19277C13__9S19277C16[] = {
  0,
  0,
  0,
  ABISELECT(-5680,-3528),
  ABISELECT(-5680,-3528),
  ABISELECT(-5680,-3528),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C13__9S19277C16[] = {
  0,
  ABISELECT(-5728,-3552),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19277C13D1Ev,_ZTv0_n48_N9S19277C13D1Ev)();
extern void ABISELECT(_ZThn6032_N9S19277C13D1Ev,_ZThn3736_N9S19277C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19277C13D0Ev,_ZTv0_n48_N9S19277C13D0Ev)();
extern void ABISELECT(_ZThn6032_N9S19277C13D0Ev,_ZThn3736_N9S19277C13D0Ev)() __attribute__((weak));
extern void _ZN9S19277C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C15__9S19277C13__9S19277C16[] = {
  0,
  ABISELECT(-6032,-3736),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-184),
  ABISELECT(976,596),
  ABISELECT(-6032,-3736),
  ABISELECT(-6032,-3736),
  ABISELECT(-6032,-3736),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19277C13D1Ev,_ZTv0_n48_N9S19277C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19277C13D0Ev,_ZTv0_n48_N9S19277C13D0Ev),
  (VTBL_ENTRY)&_ZN9S19277C153v12Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C10__A1__9S19277C13__9S19277C16[] = {
  0,
  ABISELECT(-1280,-780),
  ABISELECT(-7008,-4332),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN8S19277C92v7Ev();
extern void _ZN8S19277C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C9__9S19277C13__9S19277C16[] = {
  0,
  0,
  ABISELECT(-7448,-4596),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN8S19277C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19277C92v8Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN9S19277C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C11__9S19277C13__9S19277C16[] = {
  0,
  0,
  ABISELECT(-8352,-5128),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN9S19277C113v13Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__A1__9S19277C16[] = {
  ABISELECT(-5680,-3528),
  ABISELECT(-5680,-3528),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C4__A1__9S19277C16[] = {
  0,
  ABISELECT(5680,3528),
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void _ZN9S19277C15D1Ev();
extern void _ZN9S19277C15D0Ev();
extern void _ZN9S19277C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C15__9S19277C16[] = {
  ABISELECT(-304,-184),
  ABISELECT(976,596),
  ABISELECT(-6032,-3736),
  ABISELECT(-6032,-3736),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C15[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  (VTBL_ENTRY)&_ZN9S19277C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19277C15D0Ev,
  (VTBL_ENTRY)&_ZN9S19277C153v12Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C79S19277C15__9S19277C16[] = {
  ABISELECT(-6032,-3736),
  ABISELECT(-6032,-3736),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C7[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C48S19277C79S19277C15__A2__9S19277C16[] = {
  ABISELECT(-6032,-3736),
  ABISELECT(-6032,-3736),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C48S19277C79S19277C15__A2__9S19277C16[] = {
  0,
  ABISELECT(6032,3736),
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C79S19277C15__9S19277C16[] = {
  0,
  ABISELECT(6032,3736),
  (VTBL_ENTRY)&(_ZTI8S19277C7[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__9S19277C15__9S19277C16[] = {
  0,
  ABISELECT(6032,3736),
  (VTBL_ENTRY)&(_ZTI9S19277C15[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C10__9S19277C15__9S19277C16[] = {
  0,
  ABISELECT(-1280,-780),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI9S19277C15[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C15__9S19277C16[] = {
  0,
  ABISELECT(304,184),
  (VTBL_ENTRY)&(_ZTI9S19277C15[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C10__A1__9S19277C16[] = {
  ABISELECT(-1280,-780),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__9S19277C10__A1__9S19277C16[] = {
  0,
  ABISELECT(1280,780),
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
static  VTT_ENTRY vtt_S19277C16[] = {
  {&(_ZTV9S19277C16[10]),  10,78},
  {&(_tg__ZTV9S19277C13__9S19277C16[10]),  10,17},
  {&(_tg__ZTV8S19277C49S19277C13__9S19277C16[4]),  4,8},
  {&(_tg__ZTV8S19277C49S19277C13__9S19277C16[4]),  4,8},
  {&(_tg__ZTV9S19277C149S19277C13__9S19277C16[5]),  5,7},
  {&(_tg__ZTV9S19277C109S19277C149S19277C13__9S19277C16[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__9S19277C109S19277C149S19277C13__9S19277C16[3]),  3,4},
  {&(_tg__ZTV8S19277C4__9S19277C149S19277C13__9S19277C16[7]),  7,11},
  {&(_tg__ZTV11S19277C3_nt__9S19277C149S19277C13__9S19277C16[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C149S19277C13__9S19277C16[3]),  3,4},
  {&(_tg__ZTV9S19277C13__9S19277C16[10]),  10,17},
  {&(_tg__ZTV9S19277C14__9S19277C13__9S19277C16[5]),  5,7},
  {&(_tg__ZTV8S19277C4__A1__9S19277C13__9S19277C16[7]),  7,11},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C13__9S19277C16[3]),  3,4},
  {&(_tg__ZTV9S19277C15__9S19277C13__9S19277C16[13]),  13,22},
  {&(_tg__ZTV9S19277C10__A1__9S19277C13__9S19277C16[4]),  4,5},
  {&(_tg__ZTV8S19277C9__9S19277C13__9S19277C16[4]),  4,6},
  {&(_tg__ZTV9S19277C11__9S19277C13__9S19277C16[4]),  4,6},
  {&(_ZTV9S19277C16[10]),  10,78},
  {&(_ZTV9S19277C16[22]),  22,78},
  {&(_ZTV9S19277C16[31]),  31,78},
  {&(_ZTV9S19277C16[38]),  38,78},
  {&(_ZTV9S19277C16[52]),  52,78},
  {&(_ZTV9S19277C16[65]),  65,78},
  {&(_ZTV9S19277C16[70]),  70,78},
  {&(_ZTV9S19277C16[76]),  76,78},
  {&(_tg__ZTV8S19277C4__A1__9S19277C16[4]),  4,8},
  {&(_tg__ZTV11S19277C3_nt__8S19277C4__A1__9S19277C16[3]),  3,4},
  {&(_tg__ZTV9S19277C15__9S19277C16[6]),  6,15},
  {&(_tg__ZTV8S19277C79S19277C15__9S19277C16[4]),  4,10},
  {&(_tg__ZTV8S19277C48S19277C79S19277C15__A2__9S19277C16[4]),  4,8},
  {&(_tg__ZTV11S19277C3_nt__8S19277C48S19277C79S19277C15__A2__9S19277C16[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt__8S19277C79S19277C15__9S19277C16[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt__9S19277C15__9S19277C16[3]),  3,4},
  {&(_tg__ZTV9S19277C10__9S19277C15__9S19277C16[4]),  4,5},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C15__9S19277C16[3]),  3,4},
  {&(_tg__ZTV9S19277C10__A1__9S19277C16[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__9S19277C10__A1__9S19277C16[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19277C16[];
extern  VTBL_ENTRY _ZTV9S19277C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C16[];
static VTBL_ENTRY alt_thunk_names47[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19277C13D0Ev,_ZTv0_n48_N9S19277C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6032_N9S19277C13D0Ev,_ZThn3736_N9S19277C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19277C13D1Ev,_ZTv0_n48_N9S19277C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6032_N9S19277C13D1Ev,_ZThn3736_N9S19277C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19277C16D0Ev,_ZTv0_n48_N9S19277C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6032_N9S19277C16D0Ev,_ZThn3736_N9S19277C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19277C16D1Ev,_ZTv0_n48_N9S19277C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6032_N9S19277C16D1Ev,_ZThn3736_N9S19277C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19277C16 = {  "S19277C16", // class name
  bases_S19277C16, 16,
  &(vtc_S19277C16[0]), // expected_vtbl_contents
  &(vtt_S19277C16[0]), // expected_vtt_contents
  ABISELECT(8704,5340), // object size
  NSPAIRA(_ZTI9S19277C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19277C16),78, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19277C16),38, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names47,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19277C1  : virtual S19277C2 , virtual S19277C6 , S19277C16 {
  int s19277c1f0[9];
  __tsi64 s19277c1f1;
  virtual  ~S19277C1(); // _ZN8S19277C1D2Ev
  S19277C1(); // tgen
};
//SIG(1 S19277C1) C1{ VBC2{ BC3{ v1} Fc[5] FC4{ VBC3 v2 v3 v4 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC6{ VBC7{ BC4 v5 v6 Fp FC8{ BC2 VBC3 VBC4 Fi Fp} Fi Fp Fi[2]} VBC9{ v7 v8 Fp[2] Fi[2] Fp[15] Fi FC10{ VBC2 v10 Fp FL Fp[6] FC3 FC11{ BC3 v13 Fc FL Fi[3] FC2} Fp Fi}} VBC12{ vd v9 Fi} VBC13{ BC4 BC14{ VBC4 BC10 v11 Fp FC3 FL[8] FC4 Fp} VBC15{ VBC3 BC7 VBC10 vd v12 Fp[2] Fi[9] FC11 FC3[9] FL FD Fp FL Fl FL} VBC9 VBC11 v14 Fs FC5 Fc Fp[2] Fi[2] FL} v15 v16 FL Fi Fc Fp FL FD Fc Fs} BC16{ BC13 BC17{ m Fl Fc} Fi FD[10] Fi Fp FC13 Fi[2] FC18{ VBC8 BC19{ BC7 v18 Fs:16 FL Fc FL[10] Fi[10] FL[4] Fp FU20{ m Fp FL FL Fi:27 Fs:16 Fs Fp}} v17 FC4 FL:28 Fp FL Fs} Fi FL FL Fi Fi FL} vd Fi[9] FL}


 S19277C1 ::~S19277C1(){ note_dtor("S19277C1", this);}
S19277C1 ::S19277C1(){ note_ctor("S19277C1", this);} // tgen

static void Test_S19277C1()
{
  extern Class_Descriptor cd_S19277C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(622,1530)];
    init_test(&cd_S19277C1, buf);
    S19277C1 *dp, &lv = *(dp=new (buf) S19277C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9936,6116), "sizeof(S19277C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19277C1)");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C2*), ABISELECT(5728,3572), "S19277C1");
    check_base_class_offset(lv, (S19277C2*), ABISELECT(5728,3572), "S19277C1");
    /*is_ambiguous_... S19277C1::S19277C13 */ AMB_check_base_class_offset(lv, (S19277C2*)(S19277C10*)(S19277C14*)(S19277C13*), ABISELECT(5728,3572), "S19277C1");
    /*is_ambiguous_... S19277C1::S19277C10 */ AMB_check_base_class_offset(lv, (S19277C2*)(S19277C10*), ABISELECT(5728,3572), "S19277C1");
    check_base_class_offset(lv, (S19277C2*)(S19277C10*)(S19277C14*)(S19277C13*)(S19277C16*), ABISELECT(5728,3572), "S19277C1");
    /*is_ambiguous_... S19277C1::S19277C7 */ AMB_check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*)(S19277C7*), ABISELECT(6032,3756), "S19277C1");
    /*is_ambiguous_... S19277C1::S19277C13 */ AMB_check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*)(S19277C13*), ABISELECT(6032,3756), "S19277C1");
    /*is_ambiguous_... S19277C1::S19277C4 */ AMB_check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*), ABISELECT(6032,3756), "S19277C1");
    /*is_ambiguous_... S19277C15::S19277C3_nt */ AMB_check_base_class_offset(lv, (S19277C3_nt*)(S19277C15*), ABISELECT(6032,3756), "S19277C1");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*)(S19277C7*)(S19277C15*), ABISELECT(6032,3756), "S19277C1");
    /*is_ambiguous_... S19277C13::S19277C4 */ AMB_check_base_class_offset(lv, (S19277C3_nt*)(S19277C4*)(S19277C13*)(S19277C16*), ABISELECT(6032,3756), "S19277C1");
    /*is_ambiguous_... S19277C1::S19277C7 */ AMB_check_base_class_offset(lv, (S19277C4*)(S19277C7*), ABISELECT(6104,3804), "S19277C1");
    /*is_ambiguous_... S19277C6::S19277C7 */ AMB_check_base_class_offset(lv, (S19277C7*)(S19277C6*), ABISELECT(6104,3804), "S19277C1");
    check_base_class_offset(lv, (S19277C9*)(S19277C6*), ABISELECT(6544,4064), "S19277C1");
    /*is_ambiguous_... S19277C1::S19277C13 */ AMB_check_base_class_offset(lv, (S19277C9*)(S19277C13*), ABISELECT(6544,4064), "S19277C1");
    check_base_class_offset(lv, (S19277C9*)(S19277C13*)(S19277C16*), ABISELECT(6544,4064), "S19277C1");
    check_base_class_offset(lv, (S19277C12_nt*)(S19277C6*), ABISELECT(7448,4596), "S19277C1");
    /*is_ambiguous_... S19277C1::S19277C13 */ AMB_check_base_class_offset(lv, (S19277C4*)(S19277C13*), ABISELECT(7464,4604), "S19277C1");
    /*is_ambiguous_... S19277C1::S19277C13 */ AMB_check_base_class_offset(lv, (S19277C4*)(S19277C14*)(S19277C13*), ABISELECT(8128,5020), "S19277C1");
    check_base_class_offset(lv, (S19277C4*)(S19277C14*)(S19277C13*)(S19277C16*), ABISELECT(8128,5020), "S19277C1");
    /*is_ambiguous_... S19277C1::S19277C13 */ AMB_check_base_class_offset(lv, (S19277C10*)(S19277C14*)(S19277C13*), ABISELECT(7512,4628), "S19277C1");
    /*is_ambiguous_... S19277C1::S19277C13 */ AMB_check_base_class_offset(lv, (S19277C14*)(S19277C13*), ABISELECT(7512,4628), "S19277C1");
    check_base_class_offset(lv, (S19277C4*)(S19277C7*)(S19277C15*), ABISELECT(8176,5044), "S19277C1");
    check_base_class_offset(lv, (S19277C7*)(S19277C15*), ABISELECT(8176,5044), "S19277C1");
    check_base_class_offset(lv, (S19277C10*)(S19277C15*), ABISELECT(9152,5640), "S19277C1");
    /*is_ambiguous_... S19277C1::S19277C13 */ AMB_check_base_class_offset(lv, (S19277C15*)(S19277C13*), ABISELECT(8176,5044), "S19277C1");
    check_base_class_offset(lv, (S19277C15*)(S19277C13*)(S19277C16*), ABISELECT(8176,5044), "S19277C1");
    check_base_class_offset(lv, (S19277C3_nt*)(S19277C11*), ABISELECT(9592,5904), "S19277C1");
    /*is_ambiguous_... S19277C1::S19277C13 */ AMB_check_base_class_offset(lv, (S19277C11*)(S19277C13*), ABISELECT(9592,5904), "S19277C1");
    check_base_class_offset(lv, (S19277C11*)(S19277C13*)(S19277C16*), ABISELECT(9592,5904), "S19277C1");
    check_base_class_offset(lv, (S19277C13*)(S19277C6*), ABISELECT(7464,4604), "S19277C1");
    check_base_class_offset(lv, (S19277C6*), ABISELECT(6032,3756), "S19277C1");
    /*is_ambiguous_... S19277C13::S19277C4 */ AMB_check_base_class_offset(lv, (S19277C4*)(S19277C13*)(S19277C16*), 0, "S19277C1");
    check_base_class_offset(lv, (S19277C10*)(S19277C14*)(S19277C13*)(S19277C16*), ABISELECT(48,24), "S19277C1");
    check_base_class_offset(lv, (S19277C14*)(S19277C13*)(S19277C16*), ABISELECT(48,24), "S19277C1");
    check_base_class_offset(lv, (S19277C13*)(S19277C16*), 0, "S19277C1");
    check_base_class_offset(lv, (S19277C17*)(S19277C16*), ABISELECT(664,416), "S19277C1");
    check_base_class_offset(lv, (S19277C16*), 0, "S19277C1");
    check_field_offset(lv, s19277c1f0, ABISELECT(5680,3528), "S19277C1.s19277c1f0");
    check_field_offset(lv, s19277c1f1, ABISELECT(5720,3564), "S19277C1.s19277c1f1");
    test_class_info(&lv, &cd_S19277C1);
    dp->~S19277C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19277C1(Test_S19277C1, "S19277C1", ABISELECT(9936,6116));

#else // __cplusplus

extern void _ZN8S19277C1C1Ev();
extern void _ZN8S19277C1D2Ev();
Name_Map name_map_S19277C1[] = {
  NSPAIR(_ZN8S19277C1C1Ev),
  NSPAIR(_ZN8S19277C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C2;
extern VTBL_ENTRY _ZTI8S19277C2[];
extern  VTBL_ENTRY _ZTV8S19277C2[];
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C7;
extern VTBL_ENTRY _ZTI8S19277C7[];
extern  VTBL_ENTRY _ZTV8S19277C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C7[];
extern Class_Descriptor cd_S19277C9;
extern VTBL_ENTRY _ZTI8S19277C9[];
extern  VTBL_ENTRY _ZTV8S19277C9[];
extern Class_Descriptor cd_S19277C12_nt;
extern VTBL_ENTRY _ZTI12S19277C12_nt[];
extern  VTBL_ENTRY _ZTV12S19277C12_nt[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C10;
extern VTBL_ENTRY _ZTI9S19277C10[];
extern  VTBL_ENTRY _ZTV9S19277C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C10[];
extern Class_Descriptor cd_S19277C14;
extern VTBL_ENTRY _ZTI9S19277C14[];
extern  VTBL_ENTRY _ZTV9S19277C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C14[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C7;
extern VTBL_ENTRY _ZTI8S19277C7[];
extern  VTBL_ENTRY _ZTV8S19277C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C7[];
extern Class_Descriptor cd_S19277C10;
extern VTBL_ENTRY _ZTI9S19277C10[];
extern  VTBL_ENTRY _ZTV9S19277C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C10[];
extern Class_Descriptor cd_S19277C15;
extern VTBL_ENTRY _ZTI9S19277C15[];
extern  VTBL_ENTRY _ZTV9S19277C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C15[];
extern Class_Descriptor cd_S19277C3_nt;
extern VTBL_ENTRY _ZTI11S19277C3_nt[];
extern  VTBL_ENTRY _ZTV11S19277C3_nt[];
extern Class_Descriptor cd_S19277C11;
extern VTBL_ENTRY _ZTI9S19277C11[];
extern  VTBL_ENTRY _ZTV9S19277C11[];
extern Class_Descriptor cd_S19277C13;
extern VTBL_ENTRY _ZTI9S19277C13[];
extern  VTBL_ENTRY _ZTV9S19277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C13[];
extern Class_Descriptor cd_S19277C6;
extern VTBL_ENTRY _ZTI8S19277C6[];
extern  VTBL_ENTRY _ZTV8S19277C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C6[];
extern Class_Descriptor cd_S19277C4;
extern VTBL_ENTRY _ZTI8S19277C4[];
extern  VTBL_ENTRY _ZTV8S19277C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C4[];
extern Class_Descriptor cd_S19277C10;
extern VTBL_ENTRY _ZTI9S19277C10[];
extern  VTBL_ENTRY _ZTV9S19277C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C10[];
extern Class_Descriptor cd_S19277C14;
extern VTBL_ENTRY _ZTI9S19277C14[];
extern  VTBL_ENTRY _ZTV9S19277C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C14[];
extern Class_Descriptor cd_S19277C13;
extern VTBL_ENTRY _ZTI9S19277C13[];
extern  VTBL_ENTRY _ZTV9S19277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C13[];
extern Class_Descriptor cd_S19277C17;
extern VTBL_ENTRY _ZTI9S19277C17[];
extern Class_Descriptor cd_S19277C16;
extern VTBL_ENTRY _ZTI9S19277C16[];
extern  VTBL_ENTRY _ZTV9S19277C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19277C16[];
static Base_Class bases_S19277C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19277C3_nt,    ABISELECT(5728,3572), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19277C2,    ABISELECT(5728,3572), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19277C3_nt,    ABISELECT(6032,3756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19277C4,    ABISELECT(6104,3804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19277C7,    ABISELECT(6104,3804), //bcp->offset
    53, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19277C9,    ABISELECT(6544,4064), //bcp->offset
    68, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19277C12_nt,    ABISELECT(7448,4596), //bcp->offset
    74, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19277C4,    ABISELECT(7464,4604), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19277C4,    ABISELECT(8128,5020), //bcp->offset
    112, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19277C10,    ABISELECT(7512,4628), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19277C14,    ABISELECT(7512,4628), //bcp->offset
    105, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19277C4,    ABISELECT(8176,5044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19277C7,    ABISELECT(8176,5044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19277C10,    ABISELECT(9152,5640), //bcp->offset
    145, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    84, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19277C15,    ABISELECT(8176,5044), //bcp->offset
    123, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19277C3_nt,    ABISELECT(9592,5904), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19277C11,    ABISELECT(9592,5904), //bcp->offset
    150, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19277C13,    ABISELECT(7464,4604), //bcp->offset
    81, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19277C6,    ABISELECT(6032,3756), //bcp->offset
    32, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19277C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19277C10,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19277C14,    ABISELECT(48,24), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19277C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19277C17,    ABISELECT(664,416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19277C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19277C1[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN9S19277C133v14Ev();
extern void _ZN8S19277C1D1Ev();
extern void _ZN8S19277C1D0Ev();
extern void _ZN9S19277C103v10Ev();
extern void _ZN9S19277C143v11Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C63v15Ev();
extern void _ZN8S19277C63v16Ev();
extern void ABISELECT(_ZTv0_n128_N8S19277C1D1Ev,_ZTv0_n64_N8S19277C1D1Ev)();
extern void ABISELECT(_ZThn6032_N8S19277C1D1Ev,_ZThn3756_N8S19277C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n128_N8S19277C1D0Ev,_ZTv0_n64_N8S19277C1D0Ev)();
extern void ABISELECT(_ZThn6032_N8S19277C1D0Ev,_ZThn3756_N8S19277C1D0Ev)() __attribute__((weak));
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void _ZN8S19277C92v7Ev();
extern void _ZN8S19277C92v8Ev();
extern void ABISELECT(_ZTv0_n24_N8S19277C1D1Ev,_ZTv0_n12_N8S19277C1D1Ev)();
extern void ABISELECT(_ZThn7448_N8S19277C1D1Ev,_ZThn4596_N8S19277C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19277C1D0Ev,_ZTv0_n12_N8S19277C1D0Ev)();
extern void ABISELECT(_ZThn7448_N8S19277C1D0Ev,_ZThn4596_N8S19277C1D0Ev)() __attribute__((weak));
extern void _ZN12S19277C12_nt2v9Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN9S19277C133v14Ev();
extern void ABISELECT(_ZTv0_n120_N8S19277C1D1Ev,_ZTv0_n60_N8S19277C1D1Ev)();
extern void ABISELECT(_ZThn7464_N8S19277C1D1Ev,_ZThn4604_N8S19277C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S19277C1D0Ev,_ZTv0_n60_N8S19277C1D0Ev)();
extern void ABISELECT(_ZThn7464_N8S19277C1D0Ev,_ZThn4604_N8S19277C1D0Ev)() __attribute__((weak));
extern void _ZN9S19277C103v10Ev();
extern void _ZN9S19277C143v11Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N8S19277C1D1Ev,_ZTv0_n48_N8S19277C1D1Ev)();
extern void ABISELECT(_ZThn8176_N8S19277C1D1Ev,_ZThn5044_N8S19277C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19277C1D0Ev,_ZTv0_n48_N8S19277C1D0Ev)();
extern void ABISELECT(_ZThn8176_N8S19277C1D0Ev,_ZThn5044_N8S19277C1D0Ev)() __attribute__((weak));
extern void _ZN9S19277C153v12Ev();
extern void _ZN9S19277C103v10Ev();
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN9S19277C113v13Ev();
static  VTBL_ENTRY vtc_S19277C1[] = {
  ABISELECT(7464,4604),
  ABISELECT(7448,4596),
  ABISELECT(6104,3804),
  ABISELECT(6032,3756),
  ABISELECT(9592,5904),
  ABISELECT(6544,4064),
  ABISELECT(9152,5640),
  ABISELECT(8176,5044),
  ABISELECT(5728,3572),
  ABISELECT(8128,5020),
  ABISELECT(6032,3756),
  ABISELECT(6032,3756),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C1[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19277C133v14Ev,
  (VTBL_ENTRY)&_ZN8S19277C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19277C1D0Ev,
  ABISELECT(5984,3732),
  ABISELECT(8080,4996),
  ABISELECT(5680,3548),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19277C1[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19277C143v11Ev,
  0,
  ABISELECT(-5728,-3572),
  (VTBL_ENTRY)&(_ZTI8S19277C1[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  ABISELECT(-6032,-3756),
  0,
  0,
  ABISELECT(3560,2148),
  ABISELECT(3120,1884),
  ABISELECT(2144,1288),
  ABISELECT(-304,-184),
  ABISELECT(2096,1264),
  ABISELECT(1432,848),
  ABISELECT(1416,840),
  ABISELECT(512,308),
  0,
  ABISELECT(72,48),
  0,
  ABISELECT(-6032,-3756),
  (VTBL_ENTRY)&(_ZTI8S19277C1[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19277C63v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S19277C1D1Ev,_ZTv0_n64_N8S19277C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S19277C1D0Ev,_ZTv0_n64_N8S19277C1D0Ev),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-6104,-3804),
  (VTBL_ENTRY)&(_ZTI8S19277C1[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  0,
  0,
  ABISELECT(-6544,-4064),
  (VTBL_ENTRY)&(_ZTI8S19277C1[0]),
  (VTBL_ENTRY)&_ZN8S19277C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19277C92v8Ev,
  0,
  ABISELECT(-7448,-4596),
  ABISELECT(-7448,-4596),
  (VTBL_ENTRY)&(_ZTI8S19277C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19277C1D1Ev,_ZTv0_n12_N8S19277C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19277C1D0Ev,_ZTv0_n12_N8S19277C1D0Ev),
  (VTBL_ENTRY)&_ZN12S19277C12_nt2v9Ev,
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-7464,-4604),
  0,
  0,
  0,
  0,
  ABISELECT(2128,1300),
  ABISELECT(-920,-540),
  ABISELECT(1688,1036),
  ABISELECT(712,440),
  ABISELECT(-1736,-1032),
  ABISELECT(664,416),
  ABISELECT(-1432,-848),
  ABISELECT(-1432,-848),
  ABISELECT(-7464,-4604),
  (VTBL_ENTRY)&(_ZTI8S19277C1[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19277C133v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19277C1D1Ev,_ZTv0_n60_N8S19277C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19277C1D0Ev,_ZTv0_n60_N8S19277C1D0Ev),
  ABISELECT(-1480,-872),
  ABISELECT(616,392),
  ABISELECT(-1784,-1056),
  ABISELECT(-7512,-4628),
  (VTBL_ENTRY)&(_ZTI8S19277C1[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19277C143v11Ev,
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-8128,-5020),
  (VTBL_ENTRY)&(_ZTI8S19277C1[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  0,
  ABISELECT(-8176,-5044),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2448,-1472),
  ABISELECT(976,596),
  ABISELECT(-2144,-1288),
  ABISELECT(-2144,-1288),
  ABISELECT(-8176,-5044),
  (VTBL_ENTRY)&(_ZTI8S19277C1[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19277C1D1Ev,_ZTv0_n48_N8S19277C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19277C1D0Ev,_ZTv0_n48_N8S19277C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19277C153v12Ev,
  0,
  ABISELECT(-3424,-2068),
  ABISELECT(-9152,-5640),
  (VTBL_ENTRY)&(_ZTI8S19277C1[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  0,
  0,
  ABISELECT(-9592,-5904),
  (VTBL_ENTRY)&(_ZTI8S19277C1[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN9S19277C113v13Ev,
};
extern VTBL_ENTRY _ZTV8S19277C1[];
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN9S19277C133v14Ev();
extern void _ZN9S19277C16D1Ev();
extern void _ZN9S19277C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C16__8S19277C1[] = {
  ABISELECT(9592,5904),
  ABISELECT(6544,4064),
  ABISELECT(9152,5640),
  ABISELECT(8176,5044),
  ABISELECT(5728,3572),
  ABISELECT(8128,5020),
  ABISELECT(6032,3756),
  ABISELECT(6032,3756),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C16[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19277C133v14Ev,
  (VTBL_ENTRY)&_ZN9S19277C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19277C16D0Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN9S19277C133v14Ev();
extern void _ZN9S19277C13D1Ev();
extern void _ZN9S19277C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C139S19277C16__A1__8S19277C1[] = {
  ABISELECT(9592,5904),
  ABISELECT(6544,4064),
  ABISELECT(9152,5640),
  ABISELECT(8176,5044),
  ABISELECT(5728,3572),
  ABISELECT(8128,5020),
  ABISELECT(6032,3756),
  ABISELECT(6032,3756),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19277C133v14Ev,
  (VTBL_ENTRY)&_ZN9S19277C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19277C13D0Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C49S19277C139S19277C16__A4__8S19277C1[] = {
  ABISELECT(6032,3756),
  ABISELECT(6032,3756),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C49S19277C139S19277C16__A4__8S19277C1[] = {
  0,
  ABISELECT(-6032,-3756),
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN9S19277C103v10Ev();
extern void _ZN9S19277C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C149S19277C139S19277C16__A1__8S19277C1[] = {
  ABISELECT(5984,3732),
  ABISELECT(8080,4996),
  ABISELECT(5680,3548),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19277C143v11Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C109S19277C149S19277C139S19277C16__A2__8S19277C1[] = {
  ABISELECT(5680,3548),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__9S19277C109S19277C149S19277C139S19277C16__A2__8S19277C1[] = {
  0,
  ABISELECT(-5680,-3548),
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__9S19277C149S19277C139S19277C16__A1__8S19277C1[] = {
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-8080,-4996),
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__9S19277C149S19277C139S19277C16__A1__8S19277C1[] = {
  0,
  ABISELECT(-5984,-3732),
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C149S19277C139S19277C16__A1__8S19277C1[] = {
  0,
  ABISELECT(-5680,-3548),
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__9S19277C139S19277C16__A1__8S19277C1[] = {
  0,
  ABISELECT(-6032,-3756),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN9S19277C103v10Ev();
extern void _ZN9S19277C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C14__9S19277C139S19277C16__A1__8S19277C1[] = {
  ABISELECT(5984,3732),
  ABISELECT(8080,4996),
  ABISELECT(5680,3548),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19277C143v11Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__A1__9S19277C139S19277C16__A1__8S19277C1[] = {
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-8128,-5020),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C139S19277C16__A1__8S19277C1[] = {
  0,
  ABISELECT(-5728,-3572),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19277C13D1Ev,_ZTv0_n48_N9S19277C13D1Ev)();
extern void ABISELECT(_ZThn8176_N9S19277C13D1Ev,_ZThn5044_N9S19277C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19277C13D0Ev,_ZTv0_n48_N9S19277C13D0Ev)();
extern void ABISELECT(_ZThn8176_N9S19277C13D0Ev,_ZThn5044_N9S19277C13D0Ev)() __attribute__((weak));
extern void _ZN9S19277C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C15__9S19277C139S19277C16__A1__8S19277C1[] = {
  0,
  ABISELECT(-8176,-5044),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2448,-1472),
  ABISELECT(976,596),
  ABISELECT(-2144,-1288),
  ABISELECT(-2144,-1288),
  ABISELECT(-8176,-5044),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19277C13D1Ev,_ZTv0_n48_N9S19277C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19277C13D0Ev,_ZTv0_n48_N9S19277C13D0Ev),
  (VTBL_ENTRY)&_ZN9S19277C153v12Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C10__A1__9S19277C139S19277C16__A1__8S19277C1[] = {
  0,
  ABISELECT(-3424,-2068),
  ABISELECT(-9152,-5640),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN8S19277C92v7Ev();
extern void _ZN8S19277C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C9__9S19277C139S19277C16__A1__8S19277C1[] = {
  0,
  0,
  ABISELECT(-6544,-4064),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN8S19277C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19277C92v8Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN9S19277C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C11__9S19277C139S19277C16__A1__8S19277C1[] = {
  0,
  0,
  ABISELECT(-9592,-5904),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN9S19277C113v13Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__9S19277C16__8S19277C1[] = {
  0,
  ABISELECT(-6032,-3756),
  (VTBL_ENTRY)&(_ZTI9S19277C16[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN9S19277C103v10Ev();
extern void _ZN9S19277C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C149S19277C13__9S19277C16__8S19277C1[] = {
  ABISELECT(5984,3732),
  ABISELECT(8080,4996),
  ABISELECT(5680,3548),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19277C16[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19277C143v11Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__A1__9S19277C16__8S19277C1[] = {
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-8128,-5020),
  (VTBL_ENTRY)&(_ZTI9S19277C16[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C16__8S19277C1[] = {
  0,
  ABISELECT(-5728,-3572),
  (VTBL_ENTRY)&(_ZTI9S19277C16[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19277C16D1Ev,_ZTv0_n48_N9S19277C16D1Ev)();
extern void ABISELECT(_ZThn8176_N9S19277C16D1Ev,_ZThn5044_N9S19277C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19277C16D0Ev,_ZTv0_n48_N9S19277C16D0Ev)();
extern void ABISELECT(_ZThn8176_N9S19277C16D0Ev,_ZThn5044_N9S19277C16D0Ev)() __attribute__((weak));
extern void _ZN9S19277C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C15__9S19277C16__8S19277C1[] = {
  0,
  ABISELECT(-8176,-5044),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2448,-1472),
  ABISELECT(976,596),
  ABISELECT(-2144,-1288),
  ABISELECT(-2144,-1288),
  ABISELECT(-8176,-5044),
  (VTBL_ENTRY)&(_ZTI9S19277C16[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19277C16D1Ev,_ZTv0_n48_N9S19277C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19277C16D0Ev,_ZTv0_n48_N9S19277C16D0Ev),
  (VTBL_ENTRY)&_ZN9S19277C153v12Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C10__A1__9S19277C16__8S19277C1[] = {
  0,
  ABISELECT(-3424,-2068),
  ABISELECT(-9152,-5640),
  (VTBL_ENTRY)&(_ZTI9S19277C16[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN8S19277C92v7Ev();
extern void _ZN8S19277C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C9__9S19277C16__8S19277C1[] = {
  0,
  0,
  ABISELECT(-6544,-4064),
  (VTBL_ENTRY)&(_ZTI9S19277C16[0]),
  (VTBL_ENTRY)&_ZN8S19277C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19277C92v8Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN9S19277C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C11__9S19277C16__8S19277C1[] = {
  0,
  0,
  ABISELECT(-9592,-5904),
  (VTBL_ENTRY)&(_ZTI9S19277C16[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN9S19277C113v13Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C63v15Ev();
extern void _ZN8S19277C63v16Ev();
extern void _ZN8S19277C6D1Ev();
extern void _ZN8S19277C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C6__8S19277C1[] = {
  ABISELECT(3560,2148),
  ABISELECT(3120,1884),
  ABISELECT(2144,1288),
  ABISELECT(-304,-184),
  ABISELECT(2096,1264),
  ABISELECT(1432,848),
  ABISELECT(1416,840),
  ABISELECT(512,308),
  0,
  ABISELECT(72,48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19277C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19277C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19277C6D0Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C7__8S19277C6__8S19277C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
};
extern void _ZN8S19277C92v7Ev();
extern void _ZN8S19277C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C9__8S19277C6__8S19277C1[] = {
  0,
  0,
  ABISELECT(-512,-308),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN8S19277C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19277C92v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19277C6D1Ev,_ZTv0_n12_N8S19277C6D1Ev)();
extern void ABISELECT(_ZThn1416_N8S19277C6D1Ev,_ZThn840_N8S19277C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19277C6D0Ev,_ZTv0_n12_N8S19277C6D0Ev)();
extern void ABISELECT(_ZThn1416_N8S19277C6D0Ev,_ZThn840_N8S19277C6D0Ev)() __attribute__((weak));
extern void _ZN12S19277C12_nt2v9Ev();
static  VTBL_ENTRY _tg__ZTV12S19277C12_nt__8S19277C6__8S19277C1[] = {
  0,
  ABISELECT(-1416,-840),
  ABISELECT(-1416,-840),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19277C6D1Ev,_ZTv0_n12_N8S19277C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19277C6D0Ev,_ZTv0_n12_N8S19277C6D0Ev),
  (VTBL_ENTRY)&_ZN12S19277C12_nt2v9Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN9S19277C133v14Ev();
extern void ABISELECT(_ZTv0_n120_N8S19277C6D1Ev,_ZTv0_n60_N8S19277C6D1Ev)();
extern void ABISELECT(_ZThn1432_N8S19277C6D1Ev,_ZThn848_N8S19277C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S19277C6D0Ev,_ZTv0_n60_N8S19277C6D0Ev)();
extern void ABISELECT(_ZThn1432_N8S19277C6D0Ev,_ZThn848_N8S19277C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19277C13__8S19277C6__8S19277C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-1432,-848),
  0,
  0,
  0,
  0,
  ABISELECT(2128,1300),
  ABISELECT(-920,-540),
  ABISELECT(1688,1036),
  ABISELECT(712,440),
  ABISELECT(-1736,-1032),
  ABISELECT(664,416),
  ABISELECT(-1432,-848),
  ABISELECT(-1432,-848),
  ABISELECT(-1432,-848),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19277C133v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19277C6D1Ev,_ZTv0_n60_N8S19277C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19277C6D0Ev,_ZTv0_n60_N8S19277C6D0Ev),
};
extern void _ZN9S19277C103v10Ev();
extern void _ZN9S19277C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C149S19277C13__8S19277C6__8S19277C1[] = {
  ABISELECT(-1480,-872),
  ABISELECT(616,392),
  ABISELECT(-1784,-1056),
  ABISELECT(-1480,-872),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19277C143v11Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__A2__8S19277C6__8S19277C1[] = {
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__A1__8S19277C6__8S19277C1[] = {
  0,
  ABISELECT(304,184),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N8S19277C6D1Ev,_ZTv0_n48_N8S19277C6D1Ev)();
extern void ABISELECT(_ZThn2144_N8S19277C6D1Ev,_ZThn1288_N8S19277C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19277C6D0Ev,_ZTv0_n48_N8S19277C6D0Ev)();
extern void ABISELECT(_ZThn2144_N8S19277C6D0Ev,_ZThn1288_N8S19277C6D0Ev)() __attribute__((weak));
extern void _ZN9S19277C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C15__8S19277C6__8S19277C1[] = {
  0,
  ABISELECT(-2144,-1288),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2448,-1472),
  ABISELECT(976,596),
  ABISELECT(-2144,-1288),
  ABISELECT(-2144,-1288),
  ABISELECT(-2144,-1288),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19277C6D1Ev,_ZTv0_n48_N8S19277C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19277C6D0Ev,_ZTv0_n48_N8S19277C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19277C153v12Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C10__A1__8S19277C6__8S19277C1[] = {
  0,
  ABISELECT(-3424,-2068),
  ABISELECT(-3120,-1884),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN9S19277C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C11__8S19277C6__8S19277C1[] = {
  0,
  0,
  ABISELECT(-3560,-2148),
  (VTBL_ENTRY)&(_ZTI8S19277C6[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN9S19277C113v13Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C7__8S19277C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C7[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C48S19277C7__8S19277C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C48S19277C7__8S19277C1[] = {
  0,
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C7__8S19277C1[] = {
  0,
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S19277C7[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN9S19277C133v14Ev();
extern void _ZN9S19277C13D1Ev();
extern void _ZN9S19277C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C13__8S19277C1[] = {
  ABISELECT(2128,1300),
  ABISELECT(-920,-540),
  ABISELECT(1688,1036),
  ABISELECT(712,440),
  ABISELECT(-1736,-1032),
  ABISELECT(664,416),
  ABISELECT(-1432,-848),
  ABISELECT(-1432,-848),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19277C133v14Ev,
  (VTBL_ENTRY)&_ZN9S19277C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19277C13D0Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C49S19277C13__A1__8S19277C1[] = {
  ABISELECT(-1432,-848),
  ABISELECT(-1432,-848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C49S19277C13__A1__8S19277C1[] = {
  0,
  ABISELECT(1432,848),
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN9S19277C103v10Ev();
extern void _ZN9S19277C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C149S19277C13__8S19277C1[] = {
  ABISELECT(-1480,-872),
  ABISELECT(616,392),
  ABISELECT(-1784,-1056),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19277C143v11Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C109S19277C149S19277C13__8S19277C1[] = {
  ABISELECT(-1784,-1056),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__9S19277C109S19277C149S19277C13__8S19277C1[] = {
  0,
  ABISELECT(1784,1056),
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__9S19277C149S19277C13__8S19277C1[] = {
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-616,-392),
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__9S19277C149S19277C13__8S19277C1[] = {
  0,
  ABISELECT(1480,872),
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C149S19277C13__8S19277C1[] = {
  0,
  ABISELECT(1784,1056),
  (VTBL_ENTRY)&(_ZTI9S19277C14[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__9S19277C13__8S19277C1[] = {
  0,
  ABISELECT(1432,848),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN9S19277C103v10Ev();
extern void _ZN9S19277C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C14__9S19277C13__8S19277C1[] = {
  ABISELECT(-1480,-872),
  ABISELECT(616,392),
  ABISELECT(-1784,-1056),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19277C143v11Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__A1__9S19277C13__8S19277C1[] = {
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C13__8S19277C1[] = {
  0,
  ABISELECT(1736,1032),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19277C13D1Ev,_ZTv0_n48_N9S19277C13D1Ev)();
extern void ABISELECT(_ZThn712_N9S19277C13D1Ev,_ZThn440_N9S19277C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19277C13D0Ev,_ZTv0_n48_N9S19277C13D0Ev)();
extern void ABISELECT(_ZThn712_N9S19277C13D0Ev,_ZThn440_N9S19277C13D0Ev)() __attribute__((weak));
extern void _ZN9S19277C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C15__9S19277C13__8S19277C1[] = {
  0,
  ABISELECT(-712,-440),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2448,-1472),
  ABISELECT(976,596),
  ABISELECT(-2144,-1288),
  ABISELECT(-2144,-1288),
  ABISELECT(-712,-440),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19277C13D1Ev,_ZTv0_n48_N9S19277C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19277C13D0Ev,_ZTv0_n48_N9S19277C13D0Ev),
  (VTBL_ENTRY)&_ZN9S19277C153v12Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C10__A1__9S19277C13__8S19277C1[] = {
  0,
  ABISELECT(-3424,-2068),
  ABISELECT(-1688,-1036),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN8S19277C92v7Ev();
extern void _ZN8S19277C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C9__9S19277C13__8S19277C1[] = {
  0,
  0,
  ABISELECT(920,540),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN8S19277C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19277C92v8Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN9S19277C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C11__9S19277C13__8S19277C1[] = {
  0,
  0,
  ABISELECT(-2128,-1300),
  (VTBL_ENTRY)&(_ZTI9S19277C13[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN9S19277C113v13Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C4__A2__8S19277C1[] = {
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C4__A2__8S19277C1[] = {
  0,
  ABISELECT(2096,1264),
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
extern void _ZN9S19277C15D1Ev();
extern void _ZN9S19277C15D0Ev();
extern void _ZN9S19277C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C15__8S19277C1[] = {
  ABISELECT(-2448,-1472),
  ABISELECT(976,596),
  ABISELECT(-2144,-1288),
  ABISELECT(-2144,-1288),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C15[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
  (VTBL_ENTRY)&_ZN9S19277C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19277C15D0Ev,
  (VTBL_ENTRY)&_ZN9S19277C153v12Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
extern void _ZN8S19277C72v5Ev();
extern void _ZN8S19277C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C79S19277C15__A1__8S19277C1[] = {
  ABISELECT(-2144,-1288),
  ABISELECT(-2144,-1288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C7[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19277C72v6Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
extern void _ZN8S19277C42v2Ev();
extern void _ZN8S19277C42v3Ev();
extern void _ZN8S19277C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19277C48S19277C79S19277C15__A3__8S19277C1[] = {
  ABISELECT(-2144,-1288),
  ABISELECT(-2144,-1288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19277C42v4Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C48S19277C79S19277C15__A3__8S19277C1[] = {
  0,
  ABISELECT(2144,1288),
  (VTBL_ENTRY)&(_ZTI8S19277C4[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__8S19277C79S19277C15__A1__8S19277C1[] = {
  0,
  ABISELECT(2144,1288),
  (VTBL_ENTRY)&(_ZTI8S19277C7[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt__9S19277C15__8S19277C1[] = {
  0,
  ABISELECT(2144,1288),
  (VTBL_ENTRY)&(_ZTI9S19277C15[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C10__9S19277C15__8S19277C1[] = {
  0,
  ABISELECT(-3424,-2068),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI9S19277C15[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C15__8S19277C1[] = {
  0,
  ABISELECT(2448,1472),
  (VTBL_ENTRY)&(_ZTI9S19277C15[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
extern void _ZN9S19277C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19277C10__A1__8S19277C1[] = {
  ABISELECT(-3424,-2068),
  0,
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN9S19277C103v10Ev,
};
extern void _ZN11S19277C3_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19277C3_nt8S19277C2__9S19277C10__A1__8S19277C1[] = {
  0,
  ABISELECT(3424,2068),
  (VTBL_ENTRY)&(_ZTI9S19277C10[0]),
  (VTBL_ENTRY)&_ZN11S19277C3_nt2v1Ev,
};
static  VTT_ENTRY vtt_S19277C1[] = {
  {&(_ZTV8S19277C1[14]),  14,156},
  {&(_tg__ZTV9S19277C16__8S19277C1[10]),  10,17},
  {&(_tg__ZTV9S19277C139S19277C16__A1__8S19277C1[10]),  10,17},
  {&(_tg__ZTV8S19277C49S19277C139S19277C16__A4__8S19277C1[4]),  4,8},
  {&(_tg__ZTV11S19277C3_nt__8S19277C49S19277C139S19277C16__A4__8S19277C1[3]),  3,4},
  {&(_tg__ZTV9S19277C149S19277C139S19277C16__A1__8S19277C1[5]),  5,7},
  {&(_tg__ZTV9S19277C109S19277C149S19277C139S19277C16__A2__8S19277C1[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__9S19277C109S19277C149S19277C139S19277C16__A2__8S19277C1[3]),  3,4},
  {&(_tg__ZTV8S19277C4__9S19277C149S19277C139S19277C16__A1__8S19277C1[7]),  7,11},
  {&(_tg__ZTV11S19277C3_nt__9S19277C149S19277C139S19277C16__A1__8S19277C1[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C149S19277C139S19277C16__A1__8S19277C1[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt__9S19277C139S19277C16__A1__8S19277C1[3]),  3,4},
  {&(_tg__ZTV9S19277C14__9S19277C139S19277C16__A1__8S19277C1[5]),  5,7},
  {&(_tg__ZTV8S19277C4__A1__9S19277C139S19277C16__A1__8S19277C1[7]),  7,11},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C139S19277C16__A1__8S19277C1[3]),  3,4},
  {&(_tg__ZTV9S19277C15__9S19277C139S19277C16__A1__8S19277C1[13]),  13,22},
  {&(_tg__ZTV9S19277C10__A1__9S19277C139S19277C16__A1__8S19277C1[4]),  4,5},
  {&(_tg__ZTV8S19277C9__9S19277C139S19277C16__A1__8S19277C1[4]),  4,6},
  {&(_tg__ZTV9S19277C11__9S19277C139S19277C16__A1__8S19277C1[4]),  4,6},
  {&(_tg__ZTV11S19277C3_nt__9S19277C16__8S19277C1[3]),  3,4},
  {&(_tg__ZTV9S19277C149S19277C13__9S19277C16__8S19277C1[5]),  5,7},
  {&(_tg__ZTV8S19277C4__A1__9S19277C16__8S19277C1[7]),  7,11},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C16__8S19277C1[3]),  3,4},
  {&(_tg__ZTV9S19277C15__9S19277C16__8S19277C1[13]),  13,22},
  {&(_tg__ZTV9S19277C10__A1__9S19277C16__8S19277C1[4]),  4,5},
  {&(_tg__ZTV8S19277C9__9S19277C16__8S19277C1[4]),  4,6},
  {&(_tg__ZTV9S19277C11__9S19277C16__8S19277C1[4]),  4,6},
  {&(_ZTV8S19277C1[31]),  31,156},
  {&(_ZTV8S19277C1[48]),  48,156},
  {&(_ZTV8S19277C1[62]),  62,156},
  {&(_ZTV8S19277C1[48]),  48,156},
  {&(_ZTV8S19277C1[72]),  72,156},
  {&(_ZTV8S19277C1[78]),  78,156},
  {&(_ZTV8S19277C1[98]),  98,156},
  {&(_ZTV8S19277C1[110]),  110,156},
  {&(_ZTV8S19277C1[119]),  119,156},
  {&(_ZTV8S19277C1[136]),  136,156},
  {&(_ZTV8S19277C1[149]),  149,156},
  {&(_ZTV8S19277C1[154]),  154,156},
  {&(_ZTV8S19277C1[26]),  26,156},
  {&(_tg__ZTV8S19277C6__8S19277C1[13]),  13,18},
  {&(_tg__ZTV8S19277C7__8S19277C6__8S19277C1[9]),  9,15},
  {&(_tg__ZTV8S19277C6__8S19277C1[13]),  13,18},
  {&(_tg__ZTV8S19277C9__8S19277C6__8S19277C1[4]),  4,6},
  {&(_tg__ZTV12S19277C12_nt__8S19277C6__8S19277C1[4]),  4,7},
  {&(_tg__ZTV9S19277C13__8S19277C6__8S19277C1[17]),  17,24},
  {&(_tg__ZTV9S19277C149S19277C13__8S19277C6__8S19277C1[5]),  5,7},
  {&(_tg__ZTV8S19277C4__A2__8S19277C6__8S19277C1[7]),  7,11},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__A1__8S19277C6__8S19277C1[3]),  3,4},
  {&(_tg__ZTV9S19277C15__8S19277C6__8S19277C1[13]),  13,22},
  {&(_tg__ZTV9S19277C10__A1__8S19277C6__8S19277C1[4]),  4,5},
  {&(_tg__ZTV9S19277C11__8S19277C6__8S19277C1[4]),  4,6},
  {&(_tg__ZTV8S19277C7__8S19277C1[4]),  4,10},
  {&(_tg__ZTV8S19277C48S19277C7__8S19277C1[4]),  4,8},
  {&(_tg__ZTV11S19277C3_nt__8S19277C48S19277C7__8S19277C1[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt__8S19277C7__8S19277C1[3]),  3,4},
  {&(_tg__ZTV9S19277C13__8S19277C1[10]),  10,17},
  {&(_tg__ZTV8S19277C49S19277C13__A1__8S19277C1[4]),  4,8},
  {&(_tg__ZTV11S19277C3_nt__8S19277C49S19277C13__A1__8S19277C1[3]),  3,4},
  {&(_tg__ZTV9S19277C149S19277C13__8S19277C1[5]),  5,7},
  {&(_tg__ZTV9S19277C109S19277C149S19277C13__8S19277C1[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__9S19277C109S19277C149S19277C13__8S19277C1[3]),  3,4},
  {&(_tg__ZTV8S19277C4__9S19277C149S19277C13__8S19277C1[7]),  7,11},
  {&(_tg__ZTV11S19277C3_nt__9S19277C149S19277C13__8S19277C1[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C149S19277C13__8S19277C1[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt__9S19277C13__8S19277C1[3]),  3,4},
  {&(_tg__ZTV9S19277C14__9S19277C13__8S19277C1[5]),  5,7},
  {&(_tg__ZTV8S19277C4__A1__9S19277C13__8S19277C1[7]),  7,11},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C13__8S19277C1[3]),  3,4},
  {&(_tg__ZTV9S19277C15__9S19277C13__8S19277C1[13]),  13,22},
  {&(_tg__ZTV9S19277C10__A1__9S19277C13__8S19277C1[4]),  4,5},
  {&(_tg__ZTV8S19277C9__9S19277C13__8S19277C1[4]),  4,6},
  {&(_tg__ZTV9S19277C11__9S19277C13__8S19277C1[4]),  4,6},
  {&(_tg__ZTV8S19277C4__A2__8S19277C1[4]),  4,8},
  {&(_tg__ZTV11S19277C3_nt__8S19277C4__A2__8S19277C1[3]),  3,4},
  {&(_tg__ZTV9S19277C15__8S19277C1[6]),  6,15},
  {&(_tg__ZTV8S19277C79S19277C15__A1__8S19277C1[4]),  4,10},
  {&(_tg__ZTV8S19277C48S19277C79S19277C15__A3__8S19277C1[4]),  4,8},
  {&(_tg__ZTV11S19277C3_nt__8S19277C48S19277C79S19277C15__A3__8S19277C1[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt__8S19277C79S19277C15__A1__8S19277C1[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt__9S19277C15__8S19277C1[3]),  3,4},
  {&(_tg__ZTV9S19277C10__9S19277C15__8S19277C1[4]),  4,5},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__A1__9S19277C15__8S19277C1[3]),  3,4},
  {&(_tg__ZTV9S19277C10__A1__8S19277C1[3]),  3,4},
  {&(_tg__ZTV11S19277C3_nt8S19277C2__9S19277C10__A1__8S19277C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19277C1[];
extern  VTBL_ENTRY _ZTV8S19277C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19277C1[];
static VTBL_ENTRY alt_thunk_names48[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19277C6D0Ev,_ZTv0_n48_N8S19277C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2144_N8S19277C6D0Ev,_ZThn1288_N8S19277C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19277C6D1Ev,_ZTv0_n48_N8S19277C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2144_N8S19277C6D1Ev,_ZThn1288_N8S19277C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19277C6D0Ev,_ZTv0_n60_N8S19277C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S19277C6D0Ev,_ZThn848_N8S19277C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19277C6D1Ev,_ZTv0_n60_N8S19277C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S19277C6D1Ev,_ZThn848_N8S19277C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19277C6D0Ev,_ZTv0_n12_N8S19277C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1416_N8S19277C6D0Ev,_ZThn840_N8S19277C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19277C6D1Ev,_ZTv0_n12_N8S19277C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1416_N8S19277C6D1Ev,_ZThn840_N8S19277C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19277C16D0Ev,_ZTv0_n48_N9S19277C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8176_N9S19277C16D0Ev,_ZThn5044_N9S19277C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19277C16D1Ev,_ZTv0_n48_N9S19277C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8176_N9S19277C16D1Ev,_ZThn5044_N9S19277C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19277C13D0Ev,_ZTv0_n48_N9S19277C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn712_N9S19277C13D0Ev,_ZThn440_N9S19277C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8176_N9S19277C13D0Ev,_ZThn5044_N9S19277C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19277C13D1Ev,_ZTv0_n48_N9S19277C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn712_N9S19277C13D1Ev,_ZThn440_N9S19277C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8176_N9S19277C13D1Ev,_ZThn5044_N9S19277C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19277C1D0Ev,_ZTv0_n48_N8S19277C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8176_N8S19277C1D0Ev,_ZThn5044_N8S19277C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19277C1D1Ev,_ZTv0_n48_N8S19277C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8176_N8S19277C1D1Ev,_ZThn5044_N8S19277C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19277C1D0Ev,_ZTv0_n60_N8S19277C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7464_N8S19277C1D0Ev,_ZThn4604_N8S19277C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19277C1D1Ev,_ZTv0_n60_N8S19277C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7464_N8S19277C1D1Ev,_ZThn4604_N8S19277C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19277C1D0Ev,_ZTv0_n12_N8S19277C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7448_N8S19277C1D0Ev,_ZThn4596_N8S19277C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19277C1D1Ev,_ZTv0_n12_N8S19277C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7448_N8S19277C1D1Ev,_ZThn4596_N8S19277C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S19277C1D0Ev,_ZTv0_n64_N8S19277C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6032_N8S19277C1D0Ev,_ZThn3756_N8S19277C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S19277C1D1Ev,_ZTv0_n64_N8S19277C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6032_N8S19277C1D1Ev,_ZThn3756_N8S19277C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19277C1 = {  "S19277C1", // class name
  bases_S19277C1, 25,
  &(vtc_S19277C1[0]), // expected_vtbl_contents
  &(vtt_S19277C1[0]), // expected_vtt_contents
  ABISELECT(9936,6116), // object size
  NSPAIRA(_ZTI8S19277C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19277C1),156, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19277C1),85, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names48,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19276C3  {
  virtual void  v1(); // _ZN8S19276C32v1Ev
  ~S19276C3(); // tgen
  S19276C3(); // tgen
};
//SIG(-1 S19276C3) C1{ v1}


void  S19276C3 ::v1(){vfunc_called(this, "_ZN8S19276C32v1Ev");}
S19276C3 ::~S19276C3(){ note_dtor("S19276C3", this);} // tgen
S19276C3 ::S19276C3(){ note_ctor("S19276C3", this);} // tgen

static void Test_S19276C3()
{
  extern Class_Descriptor cd_S19276C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19276C3, buf);
    S19276C3 *dp, &lv = *(dp=new (buf) S19276C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19276C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19276C3)");
    test_class_info(&lv, &cd_S19276C3);
    dp->~S19276C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19276C3(Test_S19276C3, "S19276C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19276C3C1Ev();
extern void _ZN8S19276C3D1Ev();
Name_Map name_map_S19276C3[] = {
  NSPAIR(_ZN8S19276C3C1Ev),
  NSPAIR(_ZN8S19276C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19276C3[];
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY vtc_S19276C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C3[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
Class_Descriptor cd_S19276C3 = {  "S19276C3", // class name
  0,0,//no base classes
  &(vtc_S19276C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19276C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19276C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19276C4  : virtual S19276C3 {
  void *s19276c4f0[3];
  ::S2489C12_nt s19276c4f1;
  void *s19276c4f2;
  virtual void  v2(); // _ZN8S19276C42v2Ev
  virtual void  v3(); // _ZN8S19276C42v3Ev
  virtual void  v4(); // _ZN8S19276C42v4Ev
  ~S19276C4(); // tgen
  S19276C4(); // tgen
};
//SIG(-1 S19276C4) C1{ VBC2{ v4} v1 v2 v3 Fp[3] FC3{} Fp}


void  S19276C4 ::v2(){vfunc_called(this, "_ZN8S19276C42v2Ev");}
void  S19276C4 ::v3(){vfunc_called(this, "_ZN8S19276C42v3Ev");}
void  S19276C4 ::v4(){vfunc_called(this, "_ZN8S19276C42v4Ev");}
S19276C4 ::~S19276C4(){ note_dtor("S19276C4", this);} // tgen
S19276C4 ::S19276C4(){ note_ctor("S19276C4", this);} // tgen

static void Test_S19276C4()
{
  extern Class_Descriptor cd_S19276C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S19276C4, buf);
    S19276C4 *dp, &lv = *(dp=new (buf) S19276C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19276C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19276C4)");
    check_base_class_offset(lv, (S19276C3*), 0, "S19276C4");
    check_field_offset(lv, s19276c4f0, ABISELECT(8,4), "S19276C4.s19276c4f0");
    check_field_offset(lv, s19276c4f1, ABISELECT(32,16), "S19276C4.s19276c4f1");
    check_field_offset(lv, s19276c4f2, ABISELECT(40,20), "S19276C4.s19276c4f2");
    test_class_info(&lv, &cd_S19276C4);
    dp->~S19276C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19276C4(Test_S19276C4, "S19276C4", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19276C4C1Ev();
extern void _ZN8S19276C4D1Ev();
Name_Map name_map_S19276C4[] = {
  NSPAIR(_ZN8S19276C4C1Ev),
  NSPAIR(_ZN8S19276C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
static Base_Class bases_S19276C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19276C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19276C4[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY vtc_S19276C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S19276C4[];
static  VTT_ENTRY vtt_S19276C4[] = {
  {&(_ZTV8S19276C4[4]),  4,8},
  {&(_ZTV8S19276C4[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
Class_Descriptor cd_S19276C4 = {  "S19276C4", // class name
  bases_S19276C4, 1,
  &(vtc_S19276C4[0]), // expected_vtbl_contents
  &(vtt_S19276C4[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19276C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19276C4),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19276C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19276C2  : S19276C3 {
  char s19276c2f0[5];
  ::S19276C4 s19276c2f1[2];
  int s19276c2f2;
  void *s19276c2f3[7];
  ::S19276C4 s19276c2f4;
  ::S19276C3 s19276c2f5;
  char s19276c2f6;
  int s19276c2f7;
  short s19276c2f8[5];
  int s19276c2f9[8];
  __tsi64 s19276c2f10;
  char s19276c2f11:8;
  ~S19276C2(); // tgen
  S19276C2(); // tgen
};
//SIG(-1 S19276C2) C1{ BC2{ v1} Fc[5] FC3{ VBC2 v2 v3 v4 Fp[3] FC4{} Fp}[2] Fi Fp[7] FC3 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}


S19276C2 ::~S19276C2(){ note_dtor("S19276C2", this);} // tgen
S19276C2 ::S19276C2(){ note_ctor("S19276C2", this);} // tgen

static void Test_S19276C2()
{
  extern Class_Descriptor cd_S19276C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,47)];
    init_test(&cd_S19276C2, buf);
    S19276C2 *dp, &lv = *(dp=new (buf) S19276C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,184), "sizeof(S19276C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19276C2)");
    check_base_class_offset(lv, (S19276C3*), 0, "S19276C2");
    check_field_offset(lv, s19276c2f0, ABISELECT(8,4), "S19276C2.s19276c2f0");
    check_field_offset(lv, s19276c2f1, ABISELECT(16,12), "S19276C2.s19276c2f1");
    check_field_offset(lv, s19276c2f2, ABISELECT(112,60), "S19276C2.s19276c2f2");
    check_field_offset(lv, s19276c2f3, ABISELECT(120,64), "S19276C2.s19276c2f3");
    check_field_offset(lv, s19276c2f4, ABISELECT(176,92), "S19276C2.s19276c2f4");
    check_field_offset(lv, s19276c2f5, ABISELECT(224,116), "S19276C2.s19276c2f5");
    check_field_offset(lv, s19276c2f6, ABISELECT(232,120), "S19276C2.s19276c2f6");
    check_field_offset(lv, s19276c2f7, ABISELECT(236,124), "S19276C2.s19276c2f7");
    check_field_offset(lv, s19276c2f8, ABISELECT(240,128), "S19276C2.s19276c2f8");
    check_field_offset(lv, s19276c2f9, ABISELECT(252,140), "S19276C2.s19276c2f9");
    check_field_offset(lv, s19276c2f10, ABISELECT(288,172), "S19276C2.s19276c2f10");
    set_bf_and_test(lv, s19276c2f11, ABISELECT(296,180), 0, 8, 1, "S19276C2");
    set_bf_and_test(lv, s19276c2f11, ABISELECT(296,180), 0, 8, hide_sll(1LL<<7), "S19276C2");
    test_class_info(&lv, &cd_S19276C2);
    dp->~S19276C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19276C2(Test_S19276C2, "S19276C2", ABISELECT(304,184));

#else // __cplusplus

extern void _ZN8S19276C2C1Ev();
extern void _ZN8S19276C2D1Ev();
Name_Map name_map_S19276C2[] = {
  NSPAIR(_ZN8S19276C2C1Ev),
  NSPAIR(_ZN8S19276C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
static Base_Class bases_S19276C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19276C3,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19276C2[];
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY vtc_S19276C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C2[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern VTBL_ENTRY _ZTI8S19276C2[];
extern  VTBL_ENTRY _ZTV8S19276C2[];
Class_Descriptor cd_S19276C2 = {  "S19276C2", // class name
  bases_S19276C2, 1,
  &(vtc_S19276C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,184), // object size
  NSPAIRA(_ZTI8S19276C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19276C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19276C8  : S19276C2 , virtual S19276C3 , virtual S19276C4 {
  int s19276c8f0;
  void *s19276c8f1;
  ~S19276C8(); // tgen
  S19276C8(); // tgen
};
//SIG(-1 S19276C8) C1{ BC2{ BC3{ v1} Fc[5] FC4{ VBC3 v2 v3 v4 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC3 VBC4 Fi Fp}


S19276C8 ::~S19276C8(){ note_dtor("S19276C8", this);} // tgen
S19276C8 ::S19276C8(){ note_ctor("S19276C8", this);} // tgen

static void Test_S19276C8()
{
  extern Class_Descriptor cd_S19276C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,55)];
    init_test(&cd_S19276C8, buf);
    S19276C8 *dp, &lv = *(dp=new (buf) S19276C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,216), "sizeof(S19276C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19276C8)");
    check_base_class_offset(lv, (S19276C3*)(S19276C2*), 0, "S19276C8");
    check_base_class_offset(lv, (S19276C2*), 0, "S19276C8");
    /*is_ambiguous_... S19276C8::S19276C3 */ AMB_check_base_class_offset(lv, (S19276C3*), ABISELECT(312,192), "S19276C8");
    check_base_class_offset(lv, (S19276C3*)(S19276C4*), ABISELECT(312,192), "S19276C8");
    check_base_class_offset(lv, (S19276C4*), ABISELECT(312,192), "S19276C8");
    check_field_offset(lv, s19276c8f0, ABISELECT(300,184), "S19276C8.s19276c8f0");
    check_field_offset(lv, s19276c8f1, ABISELECT(304,188), "S19276C8.s19276c8f1");
    test_class_info(&lv, &cd_S19276C8);
    dp->~S19276C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19276C8(Test_S19276C8, "S19276C8", ABISELECT(360,216));

#else // __cplusplus

extern void _ZN8S19276C8C1Ev();
extern void _ZN8S19276C8D1Ev();
Name_Map name_map_S19276C8[] = {
  NSPAIR(_ZN8S19276C8C1Ev),
  NSPAIR(_ZN8S19276C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C2;
extern VTBL_ENTRY _ZTI8S19276C2[];
extern  VTBL_ENTRY _ZTV8S19276C2[];
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
static Base_Class bases_S19276C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19276C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19276C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19276C3,    ABISELECT(312,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19276C4,    ABISELECT(312,192), //bcp->offset
    5, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19276C8[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY vtc_S19276C8[] = {
  ABISELECT(312,192),
  ABISELECT(312,192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C8[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-192),
  (VTBL_ENTRY)&(_ZTI8S19276C8[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S19276C8[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__8S19276C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
static  VTT_ENTRY vtt_S19276C8[] = {
  {&(_ZTV8S19276C8[4]),  4,16},
  {&(_ZTV8S19276C8[12]),  12,16},
  {&(_ZTV8S19276C8[12]),  12,16},
  {&(_tg__ZTV8S19276C4__8S19276C8[4]),  4,8},
  {&(_tg__ZTV8S19276C4__8S19276C8[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S19276C8[];
extern  VTBL_ENTRY _ZTV8S19276C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C8[];
Class_Descriptor cd_S19276C8 = {  "S19276C8", // class name
  bases_S19276C8, 4,
  &(vtc_S19276C8[0]), // expected_vtbl_contents
  &(vtt_S19276C8[0]), // expected_vtt_contents
  ABISELECT(360,216), // object size
  NSPAIRA(_ZTI8S19276C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19276C8),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19276C8),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19276C7  : S19276C4 {
  void *s19276c7f0;
  ::S19276C8 s19276c7f1;
  int s19276c7f2;
  void *s19276c7f3;
  int s19276c7f4[2];
  virtual void  v5(); // _ZN8S19276C72v5Ev
  virtual void  v6(); // _ZN8S19276C72v6Ev
  ~S19276C7(); // tgen
  S19276C7(); // tgen
};
//SIG(-1 S19276C7) C1{ BC2{ VBC3{ v3} v4 v5 v6 Fp[3] FC4{} Fp} v1 v2 Fp FC5{ BC6{ BC3 Fc[5] FC2[2] Fi Fp[7] FC2 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC3 VBC2 Fi Fp} Fi Fp Fi[2]}


void  S19276C7 ::v5(){vfunc_called(this, "_ZN8S19276C72v5Ev");}
void  S19276C7 ::v6(){vfunc_called(this, "_ZN8S19276C72v6Ev");}
S19276C7 ::~S19276C7(){ note_dtor("S19276C7", this);} // tgen
S19276C7 ::S19276C7(){ note_ctor("S19276C7", this);} // tgen

static void Test_S19276C7()
{
  extern Class_Descriptor cd_S19276C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(56,66)];
    init_test(&cd_S19276C7, buf);
    S19276C7 *dp, &lv = *(dp=new (buf) S19276C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(440,260), "sizeof(S19276C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19276C7)");
    check_base_class_offset(lv, (S19276C3*)(S19276C4*), 0, "S19276C7");
    check_base_class_offset(lv, (S19276C4*), 0, "S19276C7");
    check_field_offset(lv, s19276c7f0, ABISELECT(48,24), "S19276C7.s19276c7f0");
    check_field_offset(lv, s19276c7f1, ABISELECT(56,28), "S19276C7.s19276c7f1");
    check_field_offset(lv, s19276c7f2, ABISELECT(416,244), "S19276C7.s19276c7f2");
    check_field_offset(lv, s19276c7f3, ABISELECT(424,248), "S19276C7.s19276c7f3");
    check_field_offset(lv, s19276c7f4, ABISELECT(432,252), "S19276C7.s19276c7f4");
    test_class_info(&lv, &cd_S19276C7);
    dp->~S19276C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19276C7(Test_S19276C7, "S19276C7", ABISELECT(440,260));

#else // __cplusplus

extern void _ZN8S19276C7C1Ev();
extern void _ZN8S19276C7D1Ev();
Name_Map name_map_S19276C7[] = {
  NSPAIR(_ZN8S19276C7C1Ev),
  NSPAIR(_ZN8S19276C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
static Base_Class bases_S19276C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19276C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19276C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19276C7[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
static  VTBL_ENTRY vtc_S19276C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C7[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
};
extern VTBL_ENTRY _ZTV8S19276C7[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__8S19276C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
static  VTT_ENTRY vtt_S19276C7[] = {
  {&(_ZTV8S19276C7[4]),  4,10},
  {&(_tg__ZTV8S19276C4__8S19276C7[4]),  4,8},
  {&(_tg__ZTV8S19276C4__8S19276C7[4]),  4,8},
  {&(_ZTV8S19276C7[4]),  4,10},
};
extern VTBL_ENTRY _ZTI8S19276C7[];
extern  VTBL_ENTRY _ZTV8S19276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C7[];
Class_Descriptor cd_S19276C7 = {  "S19276C7", // class name
  bases_S19276C7, 2,
  &(vtc_S19276C7[0]), // expected_vtbl_contents
  &(vtt_S19276C7[0]), // expected_vtt_contents
  ABISELECT(440,260), // object size
  NSPAIRA(_ZTI8S19276C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19276C7),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19276C7),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19276C11  : S19276C3 {
  char s19276c11f0;
  __tsi64 s19276c11f1;
  int s19276c11f2[3];
  ::S19276C2 s19276c11f3;
  virtual void  v13(); // _ZN9S19276C113v13Ev
  ~S19276C11(); // tgen
  S19276C11(); // tgen
};
//SIG(-1 S19276C11) C1{ BC2{ v2} v1 Fc FL Fi[3] FC3{ BC2 Fc[5] FC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}}


void  S19276C11 ::v13(){vfunc_called(this, "_ZN9S19276C113v13Ev");}
S19276C11 ::~S19276C11(){ note_dtor("S19276C11", this);} // tgen
S19276C11 ::S19276C11(){ note_ctor("S19276C11", this);} // tgen

static void Test_S19276C11()
{
  extern Class_Descriptor cd_S19276C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,54)];
    init_test(&cd_S19276C11, buf);
    S19276C11 *dp, &lv = *(dp=new (buf) S19276C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,212), "sizeof(S19276C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19276C11)");
    check_base_class_offset(lv, (S19276C3*), 0, "S19276C11");
    check_field_offset(lv, s19276c11f0, ABISELECT(8,4), "S19276C11.s19276c11f0");
    check_field_offset(lv, s19276c11f1, ABISELECT(16,8), "S19276C11.s19276c11f1");
    check_field_offset(lv, s19276c11f2, ABISELECT(24,16), "S19276C11.s19276c11f2");
    check_field_offset(lv, s19276c11f3, ABISELECT(40,28), "S19276C11.s19276c11f3");
    test_class_info(&lv, &cd_S19276C11);
    dp->~S19276C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19276C11(Test_S19276C11, "S19276C11", ABISELECT(344,212));

#else // __cplusplus

extern void _ZN9S19276C11C1Ev();
extern void _ZN9S19276C11D1Ev();
Name_Map name_map_S19276C11[] = {
  NSPAIR(_ZN9S19276C11C1Ev),
  NSPAIR(_ZN9S19276C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
static Base_Class bases_S19276C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19276C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19276C11[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN9S19276C113v13Ev();
static  VTBL_ENTRY vtc_S19276C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C11[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19276C113v13Ev,
};
extern VTBL_ENTRY _ZTI9S19276C11[];
extern  VTBL_ENTRY _ZTV9S19276C11[];
Class_Descriptor cd_S19276C11 = {  "S19276C11", // class name
  bases_S19276C11, 1,
  &(vtc_S19276C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,212), // object size
  NSPAIRA(_ZTI9S19276C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19276C11),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19276C10  : virtual S19276C2 {
  void *s19276c10f0;
  __tsi64 s19276c10f1;
  void *s19276c10f2[6];
  ::S19276C3 s19276c10f3;
  ::S19276C11 s19276c10f4;
  void *s19276c10f5;
  int s19276c10f6;
  virtual void  v10(); // _ZN9S19276C103v10Ev
  ~S19276C10(); // tgen
  S19276C10(); // tgen
};
//SIG(-1 S19276C10) C1{ VBC2{ BC3{ v2} Fc[5] FC4{ VBC3 v4 v5 v6 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v1 Fp FL Fp[6] FC3 FC6{ BC3 v3 Fc FL Fi[3] FC2} Fp Fi}


void  S19276C10 ::v10(){vfunc_called(this, "_ZN9S19276C103v10Ev");}
S19276C10 ::~S19276C10(){ note_dtor("S19276C10", this);} // tgen
S19276C10 ::S19276C10(){ note_ctor("S19276C10", this);} // tgen

static void Test_S19276C10()
{
  extern Class_Descriptor cd_S19276C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(94,113)];
    init_test(&cd_S19276C10, buf);
    S19276C10 *dp, &lv = *(dp=new (buf) S19276C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(744,448), "sizeof(S19276C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19276C10)");
    check_base_class_offset(lv, (S19276C3*)(S19276C2*), ABISELECT(440,264), "S19276C10");
    check_base_class_offset(lv, (S19276C2*), ABISELECT(440,264), "S19276C10");
    check_field_offset(lv, s19276c10f0, ABISELECT(8,4), "S19276C10.s19276c10f0");
    check_field_offset(lv, s19276c10f1, ABISELECT(16,8), "S19276C10.s19276c10f1");
    check_field_offset(lv, s19276c10f2, ABISELECT(24,16), "S19276C10.s19276c10f2");
    check_field_offset(lv, s19276c10f3, ABISELECT(72,40), "S19276C10.s19276c10f3");
    check_field_offset(lv, s19276c10f4, ABISELECT(80,44), "S19276C10.s19276c10f4");
    check_field_offset(lv, s19276c10f5, ABISELECT(424,256), "S19276C10.s19276c10f5");
    check_field_offset(lv, s19276c10f6, ABISELECT(432,260), "S19276C10.s19276c10f6");
    test_class_info(&lv, &cd_S19276C10);
    dp->~S19276C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19276C10(Test_S19276C10, "S19276C10", ABISELECT(744,448));

#else // __cplusplus

extern void _ZN9S19276C10C1Ev();
extern void _ZN9S19276C10D1Ev();
Name_Map name_map_S19276C10[] = {
  NSPAIR(_ZN9S19276C10C1Ev),
  NSPAIR(_ZN9S19276C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C2;
extern VTBL_ENTRY _ZTI8S19276C2[];
extern  VTBL_ENTRY _ZTV8S19276C2[];
static Base_Class bases_S19276C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19276C3,    ABISELECT(440,264), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19276C2,    ABISELECT(440,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19276C10[];
extern void _ZN9S19276C103v10Ev();
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY vtc_S19276C10[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern VTBL_ENTRY _ZTV9S19276C10[];
static  VTT_ENTRY vtt_S19276C10[] = {
  {&(_ZTV9S19276C10[3]),  3,8},
  {&(_ZTV9S19276C10[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S19276C10[];
extern  VTBL_ENTRY _ZTV9S19276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C10[];
Class_Descriptor cd_S19276C10 = {  "S19276C10", // class name
  bases_S19276C10, 2,
  &(vtc_S19276C10[0]), // expected_vtbl_contents
  &(vtt_S19276C10[0]), // expected_vtt_contents
  ABISELECT(744,448), // object size
  NSPAIRA(_ZTI9S19276C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19276C10),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19276C10),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19276C9  {
  void *s19276c9f0[2];
  int s19276c9f1[2];
  void *s19276c9f2[15];
  int s19276c9f3;
  ::S19276C10 s19276c9f4;
  virtual void  v7(); // _ZN8S19276C92v7Ev
  virtual void  v8(); // _ZN8S19276C92v8Ev
  ~S19276C9(); // tgen
  S19276C9(); // tgen
};
//SIG(-1 S19276C9) C1{ v1 v2 Fp[2] Fi[2] Fp[15] Fi FC2{ VBC3{ BC4{ v4} Fc[5] FC5{ VBC4 v6 v7 v8 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v3 Fp FL Fp[6] FC4 FC7{ BC4 v5 Fc FL Fi[3] FC3} Fp Fi}}


void  S19276C9 ::v7(){vfunc_called(this, "_ZN8S19276C92v7Ev");}
void  S19276C9 ::v8(){vfunc_called(this, "_ZN8S19276C92v8Ev");}
S19276C9 ::~S19276C9(){ note_dtor("S19276C9", this);} // tgen
S19276C9 ::S19276C9(){ note_ctor("S19276C9", this);} // tgen

static void Test_S19276C9()
{
  extern Class_Descriptor cd_S19276C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(114,134)];
    init_test(&cd_S19276C9, buf);
    S19276C9 *dp, &lv = *(dp=new (buf) S19276C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(904,532), "sizeof(S19276C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19276C9)");
    check_field_offset(lv, s19276c9f0, ABISELECT(8,4), "S19276C9.s19276c9f0");
    check_field_offset(lv, s19276c9f1, ABISELECT(24,12), "S19276C9.s19276c9f1");
    check_field_offset(lv, s19276c9f2, ABISELECT(32,20), "S19276C9.s19276c9f2");
    check_field_offset(lv, s19276c9f3, ABISELECT(152,80), "S19276C9.s19276c9f3");
    check_field_offset(lv, s19276c9f4, ABISELECT(160,84), "S19276C9.s19276c9f4");
    test_class_info(&lv, &cd_S19276C9);
    dp->~S19276C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19276C9(Test_S19276C9, "S19276C9", ABISELECT(904,532));

#else // __cplusplus

extern void _ZN8S19276C9C1Ev();
extern void _ZN8S19276C9D1Ev();
Name_Map name_map_S19276C9[] = {
  NSPAIR(_ZN8S19276C9C1Ev),
  NSPAIR(_ZN8S19276C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19276C9[];
extern void _ZN8S19276C92v7Ev();
extern void _ZN8S19276C92v8Ev();
static  VTBL_ENTRY vtc_S19276C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C9[0]),
  (VTBL_ENTRY)&_ZN8S19276C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19276C92v8Ev,
};
extern VTBL_ENTRY _ZTI8S19276C9[];
extern  VTBL_ENTRY _ZTV8S19276C9[];
Class_Descriptor cd_S19276C9 = {  "S19276C9", // class name
  0,0,//no base classes
  &(vtc_S19276C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(904,532), // object size
  NSPAIRA(_ZTI8S19276C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19276C9),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19276C12  {
  int s19276c12f0;
  virtual  ~S19276C12(); // _ZN9S19276C12D1Ev
  virtual void  v9(); // _ZN9S19276C122v9Ev
  S19276C12(); // tgen
};
//SIG(-1 S19276C12) C1{ vd v1 Fi}


 S19276C12 ::~S19276C12(){ note_dtor("S19276C12", this);}
void  S19276C12 ::v9(){vfunc_called(this, "_ZN9S19276C122v9Ev");}
S19276C12 ::S19276C12(){ note_ctor("S19276C12", this);} // tgen

static void Test_S19276C12()
{
  extern Class_Descriptor cd_S19276C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19276C12, buf);
    S19276C12 *dp, &lv = *(dp=new (buf) S19276C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19276C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19276C12)");
    check_field_offset(lv, s19276c12f0, ABISELECT(8,4), "S19276C12.s19276c12f0");
    test_class_info(&lv, &cd_S19276C12);
    dp->~S19276C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19276C12(Test_S19276C12, "S19276C12", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19276C12C1Ev();
extern void _ZN9S19276C12D1Ev();
Name_Map name_map_S19276C12[] = {
  NSPAIR(_ZN9S19276C12C1Ev),
  NSPAIR(_ZN9S19276C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19276C12[];
extern void _ZN9S19276C12D1Ev();
extern void _ZN9S19276C12D0Ev();
extern void _ZN9S19276C122v9Ev();
static  VTBL_ENTRY vtc_S19276C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C12[0]),
  (VTBL_ENTRY)&_ZN9S19276C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19276C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19276C122v9Ev,
};
extern VTBL_ENTRY _ZTI9S19276C12[];
extern  VTBL_ENTRY _ZTV9S19276C12[];
Class_Descriptor cd_S19276C12 = {  "S19276C12", // class name
  0,0,//no base classes
  &(vtc_S19276C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19276C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19276C12),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19276C14  : virtual S19276C4 , S19276C10 {
  void *s19276c14f0;
  ::S19276C3 s19276c14f1;
  __tsi64 s19276c14f2[8];
  ::S19276C4 s19276c14f3;
  void *s19276c14f4;
  virtual void  v11(); // _ZN9S19276C143v11Ev
  ~S19276C14(); // tgen
  S19276C14(); // tgen
};
//SIG(-1 S19276C14) C1{ VBC2{ VBC3{ v2} v3 v4 v5 Fp[3] FC4{} Fp} BC5{ VBC6{ BC3 Fc[5] FC2[2] Fi Fp[7] FC2 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v6 Fp FL Fp[6] FC3 FC7{ BC3 v7 Fc FL Fi[3] FC6} Fp Fi} v1 Fp FC3 FL[8] FC2 Fp}


void  S19276C14 ::v11(){vfunc_called(this, "_ZN9S19276C143v11Ev");}
S19276C14 ::~S19276C14(){ note_dtor("S19276C14", this);} // tgen
S19276C14 ::S19276C14(){ note_ctor("S19276C14", this);} // tgen

static void Test_S19276C14()
{
  extern Class_Descriptor cd_S19276C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(117,144)];
    init_test(&cd_S19276C14, buf);
    S19276C14 *dp, &lv = *(dp=new (buf) S19276C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(928,572), "sizeof(S19276C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19276C14)");
    check_base_class_offset(lv, (S19276C3*)(S19276C4*), ABISELECT(576,364), "S19276C14");
    check_base_class_offset(lv, (S19276C4*), ABISELECT(576,364), "S19276C14");
    check_base_class_offset(lv, (S19276C3*)(S19276C2*), ABISELECT(624,388), "S19276C14");
    check_base_class_offset(lv, (S19276C2*)(S19276C10*), ABISELECT(624,388), "S19276C14");
    check_base_class_offset(lv, (S19276C10*), 0, "S19276C14");
    check_field_offset(lv, s19276c14f0, ABISELECT(440,264), "S19276C14.s19276c14f0");
    check_field_offset(lv, s19276c14f1, ABISELECT(448,268), "S19276C14.s19276c14f1");
    check_field_offset(lv, s19276c14f2, ABISELECT(456,272), "S19276C14.s19276c14f2");
    check_field_offset(lv, s19276c14f3, ABISELECT(520,336), "S19276C14.s19276c14f3");
    check_field_offset(lv, s19276c14f4, ABISELECT(568,360), "S19276C14.s19276c14f4");
    test_class_info(&lv, &cd_S19276C14);
    dp->~S19276C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19276C14(Test_S19276C14, "S19276C14", ABISELECT(928,572));

#else // __cplusplus

extern void _ZN9S19276C14C1Ev();
extern void _ZN9S19276C14D1Ev();
Name_Map name_map_S19276C14[] = {
  NSPAIR(_ZN9S19276C14C1Ev),
  NSPAIR(_ZN9S19276C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C2;
extern VTBL_ENTRY _ZTI8S19276C2[];
extern  VTBL_ENTRY _ZTV8S19276C2[];
extern Class_Descriptor cd_S19276C10;
extern VTBL_ENTRY _ZTI9S19276C10[];
extern  VTBL_ENTRY _ZTV9S19276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C10[];
static Base_Class bases_S19276C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19276C3,    ABISELECT(576,364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19276C4,    ABISELECT(576,364), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19276C3,    ABISELECT(624,388), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19276C2,    ABISELECT(624,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19276C14[];
extern void _ZN9S19276C103v10Ev();
extern void _ZN9S19276C143v11Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY vtc_S19276C14[] = {
  ABISELECT(576,364),
  ABISELECT(576,364),
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19276C143v11Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-576,-364),
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern VTBL_ENTRY _ZTV9S19276C14[];
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C10__9S19276C14[] = {
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__9S19276C10__9S19276C14[] = {
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__9S19276C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
static  VTT_ENTRY vtt_S19276C14[] = {
  {&(_ZTV9S19276C14[5]),  5,22},
  {&(_tg__ZTV9S19276C10__9S19276C14[3]),  3,4},
  {&(_tg__ZTV8S19276C38S19276C2__9S19276C10__9S19276C14[3]),  3,4},
  {&(_ZTV9S19276C14[14]),  14,22},
  {&(_ZTV9S19276C14[14]),  14,22},
  {&(_ZTV9S19276C14[21]),  21,22},
  {&(_tg__ZTV8S19276C4__9S19276C14[4]),  4,8},
  {&(_tg__ZTV8S19276C4__9S19276C14[4]),  4,8},
};
extern VTBL_ENTRY _ZTI9S19276C14[];
extern  VTBL_ENTRY _ZTV9S19276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C14[];
Class_Descriptor cd_S19276C14 = {  "S19276C14", // class name
  bases_S19276C14, 5,
  &(vtc_S19276C14[0]), // expected_vtbl_contents
  &(vtt_S19276C14[0]), // expected_vtt_contents
  ABISELECT(928,572), // object size
  NSPAIRA(_ZTI9S19276C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19276C14),22, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19276C14),8, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19276C15  : virtual S19276C3 , S19276C7 , virtual S19276C10 {
  void *s19276c15f0[2];
  int s19276c15f1[9];
  ::S19276C11 s19276c15f2;
  ::S19276C3 s19276c15f3[9];
  __tsi64 s19276c15f4;
  long double s19276c15f5;
  void *s19276c15f6;
  __tsi64 s19276c15f7;
  long s19276c15f8;
  __tsi64 s19276c15f9;
  virtual  ~S19276C15(); // _ZN9S19276C15D2Ev
  virtual void  v12(); // _ZN9S19276C153v12Ev
  S19276C15(); // tgen
};
//SIG(-1 S19276C15) C1{ VBC2{ v2} BC3{ BC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp} v6 v7 Fp FC6{ BC7{ BC2 Fc[5] FC4[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC2 VBC4 Fi Fp} Fi Fp Fi[2]} VBC8{ VBC7 v8 Fp FL Fp[6] FC2 FC9{ BC2 v9 Fc FL Fi[3] FC7} Fp Fi} vd v1 Fp[2] Fi[9] FC9 FC2[9] FL FD Fp FL Fl FL}


 S19276C15 ::~S19276C15(){ note_dtor("S19276C15", this);}
void  S19276C15 ::v12(){vfunc_called(this, "_ZN9S19276C153v12Ev");}
S19276C15 ::S19276C15(){ note_ctor("S19276C15", this);} // tgen

static void Test_S19276C15()
{
  extern Class_Descriptor cd_S19276C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(109,262)];
    init_test(&cd_S19276C15, buf);
    S19276C15 *dp, &lv = *(dp=new (buf) S19276C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1728,1044), "sizeof(S19276C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19276C15)");
    /*is_ambiguous_... S19276C15::S19276C3 */ AMB_check_base_class_offset(lv, (S19276C3*), 0, "S19276C15");
    check_base_class_offset(lv, (S19276C3*)(S19276C4*)(S19276C7*), 0, "S19276C15");
    check_base_class_offset(lv, (S19276C4*)(S19276C7*), 0, "S19276C15");
    check_base_class_offset(lv, (S19276C7*), 0, "S19276C15");
    check_base_class_offset(lv, (S19276C3*)(S19276C2*), ABISELECT(1416,860), "S19276C15");
    check_base_class_offset(lv, (S19276C2*)(S19276C10*), ABISELECT(1416,860), "S19276C15");
    check_base_class_offset(lv, (S19276C10*), ABISELECT(976,596), "S19276C15");
    check_field_offset(lv, s19276c15f0, ABISELECT(440,260), "S19276C15.s19276c15f0");
    check_field_offset(lv, s19276c15f1, ABISELECT(456,268), "S19276C15.s19276c15f1");
    check_field_offset(lv, s19276c15f2, ABISELECT(496,304), "S19276C15.s19276c15f2");
    check_field_offset(lv, s19276c15f3, ABISELECT(840,516), "S19276C15.s19276c15f3");
    check_field_offset(lv, s19276c15f4, ABISELECT(912,552), "S19276C15.s19276c15f4");
    check_field_offset(lv, s19276c15f5, ABISELECT(928,560), "S19276C15.s19276c15f5");
    check_field_offset(lv, s19276c15f6, ABISELECT(944,572), "S19276C15.s19276c15f6");
    check_field_offset(lv, s19276c15f7, ABISELECT(952,576), "S19276C15.s19276c15f7");
    check_field_offset(lv, s19276c15f8, ABISELECT(960,584), "S19276C15.s19276c15f8");
    check_field_offset(lv, s19276c15f9, ABISELECT(968,588), "S19276C15.s19276c15f9");
    test_class_info(&lv, &cd_S19276C15);
    dp->~S19276C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19276C15(Test_S19276C15, "S19276C15", ABISELECT(1728,1044));

#else // __cplusplus

extern void _ZN9S19276C15C1Ev();
extern void _ZN9S19276C15D2Ev();
Name_Map name_map_S19276C15[] = {
  NSPAIR(_ZN9S19276C15C1Ev),
  NSPAIR(_ZN9S19276C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C7;
extern VTBL_ENTRY _ZTI8S19276C7[];
extern  VTBL_ENTRY _ZTV8S19276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C7[];
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C2;
extern VTBL_ENTRY _ZTI8S19276C2[];
extern  VTBL_ENTRY _ZTV8S19276C2[];
extern Class_Descriptor cd_S19276C10;
extern VTBL_ENTRY _ZTI9S19276C10[];
extern  VTBL_ENTRY _ZTV9S19276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C10[];
static Base_Class bases_S19276C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19276C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19276C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19276C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19276C3,    ABISELECT(1416,860), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19276C2,    ABISELECT(1416,860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19276C10,    ABISELECT(976,596), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19276C15[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void _ZN9S19276C15D1Ev();
extern void _ZN9S19276C15D0Ev();
extern void _ZN9S19276C153v12Ev();
extern void _ZN9S19276C103v10Ev();
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY vtc_S19276C15[] = {
  ABISELECT(1416,860),
  ABISELECT(976,596),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C15[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  (VTBL_ENTRY)&_ZN9S19276C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19276C15D0Ev,
  (VTBL_ENTRY)&_ZN9S19276C153v12Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI9S19276C15[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  0,
  ABISELECT(-1416,-860),
  (VTBL_ENTRY)&(_ZTI9S19276C15[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern VTBL_ENTRY _ZTV9S19276C15[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C7__9S19276C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C7[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C48S19276C7__9S19276C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C10__9S19276C15[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__9S19276C10__9S19276C15[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
static  VTT_ENTRY vtt_S19276C15[] = {
  {&(_ZTV9S19276C15[6]),  6,24},
  {&(_tg__ZTV8S19276C7__9S19276C15[4]),  4,10},
  {&(_tg__ZTV8S19276C48S19276C7__9S19276C15[4]),  4,8},
  {&(_tg__ZTV8S19276C48S19276C7__9S19276C15[4]),  4,8},
  {&(_tg__ZTV8S19276C7__9S19276C15[4]),  4,10},
  {&(_ZTV9S19276C15[6]),  6,24},
  {&(_ZTV9S19276C15[19]),  19,24},
  {&(_ZTV9S19276C15[23]),  23,24},
  {&(_tg__ZTV9S19276C10__9S19276C15[3]),  3,4},
  {&(_tg__ZTV8S19276C38S19276C2__9S19276C10__9S19276C15[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19276C15[];
extern  VTBL_ENTRY _ZTV9S19276C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C15[];
Class_Descriptor cd_S19276C15 = {  "S19276C15", // class name
  bases_S19276C15, 6,
  &(vtc_S19276C15[0]), // expected_vtbl_contents
  &(vtt_S19276C15[0]), // expected_vtt_contents
  ABISELECT(1728,1044), // object size
  NSPAIRA(_ZTI9S19276C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19276C15),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19276C15),10, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19276C13  : S19276C4 , S19276C14 , virtual S19276C15 , virtual S19276C9 , virtual S19276C11 {
  short s19276c13f0;
  ::S2489C12_nt s19276c13f1;
  char s19276c13f2;
  void *s19276c13f3[2];
  int s19276c13f4[2];
  __tsi64 s19276c13f5;
  virtual void  v14(); // _ZN9S19276C133v14Ev
  ~S19276C13(); // tgen
  S19276C13(); // tgen
};
//SIG(-1 S19276C13) C1{ BC2{ VBC3{ v2} v3 v4 v5 Fp[3] FC4{} Fp} BC5{ VBC2 BC6{ VBC7{ BC3 Fc[5] FC2[2] Fi Fp[7] FC2 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v6 Fp FL Fp[6] FC3 FC8{ BC3 v13 Fc FL Fi[3] FC7} Fp Fi} v7 Fp FC3 FL[8] FC2 Fp} VBC9{ VBC3 BC10{ BC2 v8 v9 Fp FC11{ BC7 VBC3 VBC2 Fi Fp} Fi Fp Fi[2]} VBC6 vd v10 Fp[2] Fi[9] FC8 FC3[9] FL FD Fp FL Fl FL} VBC12{ v11 v12 Fp[2] Fi[2] Fp[15] Fi FC6} VBC8 v1 Fs FC4 Fc Fp[2] Fi[2] FL}


void  S19276C13 ::v14(){vfunc_called(this, "_ZN9S19276C133v14Ev");}
S19276C13 ::~S19276C13(){ note_dtor("S19276C13", this);} // tgen
S19276C13 ::S19276C13(){ note_ctor("S19276C13", this);} // tgen

static void Test_S19276C13()
{
  extern Class_Descriptor cd_S19276C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(232,558)];
    init_test(&cd_S19276C13, buf);
    S19276C13 *dp, &lv = *(dp=new (buf) S19276C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3696,2228), "sizeof(S19276C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19276C13)");
    /*is_ambiguous_... S19276C13::S19276C4 */ AMB_check_base_class_offset(lv, (S19276C3*)(S19276C4*), 0, "S19276C13");
    /*is_ambiguous_... S19276C13::S19276C4 */ AMB_check_base_class_offset(lv, (S19276C3*)(S19276C4*), 0, "S19276C13");
    /*is_ambiguous_... S19276C15::S19276C3 */ AMB_check_base_class_offset(lv, (S19276C3*)(S19276C15*), 0, "S19276C13");
    check_base_class_offset(lv, (S19276C3*)(S19276C4*)(S19276C7*)(S19276C15*), 0, "S19276C13");
    /*is_ambiguous_... S19276C13::S19276C4 */ AMB_check_base_class_offset(lv, (S19276C4*), 0, "S19276C13");
    check_base_class_offset(lv, (S19276C4*)(S19276C14*), ABISELECT(664,416), "S19276C13");
    check_base_class_offset(lv, (S19276C3*)(S19276C2*), ABISELECT(712,440), "S19276C13");
    check_base_class_offset(lv, (S19276C2*)(S19276C10*)(S19276C14*), ABISELECT(712,440), "S19276C13");
    /*is_ambiguous_... S19276C13::S19276C10 */ AMB_check_base_class_offset(lv, (S19276C2*)(S19276C10*), ABISELECT(712,440), "S19276C13");
    check_base_class_offset(lv, (S19276C10*)(S19276C14*), ABISELECT(48,24), "S19276C13");
    check_base_class_offset(lv, (S19276C14*), ABISELECT(48,24), "S19276C13");
    check_base_class_offset(lv, (S19276C4*)(S19276C7*)(S19276C15*), ABISELECT(1024,624), "S19276C13");
    check_base_class_offset(lv, (S19276C7*)(S19276C15*), ABISELECT(1024,624), "S19276C13");
    check_base_class_offset(lv, (S19276C10*)(S19276C15*), ABISELECT(2000,1220), "S19276C13");
    check_base_class_offset(lv, (S19276C15*), ABISELECT(1024,624), "S19276C13");
    check_base_class_offset(lv, (S19276C9*), ABISELECT(2440,1484), "S19276C13");
    check_base_class_offset(lv, (S19276C3*)(S19276C11*), ABISELECT(3344,2016), "S19276C13");
    check_base_class_offset(lv, (S19276C11*), ABISELECT(3344,2016), "S19276C13");
    check_field_offset(lv, s19276c13f0, ABISELECT(624,388), "S19276C13.s19276c13f0");
    check_field_offset(lv, s19276c13f1, ABISELECT(626,390), "S19276C13.s19276c13f1");
    check_field_offset(lv, s19276c13f2, ABISELECT(627,391), "S19276C13.s19276c13f2");
    check_field_offset(lv, s19276c13f3, ABISELECT(632,392), "S19276C13.s19276c13f3");
    check_field_offset(lv, s19276c13f4, ABISELECT(648,400), "S19276C13.s19276c13f4");
    check_field_offset(lv, s19276c13f5, ABISELECT(656,408), "S19276C13.s19276c13f5");
    test_class_info(&lv, &cd_S19276C13);
    dp->~S19276C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19276C13(Test_S19276C13, "S19276C13", ABISELECT(3696,2228));

#else // __cplusplus

extern void _ZN9S19276C13C1Ev();
extern void _ZN9S19276C13D1Ev();
Name_Map name_map_S19276C13[] = {
  NSPAIR(_ZN9S19276C13C1Ev),
  NSPAIR(_ZN9S19276C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C2;
extern VTBL_ENTRY _ZTI8S19276C2[];
extern  VTBL_ENTRY _ZTV8S19276C2[];
extern Class_Descriptor cd_S19276C10;
extern VTBL_ENTRY _ZTI9S19276C10[];
extern  VTBL_ENTRY _ZTV9S19276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C10[];
extern Class_Descriptor cd_S19276C14;
extern VTBL_ENTRY _ZTI9S19276C14[];
extern  VTBL_ENTRY _ZTV9S19276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C14[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C7;
extern VTBL_ENTRY _ZTI8S19276C7[];
extern  VTBL_ENTRY _ZTV8S19276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C7[];
extern Class_Descriptor cd_S19276C10;
extern VTBL_ENTRY _ZTI9S19276C10[];
extern  VTBL_ENTRY _ZTV9S19276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C10[];
extern Class_Descriptor cd_S19276C15;
extern VTBL_ENTRY _ZTI9S19276C15[];
extern  VTBL_ENTRY _ZTV9S19276C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C15[];
extern Class_Descriptor cd_S19276C9;
extern VTBL_ENTRY _ZTI8S19276C9[];
extern  VTBL_ENTRY _ZTV8S19276C9[];
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C11;
extern VTBL_ENTRY _ZTI9S19276C11[];
extern  VTBL_ENTRY _ZTV9S19276C11[];
static Base_Class bases_S19276C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19276C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19276C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19276C4,    ABISELECT(664,416), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19276C3,    ABISELECT(712,440), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19276C2,    ABISELECT(712,440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19276C10,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19276C14,    ABISELECT(48,24), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19276C4,    ABISELECT(1024,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19276C7,    ABISELECT(1024,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19276C10,    ABISELECT(2000,1220), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19276C15,    ABISELECT(1024,624), //bcp->offset
    39, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19276C9,    ABISELECT(2440,1484), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19276C3,    ABISELECT(3344,2016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19276C11,    ABISELECT(3344,2016), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19276C13[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN9S19276C133v14Ev();
extern void _ZN9S19276C13D1Ev();
extern void _ZN9S19276C13D0Ev();
extern void _ZN9S19276C103v10Ev();
extern void _ZN9S19276C143v11Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19276C13D1Ev,_ZTv0_n48_N9S19276C13D1Ev)();
extern void ABISELECT(_ZThn1024_N9S19276C13D1Ev,_ZThn624_N9S19276C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19276C13D0Ev,_ZTv0_n48_N9S19276C13D0Ev)();
extern void ABISELECT(_ZThn1024_N9S19276C13D0Ev,_ZThn624_N9S19276C13D0Ev)() __attribute__((weak));
extern void _ZN9S19276C153v12Ev();
extern void _ZN9S19276C103v10Ev();
extern void _ZN8S19276C92v7Ev();
extern void _ZN8S19276C92v8Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN9S19276C113v13Ev();
static  VTBL_ENTRY vtc_S19276C13[] = {
  ABISELECT(3344,2016),
  ABISELECT(2440,1484),
  ABISELECT(2000,1220),
  ABISELECT(1024,624),
  ABISELECT(712,440),
  ABISELECT(664,416),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19276C133v14Ev,
  (VTBL_ENTRY)&_ZN9S19276C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19276C13D0Ev,
  ABISELECT(-48,-24),
  ABISELECT(616,392),
  ABISELECT(664,416),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19276C143v11Ev,
  0,
  0,
  0,
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  0,
  ABISELECT(-712,-440),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  0,
  ABISELECT(-1024,-624),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-184),
  ABISELECT(976,596),
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19276C13D1Ev,_ZTv0_n48_N9S19276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19276C13D0Ev,_ZTv0_n48_N9S19276C13D0Ev),
  (VTBL_ENTRY)&_ZN9S19276C153v12Ev,
  0,
  ABISELECT(-1288,-780),
  ABISELECT(-2000,-1220),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  0,
  0,
  ABISELECT(-2440,-1484),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19276C92v8Ev,
  0,
  0,
  ABISELECT(-3344,-2016),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19276C113v13Ev,
};
extern VTBL_ENTRY _ZTV9S19276C13[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__A__9S19276C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN9S19276C103v10Ev();
extern void _ZN9S19276C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C14__9S19276C13[] = {
  ABISELECT(-48,-24),
  ABISELECT(616,392),
  ABISELECT(664,416),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19276C143v11Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C109S19276C14__9S19276C13[] = {
  ABISELECT(664,416),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__9S19276C109S19276C14__9S19276C13[] = {
  0,
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__9S19276C14__9S19276C13[] = {
  0,
  0,
  0,
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  ABISELECT(-616,-392),
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__9S19276C14__9S19276C13[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__A1__9S19276C14__9S19276C13[] = {
  0,
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__A1__9S19276C13[] = {
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C4__A1__9S19276C13[] = {
  0,
  ABISELECT(664,416),
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void _ZN9S19276C15D1Ev();
extern void _ZN9S19276C15D0Ev();
extern void _ZN9S19276C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C15__9S19276C13[] = {
  ABISELECT(-312,-184),
  ABISELECT(976,596),
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C15[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  (VTBL_ENTRY)&_ZN9S19276C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19276C15D0Ev,
  (VTBL_ENTRY)&_ZN9S19276C153v12Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C79S19276C15__9S19276C13[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C7[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C48S19276C79S19276C15__A2__9S19276C13[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C48S19276C79S19276C15__A2__9S19276C13[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C79S19276C15__9S19276C13[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S19276C7[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__9S19276C15__9S19276C13[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI9S19276C15[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C10__9S19276C15__9S19276C13[] = {
  0,
  ABISELECT(-1288,-780),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI9S19276C15[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__A1__9S19276C15__9S19276C13[] = {
  0,
  ABISELECT(312,184),
  (VTBL_ENTRY)&(_ZTI9S19276C15[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C10__A1__9S19276C13[] = {
  ABISELECT(-1288,-780),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__9S19276C10__A1__9S19276C13[] = {
  0,
  ABISELECT(1288,780),
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
static  VTT_ENTRY vtt_S19276C13[] = {
  {&(_ZTV9S19276C13[10]),  10,78},
  {&(_tg__ZTV8S19276C4__A__9S19276C13[4]),  4,8},
  {&(_tg__ZTV8S19276C4__A__9S19276C13[4]),  4,8},
  {&(_tg__ZTV9S19276C14__9S19276C13[5]),  5,7},
  {&(_tg__ZTV9S19276C109S19276C14__9S19276C13[3]),  3,4},
  {&(_tg__ZTV8S19276C38S19276C2__9S19276C109S19276C14__9S19276C13[3]),  3,4},
  {&(_tg__ZTV8S19276C4__9S19276C14__9S19276C13[7]),  7,11},
  {&(_tg__ZTV8S19276C3__9S19276C14__9S19276C13[3]),  3,4},
  {&(_tg__ZTV8S19276C38S19276C2__A1__9S19276C14__9S19276C13[3]),  3,4},
  {&(_ZTV9S19276C13[10]),  10,78},
  {&(_ZTV9S19276C13[22]),  22,78},
  {&(_ZTV9S19276C13[31]),  31,78},
  {&(_ZTV9S19276C13[38]),  38,78},
  {&(_ZTV9S19276C13[52]),  52,78},
  {&(_ZTV9S19276C13[65]),  65,78},
  {&(_ZTV9S19276C13[70]),  70,78},
  {&(_ZTV9S19276C13[76]),  76,78},
  {&(_tg__ZTV8S19276C4__A1__9S19276C13[4]),  4,8},
  {&(_tg__ZTV8S19276C3__8S19276C4__A1__9S19276C13[3]),  3,4},
  {&(_tg__ZTV9S19276C15__9S19276C13[6]),  6,15},
  {&(_tg__ZTV8S19276C79S19276C15__9S19276C13[4]),  4,10},
  {&(_tg__ZTV8S19276C48S19276C79S19276C15__A2__9S19276C13[4]),  4,8},
  {&(_tg__ZTV8S19276C3__8S19276C48S19276C79S19276C15__A2__9S19276C13[3]),  3,4},
  {&(_tg__ZTV8S19276C3__8S19276C79S19276C15__9S19276C13[3]),  3,4},
  {&(_tg__ZTV8S19276C3__9S19276C15__9S19276C13[3]),  3,4},
  {&(_tg__ZTV9S19276C10__9S19276C15__9S19276C13[4]),  4,5},
  {&(_tg__ZTV8S19276C38S19276C2__A1__9S19276C15__9S19276C13[3]),  3,4},
  {&(_tg__ZTV9S19276C10__A1__9S19276C13[3]),  3,4},
  {&(_tg__ZTV8S19276C38S19276C2__9S19276C10__A1__9S19276C13[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19276C13[];
extern  VTBL_ENTRY _ZTV9S19276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C13[];
static VTBL_ENTRY alt_thunk_names49[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19276C13D0Ev,_ZTv0_n48_N9S19276C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N9S19276C13D0Ev,_ZThn624_N9S19276C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19276C13D1Ev,_ZTv0_n48_N9S19276C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N9S19276C13D1Ev,_ZThn624_N9S19276C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19276C13 = {  "S19276C13", // class name
  bases_S19276C13, 14,
  &(vtc_S19276C13[0]), // expected_vtbl_contents
  &(vtt_S19276C13[0]), // expected_vtt_contents
  ABISELECT(3696,2228), // object size
  NSPAIRA(_ZTI9S19276C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19276C13),78, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19276C13),29, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names49,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19276C6  : virtual S19276C7 , virtual S19276C9 , virtual S19276C12 , virtual S19276C13 {
  __tsi64 s19276c6f0;
  int s19276c6f1;
  char s19276c6f2;
  void *s19276c6f3;
  __tsi64 s19276c6f4;
  long double s19276c6f5;
  char s19276c6f6;
  short s19276c6f7;
  virtual void  v15(); // _ZN8S19276C63v15Ev
  virtual void  v16(); // _ZN8S19276C63v16Ev
  ~S19276C6(); // tgen
  S19276C6(); // tgen
};
//SIG(-1 S19276C6) C1{ VBC2{ BC3{ VBC4{ v3} v4 v5 v6 Fp[3] FC5{} Fp} v7 v8 Fp FC6{ BC7{ BC4 Fc[5] FC3[2] Fi Fp[7] FC3 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC4 VBC3 Fi Fp} Fi Fp Fi[2]} VBC8{ v9 v10 Fp[2] Fi[2] Fp[15] Fi FC9{ VBC7 v12 Fp FL Fp[6] FC4 FC10{ BC4 v15 Fc FL Fi[3] FC7} Fp Fi}} VBC11{ vd v11 Fi} VBC12{ BC3 BC13{ VBC3 BC9 v13 Fp FC4 FL[8] FC3 Fp} VBC14{ VBC4 BC2 VBC9 vd v14 Fp[2] Fi[9] FC10 FC4[9] FL FD Fp FL Fl FL} VBC8 VBC10 v16 Fs FC5 Fc Fp[2] Fi[2] FL} v1 v2 FL Fi Fc Fp FL FD Fc Fs}


void  S19276C6 ::v15(){vfunc_called(this, "_ZN8S19276C63v15Ev");}
void  S19276C6 ::v16(){vfunc_called(this, "_ZN8S19276C63v16Ev");}
S19276C6 ::~S19276C6(){ note_dtor("S19276C6", this);} // tgen
S19276C6 ::S19276C6(){ note_ctor("S19276C6", this);} // tgen

static void Test_S19276C6()
{
  extern Class_Descriptor cd_S19276C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(264,637)];
    init_test(&cd_S19276C6, buf);
    S19276C6 *dp, &lv = *(dp=new (buf) S19276C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4208,2544), "sizeof(S19276C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19276C6)");
    /*is_ambiguous_... S19276C6::S19276C7 */ AMB_check_base_class_offset(lv, (S19276C3*)(S19276C4*)(S19276C7*), 0, "S19276C6");
    /*is_ambiguous_... S19276C13::S19276C4 */ AMB_check_base_class_offset(lv, (S19276C3*)(S19276C4*)(S19276C13*), 0, "S19276C6");
    /*is_ambiguous_... S19276C6::S19276C4 */ AMB_check_base_class_offset(lv, (S19276C3*)(S19276C4*), 0, "S19276C6");
    /*is_ambiguous_... S19276C15::S19276C3 */ AMB_check_base_class_offset(lv, (S19276C3*)(S19276C15*), 0, "S19276C6");
    check_base_class_offset(lv, (S19276C3*)(S19276C4*)(S19276C7*)(S19276C15*), 0, "S19276C6");
    /*is_ambiguous_... S19276C6::S19276C7 */ AMB_check_base_class_offset(lv, (S19276C4*)(S19276C7*), ABISELECT(72,48), "S19276C6");
    /*is_ambiguous_... S19276C6::S19276C7 */ AMB_check_base_class_offset(lv, (S19276C7*), ABISELECT(72,48), "S19276C6");
    check_base_class_offset(lv, (S19276C9*), ABISELECT(512,308), "S19276C6");
    check_base_class_offset(lv, (S19276C9*)(S19276C13*), ABISELECT(512,308), "S19276C6");
    check_base_class_offset(lv, (S19276C12*), ABISELECT(1416,840), "S19276C6");
    /*is_ambiguous_... S19276C13::S19276C4 */ AMB_check_base_class_offset(lv, (S19276C4*)(S19276C13*), ABISELECT(1432,848), "S19276C6");
    check_base_class_offset(lv, (S19276C4*)(S19276C14*)(S19276C13*), ABISELECT(2096,1264), "S19276C6");
    check_base_class_offset(lv, (S19276C3*)(S19276C2*), ABISELECT(2144,1288), "S19276C6");
    check_base_class_offset(lv, (S19276C2*)(S19276C10*)(S19276C14*)(S19276C13*), ABISELECT(2144,1288), "S19276C6");
    /*is_ambiguous_... S19276C6::S19276C10 */ AMB_check_base_class_offset(lv, (S19276C2*)(S19276C10*), ABISELECT(2144,1288), "S19276C6");
    check_base_class_offset(lv, (S19276C10*)(S19276C14*)(S19276C13*), ABISELECT(1480,872), "S19276C6");
    check_base_class_offset(lv, (S19276C14*)(S19276C13*), ABISELECT(1480,872), "S19276C6");
    check_base_class_offset(lv, (S19276C4*)(S19276C7*)(S19276C15*), ABISELECT(2448,1472), "S19276C6");
    check_base_class_offset(lv, (S19276C7*)(S19276C15*), ABISELECT(2448,1472), "S19276C6");
    check_base_class_offset(lv, (S19276C10*)(S19276C15*), ABISELECT(3424,2068), "S19276C6");
    check_base_class_offset(lv, (S19276C15*)(S19276C13*), ABISELECT(2448,1472), "S19276C6");
    check_base_class_offset(lv, (S19276C3*)(S19276C11*), ABISELECT(3864,2332), "S19276C6");
    check_base_class_offset(lv, (S19276C11*)(S19276C13*), ABISELECT(3864,2332), "S19276C6");
    check_base_class_offset(lv, (S19276C13*), ABISELECT(1432,848), "S19276C6");
    check_field_offset(lv, s19276c6f0, ABISELECT(8,4), "S19276C6.s19276c6f0");
    check_field_offset(lv, s19276c6f1, ABISELECT(16,12), "S19276C6.s19276c6f1");
    check_field_offset(lv, s19276c6f2, ABISELECT(20,16), "S19276C6.s19276c6f2");
    check_field_offset(lv, s19276c6f3, ABISELECT(24,20), "S19276C6.s19276c6f3");
    check_field_offset(lv, s19276c6f4, ABISELECT(32,24), "S19276C6.s19276c6f4");
    check_field_offset(lv, s19276c6f5, ABISELECT(48,32), "S19276C6.s19276c6f5");
    check_field_offset(lv, s19276c6f6, ABISELECT(64,44), "S19276C6.s19276c6f6");
    check_field_offset(lv, s19276c6f7, ABISELECT(66,46), "S19276C6.s19276c6f7");
    test_class_info(&lv, &cd_S19276C6);
    dp->~S19276C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19276C6(Test_S19276C6, "S19276C6", ABISELECT(4208,2544));

#else // __cplusplus

extern void _ZN8S19276C6C1Ev();
extern void _ZN8S19276C6D1Ev();
Name_Map name_map_S19276C6[] = {
  NSPAIR(_ZN8S19276C6C1Ev),
  NSPAIR(_ZN8S19276C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C7;
extern VTBL_ENTRY _ZTI8S19276C7[];
extern  VTBL_ENTRY _ZTV8S19276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C7[];
extern Class_Descriptor cd_S19276C9;
extern VTBL_ENTRY _ZTI8S19276C9[];
extern  VTBL_ENTRY _ZTV8S19276C9[];
extern Class_Descriptor cd_S19276C12;
extern VTBL_ENTRY _ZTI9S19276C12[];
extern  VTBL_ENTRY _ZTV9S19276C12[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C2;
extern VTBL_ENTRY _ZTI8S19276C2[];
extern  VTBL_ENTRY _ZTV8S19276C2[];
extern Class_Descriptor cd_S19276C10;
extern VTBL_ENTRY _ZTI9S19276C10[];
extern  VTBL_ENTRY _ZTV9S19276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C10[];
extern Class_Descriptor cd_S19276C14;
extern VTBL_ENTRY _ZTI9S19276C14[];
extern  VTBL_ENTRY _ZTV9S19276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C14[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C7;
extern VTBL_ENTRY _ZTI8S19276C7[];
extern  VTBL_ENTRY _ZTV8S19276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C7[];
extern Class_Descriptor cd_S19276C10;
extern VTBL_ENTRY _ZTI9S19276C10[];
extern  VTBL_ENTRY _ZTV9S19276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C10[];
extern Class_Descriptor cd_S19276C15;
extern VTBL_ENTRY _ZTI9S19276C15[];
extern  VTBL_ENTRY _ZTV9S19276C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C15[];
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C11;
extern VTBL_ENTRY _ZTI9S19276C11[];
extern  VTBL_ENTRY _ZTV9S19276C11[];
extern Class_Descriptor cd_S19276C13;
extern VTBL_ENTRY _ZTI9S19276C13[];
extern  VTBL_ENTRY _ZTV9S19276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C13[];
static Base_Class bases_S19276C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19276C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19276C4,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19276C7,    ABISELECT(72,48), //bcp->offset
    18, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19276C9,    ABISELECT(512,308), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19276C12,    ABISELECT(1416,840), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19276C4,    ABISELECT(1432,848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19276C4,    ABISELECT(2096,1264), //bcp->offset
    77, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19276C3,    ABISELECT(2144,1288), //bcp->offset
    88, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19276C2,    ABISELECT(2144,1288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19276C10,    ABISELECT(1480,872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19276C14,    ABISELECT(1480,872), //bcp->offset
    70, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19276C4,    ABISELECT(2448,1472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19276C7,    ABISELECT(2448,1472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19276C10,    ABISELECT(3424,2068), //bcp->offset
    114, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19276C15,    ABISELECT(2448,1472), //bcp->offset
    92, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19276C3,    ABISELECT(3864,2332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19276C11,    ABISELECT(3864,2332), //bcp->offset
    119, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19276C13,    ABISELECT(1432,848), //bcp->offset
    46, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19276C6[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C63v15Ev();
extern void _ZN8S19276C63v16Ev();
extern void _ZN8S19276C6D1Ev();
extern void _ZN8S19276C6D0Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void _ZN8S19276C92v7Ev();
extern void _ZN8S19276C92v8Ev();
extern void ABISELECT(_ZTv0_n24_N8S19276C6D1Ev,_ZTv0_n12_N8S19276C6D1Ev)();
extern void ABISELECT(_ZThn1416_N8S19276C6D1Ev,_ZThn840_N8S19276C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19276C6D0Ev,_ZTv0_n12_N8S19276C6D0Ev)();
extern void ABISELECT(_ZThn1416_N8S19276C6D0Ev,_ZThn840_N8S19276C6D0Ev)() __attribute__((weak));
extern void _ZN9S19276C122v9Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN9S19276C133v14Ev();
extern void ABISELECT(_ZTv0_n120_N8S19276C6D1Ev,_ZTv0_n60_N8S19276C6D1Ev)();
extern void ABISELECT(_ZThn1432_N8S19276C6D1Ev,_ZThn848_N8S19276C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S19276C6D0Ev,_ZTv0_n60_N8S19276C6D0Ev)();
extern void ABISELECT(_ZThn1432_N8S19276C6D0Ev,_ZThn848_N8S19276C6D0Ev)() __attribute__((weak));
extern void _ZN9S19276C103v10Ev();
extern void _ZN9S19276C143v11Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N8S19276C6D1Ev,_ZTv0_n48_N8S19276C6D1Ev)();
extern void ABISELECT(_ZThn2448_N8S19276C6D1Ev,_ZThn1472_N8S19276C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19276C6D0Ev,_ZTv0_n48_N8S19276C6D0Ev)();
extern void ABISELECT(_ZThn2448_N8S19276C6D0Ev,_ZThn1472_N8S19276C6D0Ev)() __attribute__((weak));
extern void _ZN9S19276C153v12Ev();
extern void _ZN9S19276C103v10Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN9S19276C113v13Ev();
static  VTBL_ENTRY vtc_S19276C6[] = {
  ABISELECT(3864,2332),
  ABISELECT(3424,2068),
  ABISELECT(2448,1472),
  ABISELECT(2144,1288),
  ABISELECT(2096,1264),
  ABISELECT(1432,848),
  ABISELECT(1416,840),
  ABISELECT(512,308),
  0,
  ABISELECT(72,48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19276C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19276C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19276C6D0Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  0,
  0,
  ABISELECT(-512,-308),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN8S19276C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19276C92v8Ev,
  0,
  ABISELECT(-1416,-840),
  ABISELECT(-1416,-840),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19276C6D1Ev,_ZTv0_n12_N8S19276C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19276C6D0Ev,_ZTv0_n12_N8S19276C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19276C122v9Ev,
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-1432,-848),
  0,
  0,
  0,
  0,
  ABISELECT(2432,1484),
  ABISELECT(-920,-540),
  ABISELECT(1992,1220),
  ABISELECT(1016,624),
  ABISELECT(712,440),
  ABISELECT(664,416),
  ABISELECT(-1432,-848),
  ABISELECT(-1432,-848),
  ABISELECT(-1432,-848),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19276C133v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19276C6D1Ev,_ZTv0_n60_N8S19276C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19276C6D0Ev,_ZTv0_n60_N8S19276C6D0Ev),
  ABISELECT(-1480,-872),
  ABISELECT(616,392),
  ABISELECT(664,416),
  ABISELECT(-1480,-872),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19276C143v11Ev,
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  0,
  ABISELECT(-2144,-1288),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  0,
  ABISELECT(-2448,-1472),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-184),
  ABISELECT(976,596),
  ABISELECT(-2448,-1472),
  ABISELECT(-2448,-1472),
  ABISELECT(-2448,-1472),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19276C6D1Ev,_ZTv0_n48_N8S19276C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19276C6D0Ev,_ZTv0_n48_N8S19276C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19276C153v12Ev,
  0,
  ABISELECT(-1280,-780),
  ABISELECT(-3424,-2068),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  0,
  0,
  ABISELECT(-3864,-2332),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19276C113v13Ev,
};
extern VTBL_ENTRY _ZTV8S19276C6[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C7__8S19276C6[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C7[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C48S19276C7__8S19276C6[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C48S19276C7__8S19276C6[] = {
  0,
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C7__8S19276C6[] = {
  0,
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S19276C7[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN9S19276C133v14Ev();
extern void _ZN9S19276C13D1Ev();
extern void _ZN9S19276C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C13__8S19276C6[] = {
  ABISELECT(2432,1484),
  ABISELECT(-920,-540),
  ABISELECT(1992,1220),
  ABISELECT(1016,624),
  ABISELECT(712,440),
  ABISELECT(664,416),
  ABISELECT(-1432,-848),
  ABISELECT(-1432,-848),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19276C133v14Ev,
  (VTBL_ENTRY)&_ZN9S19276C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19276C13D0Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C49S19276C13__A1__8S19276C6[] = {
  ABISELECT(-1432,-848),
  ABISELECT(-1432,-848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C49S19276C13__A1__8S19276C6[] = {
  0,
  ABISELECT(1432,848),
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN9S19276C103v10Ev();
extern void _ZN9S19276C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C149S19276C13__8S19276C6[] = {
  ABISELECT(-1480,-872),
  ABISELECT(616,392),
  ABISELECT(664,416),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19276C143v11Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C109S19276C149S19276C13__8S19276C6[] = {
  ABISELECT(664,416),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__9S19276C109S19276C149S19276C13__8S19276C6[] = {
  0,
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__9S19276C149S19276C13__8S19276C6[] = {
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-616,-392),
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__9S19276C149S19276C13__8S19276C6[] = {
  0,
  ABISELECT(1480,872),
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__A1__9S19276C149S19276C13__8S19276C6[] = {
  0,
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__9S19276C13__8S19276C6[] = {
  0,
  ABISELECT(1432,848),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN9S19276C103v10Ev();
extern void _ZN9S19276C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C14__9S19276C13__8S19276C6[] = {
  ABISELECT(-1480,-872),
  ABISELECT(616,392),
  ABISELECT(664,416),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19276C143v11Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__A1__9S19276C13__8S19276C6[] = {
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__A1__9S19276C13__8S19276C6[] = {
  0,
  ABISELECT(-712,-440),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19276C13D1Ev,_ZTv0_n48_N9S19276C13D1Ev)();
extern void ABISELECT(_ZThn1016_N9S19276C13D1Ev,_ZThn624_N9S19276C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19276C13D0Ev,_ZTv0_n48_N9S19276C13D0Ev)();
extern void ABISELECT(_ZThn1016_N9S19276C13D0Ev,_ZThn624_N9S19276C13D0Ev)() __attribute__((weak));
extern void _ZN9S19276C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C15__9S19276C13__8S19276C6[] = {
  0,
  ABISELECT(-1016,-624),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-184),
  ABISELECT(976,596),
  ABISELECT(-2448,-1472),
  ABISELECT(-2448,-1472),
  ABISELECT(-1016,-624),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19276C13D1Ev,_ZTv0_n48_N9S19276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19276C13D0Ev,_ZTv0_n48_N9S19276C13D0Ev),
  (VTBL_ENTRY)&_ZN9S19276C153v12Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C10__A1__9S19276C13__8S19276C6[] = {
  0,
  ABISELECT(-1280,-780),
  ABISELECT(-1992,-1220),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C92v7Ev();
extern void _ZN8S19276C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C9__9S19276C13__8S19276C6[] = {
  0,
  0,
  ABISELECT(920,540),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19276C92v8Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN9S19276C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C11__9S19276C13__8S19276C6[] = {
  0,
  0,
  ABISELECT(-2432,-1484),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19276C113v13Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__A2__8S19276C6[] = {
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C4__A2__8S19276C6[] = {
  0,
  ABISELECT(2096,1264),
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void _ZN9S19276C15D1Ev();
extern void _ZN9S19276C15D0Ev();
extern void _ZN9S19276C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C15__8S19276C6[] = {
  ABISELECT(-304,-184),
  ABISELECT(976,596),
  ABISELECT(-2448,-1472),
  ABISELECT(-2448,-1472),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C15[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  (VTBL_ENTRY)&_ZN9S19276C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19276C15D0Ev,
  (VTBL_ENTRY)&_ZN9S19276C153v12Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C79S19276C15__A1__8S19276C6[] = {
  ABISELECT(-2448,-1472),
  ABISELECT(-2448,-1472),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C7[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C48S19276C79S19276C15__A3__8S19276C6[] = {
  ABISELECT(-2448,-1472),
  ABISELECT(-2448,-1472),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C48S19276C79S19276C15__A3__8S19276C6[] = {
  0,
  ABISELECT(2448,1472),
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C79S19276C15__A1__8S19276C6[] = {
  0,
  ABISELECT(2448,1472),
  (VTBL_ENTRY)&(_ZTI8S19276C7[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__9S19276C15__8S19276C6[] = {
  0,
  ABISELECT(2448,1472),
  (VTBL_ENTRY)&(_ZTI9S19276C15[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C10__9S19276C15__8S19276C6[] = {
  0,
  ABISELECT(-1280,-780),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI9S19276C15[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__A1__9S19276C15__8S19276C6[] = {
  0,
  ABISELECT(304,184),
  (VTBL_ENTRY)&(_ZTI9S19276C15[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C10__A1__8S19276C6[] = {
  ABISELECT(-1280,-780),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__9S19276C10__A1__8S19276C6[] = {
  0,
  ABISELECT(1280,780),
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
static  VTT_ENTRY vtt_S19276C6[] = {
  {&(_ZTV8S19276C6[13]),  13,125},
  {&(_ZTV8S19276C6[27]),  27,125},
  {&(_ZTV8S19276C6[13]),  13,125},
  {&(_ZTV8S19276C6[37]),  37,125},
  {&(_ZTV8S19276C6[43]),  43,125},
  {&(_ZTV8S19276C6[63]),  63,125},
  {&(_ZTV8S19276C6[75]),  75,125},
  {&(_ZTV8S19276C6[84]),  84,125},
  {&(_ZTV8S19276C6[91]),  91,125},
  {&(_ZTV8S19276C6[105]),  105,125},
  {&(_ZTV8S19276C6[118]),  118,125},
  {&(_ZTV8S19276C6[123]),  123,125},
  {&(_tg__ZTV8S19276C7__8S19276C6[4]),  4,10},
  {&(_tg__ZTV8S19276C48S19276C7__8S19276C6[4]),  4,8},
  {&(_tg__ZTV8S19276C3__8S19276C48S19276C7__8S19276C6[3]),  3,4},
  {&(_tg__ZTV8S19276C3__8S19276C7__8S19276C6[3]),  3,4},
  {&(_tg__ZTV9S19276C13__8S19276C6[10]),  10,17},
  {&(_tg__ZTV8S19276C49S19276C13__A1__8S19276C6[4]),  4,8},
  {&(_tg__ZTV8S19276C3__8S19276C49S19276C13__A1__8S19276C6[3]),  3,4},
  {&(_tg__ZTV9S19276C149S19276C13__8S19276C6[5]),  5,7},
  {&(_tg__ZTV9S19276C109S19276C149S19276C13__8S19276C6[3]),  3,4},
  {&(_tg__ZTV8S19276C38S19276C2__9S19276C109S19276C149S19276C13__8S19276C6[3]),  3,4},
  {&(_tg__ZTV8S19276C4__9S19276C149S19276C13__8S19276C6[7]),  7,11},
  {&(_tg__ZTV8S19276C3__9S19276C149S19276C13__8S19276C6[3]),  3,4},
  {&(_tg__ZTV8S19276C38S19276C2__A1__9S19276C149S19276C13__8S19276C6[3]),  3,4},
  {&(_tg__ZTV8S19276C3__9S19276C13__8S19276C6[3]),  3,4},
  {&(_tg__ZTV9S19276C14__9S19276C13__8S19276C6[5]),  5,7},
  {&(_tg__ZTV8S19276C4__A1__9S19276C13__8S19276C6[7]),  7,11},
  {&(_tg__ZTV8S19276C38S19276C2__A1__9S19276C13__8S19276C6[3]),  3,4},
  {&(_tg__ZTV9S19276C15__9S19276C13__8S19276C6[13]),  13,22},
  {&(_tg__ZTV9S19276C10__A1__9S19276C13__8S19276C6[4]),  4,5},
  {&(_tg__ZTV8S19276C9__9S19276C13__8S19276C6[4]),  4,6},
  {&(_tg__ZTV9S19276C11__9S19276C13__8S19276C6[4]),  4,6},
  {&(_tg__ZTV8S19276C4__A2__8S19276C6[4]),  4,8},
  {&(_tg__ZTV8S19276C3__8S19276C4__A2__8S19276C6[3]),  3,4},
  {&(_tg__ZTV9S19276C15__8S19276C6[6]),  6,15},
  {&(_tg__ZTV8S19276C79S19276C15__A1__8S19276C6[4]),  4,10},
  {&(_tg__ZTV8S19276C48S19276C79S19276C15__A3__8S19276C6[4]),  4,8},
  {&(_tg__ZTV8S19276C3__8S19276C48S19276C79S19276C15__A3__8S19276C6[3]),  3,4},
  {&(_tg__ZTV8S19276C3__8S19276C79S19276C15__A1__8S19276C6[3]),  3,4},
  {&(_tg__ZTV8S19276C3__9S19276C15__8S19276C6[3]),  3,4},
  {&(_tg__ZTV9S19276C10__9S19276C15__8S19276C6[4]),  4,5},
  {&(_tg__ZTV8S19276C38S19276C2__A1__9S19276C15__8S19276C6[3]),  3,4},
  {&(_tg__ZTV9S19276C10__A1__8S19276C6[3]),  3,4},
  {&(_tg__ZTV8S19276C38S19276C2__9S19276C10__A1__8S19276C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19276C6[];
extern  VTBL_ENTRY _ZTV8S19276C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C6[];
static VTBL_ENTRY alt_thunk_names50[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19276C13D0Ev,_ZTv0_n48_N9S19276C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1016_N9S19276C13D0Ev,_ZThn624_N9S19276C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19276C13D1Ev,_ZTv0_n48_N9S19276C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1016_N9S19276C13D1Ev,_ZThn624_N9S19276C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19276C6D0Ev,_ZTv0_n48_N8S19276C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2448_N8S19276C6D0Ev,_ZThn1472_N8S19276C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19276C6D1Ev,_ZTv0_n48_N8S19276C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2448_N8S19276C6D1Ev,_ZThn1472_N8S19276C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19276C6D0Ev,_ZTv0_n60_N8S19276C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S19276C6D0Ev,_ZThn848_N8S19276C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19276C6D1Ev,_ZTv0_n60_N8S19276C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S19276C6D1Ev,_ZThn848_N8S19276C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19276C6D0Ev,_ZTv0_n12_N8S19276C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1416_N8S19276C6D0Ev,_ZThn840_N8S19276C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19276C6D1Ev,_ZTv0_n12_N8S19276C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1416_N8S19276C6D1Ev,_ZThn840_N8S19276C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19276C6 = {  "S19276C6", // class name
  bases_S19276C6, 18,
  &(vtc_S19276C6[0]), // expected_vtbl_contents
  &(vtt_S19276C6[0]), // expected_vtt_contents
  ABISELECT(4208,2544), // object size
  NSPAIRA(_ZTI8S19276C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19276C6),125, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19276C6),45, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names50,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19276C19  : S19276C7 {
  short s19276c19f0:16;
  __tsi64 s19276c19f1;
  char s19276c19f2;
  long s19276c19f3[10];
  int s19276c19f4[10];
  __tsi64 s19276c19f5[4];
  void *s19276c19f6;
  ::S19277C20 s19276c19f7;
  virtual void  v18(); // _ZN9S19276C193v18Ev
  ~S19276C19(); // tgen
  S19276C19(); // tgen
};
//SIG(-1 S19276C19) C1{ BC2{ BC3{ VBC4{ v2} v3 v4 v5 Fp[3] FC5{} Fp} v6 v7 Fp FC6{ BC7{ BC4 Fc[5] FC3[2] Fi Fp[7] FC3 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC4 VBC3 Fi Fp} Fi Fp Fi[2]} v1 Fs:16 FL Fc Fl[10] Fi[10] FL[4] Fp FU8{ m Fp FL FL Fi:27 Fs:16 Fs Fp}}


void  S19276C19 ::v18(){vfunc_called(this, "_ZN9S19276C193v18Ev");}
S19276C19 ::~S19276C19(){ note_dtor("S19276C19", this);} // tgen
S19276C19 ::S19276C19(){ note_ctor("S19276C19", this);} // tgen

static void Test_S19276C19()
{
  extern Class_Descriptor cd_S19276C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(80,101)];
    init_test(&cd_S19276C19, buf);
    S19276C19 *dp, &lv = *(dp=new (buf) S19276C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(632,400), "sizeof(S19276C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19276C19)");
    check_base_class_offset(lv, (S19276C3*)(S19276C4*)(S19276C7*), 0, "S19276C19");
    check_base_class_offset(lv, (S19276C4*)(S19276C7*), 0, "S19276C19");
    check_base_class_offset(lv, (S19276C7*), 0, "S19276C19");
    set_bf_and_test(lv, s19276c19f0, ABISELECT(440,260), 0, 16, 1, "S19276C19");
    set_bf_and_test(lv, s19276c19f0, ABISELECT(440,260), 0, 16, hide_sll(1LL<<15), "S19276C19");
    check_field_offset(lv, s19276c19f1, ABISELECT(448,264), "S19276C19.s19276c19f1");
    check_field_offset(lv, s19276c19f2, ABISELECT(456,272), "S19276C19.s19276c19f2");
    check_field_offset(lv, s19276c19f3, ABISELECT(464,276), "S19276C19.s19276c19f3");
    check_field_offset(lv, s19276c19f4, ABISELECT(544,316), "S19276C19.s19276c19f4");
    check_field_offset(lv, s19276c19f5, ABISELECT(584,356), "S19276C19.s19276c19f5");
    check_field_offset(lv, s19276c19f6, ABISELECT(616,388), "S19276C19.s19276c19f6");
    check_field_offset(lv, s19276c19f7, ABISELECT(624,392), "S19276C19.s19276c19f7");
    test_class_info(&lv, &cd_S19276C19);
    dp->~S19276C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19276C19(Test_S19276C19, "S19276C19", ABISELECT(632,400));

#else // __cplusplus

extern void _ZN9S19276C19C1Ev();
extern void _ZN9S19276C19D1Ev();
Name_Map name_map_S19276C19[] = {
  NSPAIR(_ZN9S19276C19C1Ev),
  NSPAIR(_ZN9S19276C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C7;
extern VTBL_ENTRY _ZTI8S19276C7[];
extern  VTBL_ENTRY _ZTV8S19276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C7[];
static Base_Class bases_S19276C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19276C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19276C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19276C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19276C19[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void _ZN9S19276C193v18Ev();
static  VTBL_ENTRY vtc_S19276C19[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C19[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  (VTBL_ENTRY)&_ZN9S19276C193v18Ev,
};
extern VTBL_ENTRY _ZTV9S19276C19[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C7__9S19276C19[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C7[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C48S19276C7__9S19276C19[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
static  VTT_ENTRY vtt_S19276C19[] = {
  {&(_ZTV9S19276C19[4]),  4,11},
  {&(_tg__ZTV8S19276C7__9S19276C19[4]),  4,10},
  {&(_tg__ZTV8S19276C48S19276C7__9S19276C19[4]),  4,8},
  {&(_tg__ZTV8S19276C48S19276C7__9S19276C19[4]),  4,8},
  {&(_tg__ZTV8S19276C7__9S19276C19[4]),  4,10},
  {&(_ZTV9S19276C19[4]),  4,11},
};
extern VTBL_ENTRY _ZTI9S19276C19[];
extern  VTBL_ENTRY _ZTV9S19276C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C19[];
Class_Descriptor cd_S19276C19 = {  "S19276C19", // class name
  bases_S19276C19, 3,
  &(vtc_S19276C19[0]), // expected_vtbl_contents
  &(vtt_S19276C19[0]), // expected_vtt_contents
  ABISELECT(632,400), // object size
  NSPAIRA(_ZTI9S19276C19),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19276C19),11, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19276C19),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19276C18  : virtual S19276C8 , S19276C19 {
  ::S19276C4 s19276c18f0;
  __tsi64 s19276c18f1:28;
  void *s19276c18f2;
  long s19276c18f3;
  short s19276c18f4;
  virtual void  v17(); // _ZN9S19276C183v17Ev
  ~S19276C18(); // tgen
  S19276C18(); // tgen
};
//SIG(-1 S19276C18) C1{ VBC2{ BC3{ BC4{ v2} Fc[5] FC5{ VBC4 v3 v4 v5 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC4 VBC5 Fi Fp} BC7{ BC8{ BC5 v6 v7 Fp FC2 Fi Fp Fi[2]} v8 Fs:16 FL Fc Fl[10] Fi[10] FL[4] Fp FU9{ m Fp FL FL Fi:27 Fs:16 Fs Fp}} v1 FC5 FL:28 Fp Fl Fs}


void  S19276C18 ::v17(){vfunc_called(this, "_ZN9S19276C183v17Ev");}
S19276C18 ::~S19276C18(){ note_dtor("S19276C18", this);} // tgen
S19276C18 ::S19276C18(){ note_ctor("S19276C18", this);} // tgen

static void Test_S19276C18()
{
  extern Class_Descriptor cd_S19276C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(135,165)];
    init_test(&cd_S19276C18, buf);
    S19276C18 *dp, &lv = *(dp=new (buf) S19276C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1072,656), "sizeof(S19276C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19276C18)");
    check_base_class_offset(lv, (S19276C3*)(S19276C2*)(S19276C8*), ABISELECT(712,440), "S19276C18");
    check_base_class_offset(lv, (S19276C2*)(S19276C8*), ABISELECT(712,440), "S19276C18");
    /*is_ambiguous_... S19276C8::S19276C3 */ AMB_check_base_class_offset(lv, (S19276C3*)(S19276C8*), ABISELECT(1024,632), "S19276C18");
    /*is_ambiguous_... S19276C18::S19276C4 */ AMB_check_base_class_offset(lv, (S19276C3*)(S19276C4*), ABISELECT(1024,632), "S19276C18");
    check_base_class_offset(lv, (S19276C3*)(S19276C4*)(S19276C7*)(S19276C19*), ABISELECT(1024,632), "S19276C18");
    check_base_class_offset(lv, (S19276C4*)(S19276C8*), ABISELECT(1024,632), "S19276C18");
    check_base_class_offset(lv, (S19276C8*), ABISELECT(712,440), "S19276C18");
    check_base_class_offset(lv, (S19276C4*)(S19276C7*)(S19276C19*), 0, "S19276C18");
    check_base_class_offset(lv, (S19276C7*)(S19276C19*), 0, "S19276C18");
    check_base_class_offset(lv, (S19276C19*), 0, "S19276C18");
    check_field_offset(lv, s19276c18f0, ABISELECT(632,400), "S19276C18.s19276c18f0");
    set_bf_and_test(lv, s19276c18f1, ABISELECT(680,424), 0, 28, 1, "S19276C18");
    set_bf_and_test(lv, s19276c18f1, ABISELECT(680,424), 0, 28, hide_sll(1LL<<27), "S19276C18");
    check_field_offset(lv, s19276c18f2, ABISELECT(688,428), "S19276C18.s19276c18f2");
    check_field_offset(lv, s19276c18f3, ABISELECT(696,432), "S19276C18.s19276c18f3");
    check_field_offset(lv, s19276c18f4, ABISELECT(704,436), "S19276C18.s19276c18f4");
    test_class_info(&lv, &cd_S19276C18);
    dp->~S19276C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19276C18(Test_S19276C18, "S19276C18", ABISELECT(1072,656));

#else // __cplusplus

extern void _ZN9S19276C18C1Ev();
extern void _ZN9S19276C18D1Ev();
Name_Map name_map_S19276C18[] = {
  NSPAIR(_ZN9S19276C18C1Ev),
  NSPAIR(_ZN9S19276C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C2;
extern VTBL_ENTRY _ZTI8S19276C2[];
extern  VTBL_ENTRY _ZTV8S19276C2[];
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C8;
extern VTBL_ENTRY _ZTI8S19276C8[];
extern  VTBL_ENTRY _ZTV8S19276C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C8[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C7;
extern VTBL_ENTRY _ZTI8S19276C7[];
extern  VTBL_ENTRY _ZTV8S19276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C7[];
extern Class_Descriptor cd_S19276C19;
extern VTBL_ENTRY _ZTI9S19276C19[];
extern  VTBL_ENTRY _ZTV9S19276C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C19[];
static Base_Class bases_S19276C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19276C3,    ABISELECT(712,440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19276C2,    ABISELECT(712,440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19276C3,    ABISELECT(1024,632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19276C4,    ABISELECT(1024,632), //bcp->offset
    20, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19276C8,    ABISELECT(712,440), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19276C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19276C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19276C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19276C18[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void _ZN9S19276C193v18Ev();
extern void _ZN9S19276C183v17Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY vtc_S19276C18[] = {
  ABISELECT(1024,632),
  ABISELECT(712,440),
  ABISELECT(1024,632),
  ABISELECT(1024,632),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C18[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  (VTBL_ENTRY)&_ZN9S19276C193v18Ev,
  (VTBL_ENTRY)&_ZN9S19276C183v17Ev,
  0,
  ABISELECT(312,192),
  ABISELECT(312,192),
  ABISELECT(-712,-440),
  (VTBL_ENTRY)&(_ZTI9S19276C18[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-632),
  (VTBL_ENTRY)&(_ZTI9S19276C18[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern VTBL_ENTRY _ZTV9S19276C18[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void _ZN9S19276C193v18Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C19__9S19276C18[] = {
  ABISELECT(1024,632),
  ABISELECT(1024,632),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C19[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  (VTBL_ENTRY)&_ZN9S19276C193v18Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C79S19276C19__9S19276C18[] = {
  ABISELECT(1024,632),
  ABISELECT(1024,632),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C7[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C48S19276C79S19276C19__A1__9S19276C18[] = {
  ABISELECT(1024,632),
  ABISELECT(1024,632),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C48S19276C79S19276C19__A1__9S19276C18[] = {
  0,
  ABISELECT(-1024,-632),
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C79S19276C19__9S19276C18[] = {
  0,
  ABISELECT(-1024,-632),
  (VTBL_ENTRY)&(_ZTI8S19276C7[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__9S19276C19__9S19276C18[] = {
  0,
  ABISELECT(-1024,-632),
  (VTBL_ENTRY)&(_ZTI9S19276C19[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C8__9S19276C18[] = {
  ABISELECT(312,192),
  ABISELECT(312,192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C8[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__8S19276C8__9S19276C18[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-192),
  (VTBL_ENTRY)&(_ZTI8S19276C8[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__9S19276C18[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
static  VTT_ENTRY vtt_S19276C18[] = {
  {&(_ZTV9S19276C18[6]),  6,31},
  {&(_tg__ZTV9S19276C19__9S19276C18[4]),  4,11},
  {&(_tg__ZTV8S19276C79S19276C19__9S19276C18[4]),  4,10},
  {&(_tg__ZTV8S19276C48S19276C79S19276C19__A1__9S19276C18[4]),  4,8},
  {&(_tg__ZTV8S19276C3__8S19276C48S19276C79S19276C19__A1__9S19276C18[3]),  3,4},
  {&(_tg__ZTV8S19276C3__8S19276C79S19276C19__9S19276C18[3]),  3,4},
  {&(_tg__ZTV8S19276C3__9S19276C19__9S19276C18[3]),  3,4},
  {&(_ZTV9S19276C18[19]),  19,31},
  {&(_ZTV9S19276C18[27]),  27,31},
  {&(_ZTV9S19276C18[27]),  27,31},
  {&(_tg__ZTV8S19276C8__9S19276C18[4]),  4,5},
  {&(_tg__ZTV8S19276C4__8S19276C8__9S19276C18[7]),  7,11},
  {&(_tg__ZTV8S19276C4__8S19276C8__9S19276C18[7]),  7,11},
  {&(_tg__ZTV8S19276C4__9S19276C18[4]),  4,8},
  {&(_tg__ZTV8S19276C4__9S19276C18[4]),  4,8},
};
extern VTBL_ENTRY _ZTI9S19276C18[];
extern  VTBL_ENTRY _ZTV9S19276C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C18[];
Class_Descriptor cd_S19276C18 = {  "S19276C18", // class name
  bases_S19276C18, 8,
  &(vtc_S19276C18[0]), // expected_vtbl_contents
  &(vtt_S19276C18[0]), // expected_vtt_contents
  ABISELECT(1072,656), // object size
  NSPAIRA(_ZTI9S19276C18),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19276C18),31, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19276C18),15, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19276C16  : S19276C13 , S19277C17 {
  int s19276c16f0;
  long double s19276c16f1[10];
  int s19276c16f2;
  void *s19276c16f3;
  ::S19276C13 s19276c16f4;
  int s19276c16f5[2];
  ::S19276C18 s19276c16f6;
  int s19276c16f7;
  __tsi64 s19276c16f8;
  __tsi64 s19276c16f9;
  int s19276c16f10;
  int s19276c16f11;
  __tsi64 s19276c16f12;
  ~S19276C16(); // tgen
  S19276C16(); // tgen
};
//SIG(-1 S19276C16) C1{ BC2{ BC3{ VBC4{ v1} v2 v3 v4 Fp[3] FC5{} Fp} BC6{ VBC3 BC7{ VBC8{ BC4 Fc[5] FC3[2] Fi Fp[7] FC3 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v5 Fp FL Fp[6] FC4 FC9{ BC4 v12 Fc FL Fi[3] FC8} Fp Fi} v6 Fp FC4 FL[8] FC3 Fp} VBC10{ VBC4 BC11{ BC3 v7 v8 Fp FC12{ BC8 VBC4 VBC3 Fi Fp} Fi Fp Fi[2]} VBC7 vd v9 Fp[2] Fi[9] FC9 FC4[9] FL FD Fp FL Fl FL} VBC13{ v10 v11 Fp[2] Fi[2] Fp[15] Fi FC7} VBC9 v13 Fs FC5 Fc Fp[2] Fi[2] FL} BC14{ m Fl Fc} Fi FD[10] Fi Fp FC2 Fi[2] FC15{ VBC12 BC16{ BC11 v15 Fs:16 FL Fc Fl[10] Fi[10] FL[4] Fp FU17{ m Fp FL FL Fi:27 Fs:16 Fs Fp}} v14 FC3 FL:28 Fp Fl Fs} Fi FL FL Fi Fi FL}


S19276C16 ::~S19276C16(){ note_dtor("S19276C16", this);} // tgen
S19276C16 ::S19276C16(){ note_ctor("S19276C16", this);} // tgen

static void Test_S19276C16()
{
  extern Class_Descriptor cd_S19276C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(545,1325)];
    init_test(&cd_S19276C16, buf);
    S19276C16 *dp, &lv = *(dp=new (buf) S19276C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8704,5296), "sizeof(S19276C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19276C16)");
    /*is_ambiguous_... S19276C13::S19276C4 */ AMB_check_base_class_offset(lv, (S19276C3*)(S19276C4*)(S19276C13*), 0, "S19276C16");
    /*is_ambiguous_... S19276C16::S19276C4 */ AMB_check_base_class_offset(lv, (S19276C3*)(S19276C4*), 0, "S19276C16");
    /*is_ambiguous_... S19276C15::S19276C3 */ AMB_check_base_class_offset(lv, (S19276C3*)(S19276C15*), 0, "S19276C16");
    check_base_class_offset(lv, (S19276C3*)(S19276C4*)(S19276C7*)(S19276C15*), 0, "S19276C16");
    /*is_ambiguous_... S19276C13::S19276C4 */ AMB_check_base_class_offset(lv, (S19276C4*)(S19276C13*), 0, "S19276C16");
    check_base_class_offset(lv, (S19276C4*)(S19276C14*)(S19276C13*), ABISELECT(5680,3484), "S19276C16");
    check_base_class_offset(lv, (S19276C3*)(S19276C2*), ABISELECT(5728,3508), "S19276C16");
    check_base_class_offset(lv, (S19276C2*)(S19276C10*)(S19276C14*)(S19276C13*), ABISELECT(5728,3508), "S19276C16");
    /*is_ambiguous_... S19276C16::S19276C10 */ AMB_check_base_class_offset(lv, (S19276C2*)(S19276C10*), ABISELECT(5728,3508), "S19276C16");
    check_base_class_offset(lv, (S19276C10*)(S19276C14*)(S19276C13*), ABISELECT(48,24), "S19276C16");
    check_base_class_offset(lv, (S19276C14*)(S19276C13*), ABISELECT(48,24), "S19276C16");
    check_base_class_offset(lv, (S19276C4*)(S19276C7*)(S19276C15*), ABISELECT(6032,3692), "S19276C16");
    check_base_class_offset(lv, (S19276C7*)(S19276C15*), ABISELECT(6032,3692), "S19276C16");
    check_base_class_offset(lv, (S19276C10*)(S19276C15*), ABISELECT(7008,4288), "S19276C16");
    check_base_class_offset(lv, (S19276C15*)(S19276C13*), ABISELECT(6032,3692), "S19276C16");
    check_base_class_offset(lv, (S19276C9*)(S19276C13*), ABISELECT(7448,4552), "S19276C16");
    check_base_class_offset(lv, (S19276C3*)(S19276C11*), ABISELECT(8352,5084), "S19276C16");
    check_base_class_offset(lv, (S19276C11*)(S19276C13*), ABISELECT(8352,5084), "S19276C16");
    check_base_class_offset(lv, (S19276C13*), 0, "S19276C16");
    check_base_class_offset(lv, (S19277C17*), ABISELECT(664,416), "S19276C16");
    check_field_offset(lv, s19276c16f0, ABISELECT(680,424), "S19276C16.s19276c16f0");
    check_field_offset(lv, s19276c16f1, ABISELECT(688,428), "S19276C16.s19276c16f1");
    check_field_offset(lv, s19276c16f2, ABISELECT(848,548), "S19276C16.s19276c16f2");
    check_field_offset(lv, s19276c16f3, ABISELECT(856,552), "S19276C16.s19276c16f3");
    check_field_offset(lv, s19276c16f4, ABISELECT(864,556), "S19276C16.s19276c16f4");
    check_field_offset(lv, s19276c16f5, ABISELECT(4560,2784), "S19276C16.s19276c16f5");
    check_field_offset(lv, s19276c16f6, ABISELECT(4568,2792), "S19276C16.s19276c16f6");
    check_field_offset(lv, s19276c16f7, ABISELECT(5640,3448), "S19276C16.s19276c16f7");
    check_field_offset(lv, s19276c16f8, ABISELECT(5648,3452), "S19276C16.s19276c16f8");
    check_field_offset(lv, s19276c16f9, ABISELECT(5656,3460), "S19276C16.s19276c16f9");
    check_field_offset(lv, s19276c16f10, ABISELECT(5664,3468), "S19276C16.s19276c16f10");
    check_field_offset(lv, s19276c16f11, ABISELECT(5668,3472), "S19276C16.s19276c16f11");
    check_field_offset(lv, s19276c16f12, ABISELECT(5672,3476), "S19276C16.s19276c16f12");
    test_class_info(&lv, &cd_S19276C16);
    dp->~S19276C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19276C16(Test_S19276C16, "S19276C16", ABISELECT(8704,5296));

#else // __cplusplus

extern void _ZN9S19276C16C1Ev();
extern void _ZN9S19276C16D1Ev();
Name_Map name_map_S19276C16[] = {
  NSPAIR(_ZN9S19276C16C1Ev),
  NSPAIR(_ZN9S19276C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C2;
extern VTBL_ENTRY _ZTI8S19276C2[];
extern  VTBL_ENTRY _ZTV8S19276C2[];
extern Class_Descriptor cd_S19276C10;
extern VTBL_ENTRY _ZTI9S19276C10[];
extern  VTBL_ENTRY _ZTV9S19276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C10[];
extern Class_Descriptor cd_S19276C14;
extern VTBL_ENTRY _ZTI9S19276C14[];
extern  VTBL_ENTRY _ZTV9S19276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C14[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C7;
extern VTBL_ENTRY _ZTI8S19276C7[];
extern  VTBL_ENTRY _ZTV8S19276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C7[];
extern Class_Descriptor cd_S19276C10;
extern VTBL_ENTRY _ZTI9S19276C10[];
extern  VTBL_ENTRY _ZTV9S19276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C10[];
extern Class_Descriptor cd_S19276C15;
extern VTBL_ENTRY _ZTI9S19276C15[];
extern  VTBL_ENTRY _ZTV9S19276C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C15[];
extern Class_Descriptor cd_S19276C9;
extern VTBL_ENTRY _ZTI8S19276C9[];
extern  VTBL_ENTRY _ZTV8S19276C9[];
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C11;
extern VTBL_ENTRY _ZTI9S19276C11[];
extern  VTBL_ENTRY _ZTV9S19276C11[];
extern Class_Descriptor cd_S19276C13;
extern VTBL_ENTRY _ZTI9S19276C13[];
extern  VTBL_ENTRY _ZTV9S19276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C13[];
extern Class_Descriptor cd_S19277C17;
extern VTBL_ENTRY _ZTI9S19277C17[];
static Base_Class bases_S19276C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19276C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19276C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19276C4,    ABISELECT(5680,3484), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19276C3,    ABISELECT(5728,3508), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19276C2,    ABISELECT(5728,3508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19276C10,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19276C14,    ABISELECT(48,24), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19276C4,    ABISELECT(6032,3692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19276C7,    ABISELECT(6032,3692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19276C10,    ABISELECT(7008,4288), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19276C15,    ABISELECT(6032,3692), //bcp->offset
    39, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19276C9,    ABISELECT(7448,4552), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19276C3,    ABISELECT(8352,5084), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19276C11,    ABISELECT(8352,5084), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19276C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19277C17,    ABISELECT(664,416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19276C16[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN9S19276C133v14Ev();
extern void _ZN9S19276C16D1Ev();
extern void _ZN9S19276C16D0Ev();
extern void _ZN9S19276C103v10Ev();
extern void _ZN9S19276C143v11Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19276C16D1Ev,_ZTv0_n48_N9S19276C16D1Ev)();
extern void ABISELECT(_ZThn6032_N9S19276C16D1Ev,_ZThn3692_N9S19276C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19276C16D0Ev,_ZTv0_n48_N9S19276C16D0Ev)();
extern void ABISELECT(_ZThn6032_N9S19276C16D0Ev,_ZThn3692_N9S19276C16D0Ev)() __attribute__((weak));
extern void _ZN9S19276C153v12Ev();
extern void _ZN9S19276C103v10Ev();
extern void _ZN8S19276C92v7Ev();
extern void _ZN8S19276C92v8Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN9S19276C113v13Ev();
static  VTBL_ENTRY vtc_S19276C16[] = {
  ABISELECT(8352,5084),
  ABISELECT(7448,4552),
  ABISELECT(7008,4288),
  ABISELECT(6032,3692),
  ABISELECT(5728,3508),
  ABISELECT(5680,3484),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C16[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19276C133v14Ev,
  (VTBL_ENTRY)&_ZN9S19276C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19276C16D0Ev,
  ABISELECT(-48,-24),
  ABISELECT(5632,3460),
  ABISELECT(5680,3484),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19276C16[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19276C143v11Ev,
  0,
  0,
  0,
  ABISELECT(-5680,-3484),
  ABISELECT(-5680,-3484),
  ABISELECT(-5680,-3484),
  (VTBL_ENTRY)&(_ZTI9S19276C16[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  0,
  ABISELECT(-5728,-3508),
  (VTBL_ENTRY)&(_ZTI9S19276C16[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  0,
  ABISELECT(-6032,-3692),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-184),
  ABISELECT(976,596),
  ABISELECT(-6032,-3692),
  ABISELECT(-6032,-3692),
  ABISELECT(-6032,-3692),
  (VTBL_ENTRY)&(_ZTI9S19276C16[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19276C16D1Ev,_ZTv0_n48_N9S19276C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19276C16D0Ev,_ZTv0_n48_N9S19276C16D0Ev),
  (VTBL_ENTRY)&_ZN9S19276C153v12Ev,
  0,
  ABISELECT(-1280,-780),
  ABISELECT(-7008,-4288),
  (VTBL_ENTRY)&(_ZTI9S19276C16[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  0,
  0,
  ABISELECT(-7448,-4552),
  (VTBL_ENTRY)&(_ZTI9S19276C16[0]),
  (VTBL_ENTRY)&_ZN8S19276C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19276C92v8Ev,
  0,
  0,
  ABISELECT(-8352,-5084),
  (VTBL_ENTRY)&(_ZTI9S19276C16[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19276C113v13Ev,
};
extern VTBL_ENTRY _ZTV9S19276C16[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN9S19276C133v14Ev();
extern void _ZN9S19276C13D1Ev();
extern void _ZN9S19276C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C13__9S19276C16[] = {
  ABISELECT(8352,5084),
  ABISELECT(7448,4552),
  ABISELECT(7008,4288),
  ABISELECT(6032,3692),
  ABISELECT(5728,3508),
  ABISELECT(5680,3484),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19276C133v14Ev,
  (VTBL_ENTRY)&_ZN9S19276C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19276C13D0Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C49S19276C13__9S19276C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN9S19276C103v10Ev();
extern void _ZN9S19276C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C149S19276C13__9S19276C16[] = {
  ABISELECT(-48,-24),
  ABISELECT(5632,3460),
  ABISELECT(5680,3484),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19276C143v11Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C109S19276C149S19276C13__9S19276C16[] = {
  ABISELECT(5680,3484),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__9S19276C109S19276C149S19276C13__9S19276C16[] = {
  0,
  ABISELECT(-5680,-3484),
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__9S19276C149S19276C13__9S19276C16[] = {
  0,
  0,
  0,
  ABISELECT(-5680,-3484),
  ABISELECT(-5680,-3484),
  ABISELECT(-5632,-3460),
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__9S19276C149S19276C13__9S19276C16[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__A1__9S19276C149S19276C13__9S19276C16[] = {
  0,
  ABISELECT(-5680,-3484),
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN9S19276C103v10Ev();
extern void _ZN9S19276C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C14__9S19276C13__9S19276C16[] = {
  ABISELECT(-48,-24),
  ABISELECT(5632,3460),
  ABISELECT(5680,3484),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19276C143v11Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__A1__9S19276C13__9S19276C16[] = {
  0,
  0,
  0,
  ABISELECT(-5680,-3484),
  ABISELECT(-5680,-3484),
  ABISELECT(-5680,-3484),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__A1__9S19276C13__9S19276C16[] = {
  0,
  ABISELECT(-5728,-3508),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19276C13D1Ev,_ZTv0_n48_N9S19276C13D1Ev)();
extern void ABISELECT(_ZThn6032_N9S19276C13D1Ev,_ZThn3692_N9S19276C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19276C13D0Ev,_ZTv0_n48_N9S19276C13D0Ev)();
extern void ABISELECT(_ZThn6032_N9S19276C13D0Ev,_ZThn3692_N9S19276C13D0Ev)() __attribute__((weak));
extern void _ZN9S19276C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C15__9S19276C13__9S19276C16[] = {
  0,
  ABISELECT(-6032,-3692),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-184),
  ABISELECT(976,596),
  ABISELECT(-6032,-3692),
  ABISELECT(-6032,-3692),
  ABISELECT(-6032,-3692),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19276C13D1Ev,_ZTv0_n48_N9S19276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19276C13D0Ev,_ZTv0_n48_N9S19276C13D0Ev),
  (VTBL_ENTRY)&_ZN9S19276C153v12Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C10__A1__9S19276C13__9S19276C16[] = {
  0,
  ABISELECT(-1280,-780),
  ABISELECT(-7008,-4288),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C92v7Ev();
extern void _ZN8S19276C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C9__9S19276C13__9S19276C16[] = {
  0,
  0,
  ABISELECT(-7448,-4552),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19276C92v8Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN9S19276C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C11__9S19276C13__9S19276C16[] = {
  0,
  0,
  ABISELECT(-8352,-5084),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19276C113v13Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__A1__9S19276C16[] = {
  ABISELECT(-5680,-3484),
  ABISELECT(-5680,-3484),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C4__A1__9S19276C16[] = {
  0,
  ABISELECT(5680,3484),
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void _ZN9S19276C15D1Ev();
extern void _ZN9S19276C15D0Ev();
extern void _ZN9S19276C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C15__9S19276C16[] = {
  ABISELECT(-304,-184),
  ABISELECT(976,596),
  ABISELECT(-6032,-3692),
  ABISELECT(-6032,-3692),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C15[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  (VTBL_ENTRY)&_ZN9S19276C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19276C15D0Ev,
  (VTBL_ENTRY)&_ZN9S19276C153v12Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C79S19276C15__9S19276C16[] = {
  ABISELECT(-6032,-3692),
  ABISELECT(-6032,-3692),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C7[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C48S19276C79S19276C15__A2__9S19276C16[] = {
  ABISELECT(-6032,-3692),
  ABISELECT(-6032,-3692),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C48S19276C79S19276C15__A2__9S19276C16[] = {
  0,
  ABISELECT(6032,3692),
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C79S19276C15__9S19276C16[] = {
  0,
  ABISELECT(6032,3692),
  (VTBL_ENTRY)&(_ZTI8S19276C7[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__9S19276C15__9S19276C16[] = {
  0,
  ABISELECT(6032,3692),
  (VTBL_ENTRY)&(_ZTI9S19276C15[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C10__9S19276C15__9S19276C16[] = {
  0,
  ABISELECT(-1280,-780),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI9S19276C15[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__A1__9S19276C15__9S19276C16[] = {
  0,
  ABISELECT(304,184),
  (VTBL_ENTRY)&(_ZTI9S19276C15[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C10__A1__9S19276C16[] = {
  ABISELECT(-1280,-780),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__9S19276C10__A1__9S19276C16[] = {
  0,
  ABISELECT(1280,780),
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
static  VTT_ENTRY vtt_S19276C16[] = {
  {&(_ZTV9S19276C16[10]),  10,78},
  {&(_tg__ZTV9S19276C13__9S19276C16[10]),  10,17},
  {&(_tg__ZTV8S19276C49S19276C13__9S19276C16[4]),  4,8},
  {&(_tg__ZTV8S19276C49S19276C13__9S19276C16[4]),  4,8},
  {&(_tg__ZTV9S19276C149S19276C13__9S19276C16[5]),  5,7},
  {&(_tg__ZTV9S19276C109S19276C149S19276C13__9S19276C16[3]),  3,4},
  {&(_tg__ZTV8S19276C38S19276C2__9S19276C109S19276C149S19276C13__9S19276C16[3]),  3,4},
  {&(_tg__ZTV8S19276C4__9S19276C149S19276C13__9S19276C16[7]),  7,11},
  {&(_tg__ZTV8S19276C3__9S19276C149S19276C13__9S19276C16[3]),  3,4},
  {&(_tg__ZTV8S19276C38S19276C2__A1__9S19276C149S19276C13__9S19276C16[3]),  3,4},
  {&(_tg__ZTV9S19276C13__9S19276C16[10]),  10,17},
  {&(_tg__ZTV9S19276C14__9S19276C13__9S19276C16[5]),  5,7},
  {&(_tg__ZTV8S19276C4__A1__9S19276C13__9S19276C16[7]),  7,11},
  {&(_tg__ZTV8S19276C38S19276C2__A1__9S19276C13__9S19276C16[3]),  3,4},
  {&(_tg__ZTV9S19276C15__9S19276C13__9S19276C16[13]),  13,22},
  {&(_tg__ZTV9S19276C10__A1__9S19276C13__9S19276C16[4]),  4,5},
  {&(_tg__ZTV8S19276C9__9S19276C13__9S19276C16[4]),  4,6},
  {&(_tg__ZTV9S19276C11__9S19276C13__9S19276C16[4]),  4,6},
  {&(_ZTV9S19276C16[10]),  10,78},
  {&(_ZTV9S19276C16[22]),  22,78},
  {&(_ZTV9S19276C16[31]),  31,78},
  {&(_ZTV9S19276C16[38]),  38,78},
  {&(_ZTV9S19276C16[52]),  52,78},
  {&(_ZTV9S19276C16[65]),  65,78},
  {&(_ZTV9S19276C16[70]),  70,78},
  {&(_ZTV9S19276C16[76]),  76,78},
  {&(_tg__ZTV8S19276C4__A1__9S19276C16[4]),  4,8},
  {&(_tg__ZTV8S19276C3__8S19276C4__A1__9S19276C16[3]),  3,4},
  {&(_tg__ZTV9S19276C15__9S19276C16[6]),  6,15},
  {&(_tg__ZTV8S19276C79S19276C15__9S19276C16[4]),  4,10},
  {&(_tg__ZTV8S19276C48S19276C79S19276C15__A2__9S19276C16[4]),  4,8},
  {&(_tg__ZTV8S19276C3__8S19276C48S19276C79S19276C15__A2__9S19276C16[3]),  3,4},
  {&(_tg__ZTV8S19276C3__8S19276C79S19276C15__9S19276C16[3]),  3,4},
  {&(_tg__ZTV8S19276C3__9S19276C15__9S19276C16[3]),  3,4},
  {&(_tg__ZTV9S19276C10__9S19276C15__9S19276C16[4]),  4,5},
  {&(_tg__ZTV8S19276C38S19276C2__A1__9S19276C15__9S19276C16[3]),  3,4},
  {&(_tg__ZTV9S19276C10__A1__9S19276C16[3]),  3,4},
  {&(_tg__ZTV8S19276C38S19276C2__9S19276C10__A1__9S19276C16[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19276C16[];
extern  VTBL_ENTRY _ZTV9S19276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C16[];
static VTBL_ENTRY alt_thunk_names51[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19276C13D0Ev,_ZTv0_n48_N9S19276C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6032_N9S19276C13D0Ev,_ZThn3692_N9S19276C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19276C13D1Ev,_ZTv0_n48_N9S19276C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6032_N9S19276C13D1Ev,_ZThn3692_N9S19276C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19276C16D0Ev,_ZTv0_n48_N9S19276C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6032_N9S19276C16D0Ev,_ZThn3692_N9S19276C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19276C16D1Ev,_ZTv0_n48_N9S19276C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6032_N9S19276C16D1Ev,_ZThn3692_N9S19276C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19276C16 = {  "S19276C16", // class name
  bases_S19276C16, 16,
  &(vtc_S19276C16[0]), // expected_vtbl_contents
  &(vtt_S19276C16[0]), // expected_vtt_contents
  ABISELECT(8704,5296), // object size
  NSPAIRA(_ZTI9S19276C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19276C16),78, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19276C16),38, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names51,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19276C1  : virtual S19276C2 , virtual S19276C6 , S19276C16 {
  int s19276c1f0[9];
  __tsi64 s19276c1f1;
  virtual  ~S19276C1(); // _ZN8S19276C1D2Ev
  S19276C1(); // tgen
};
//SIG(1 S19276C1) C1{ VBC2{ BC3{ v1} Fc[5] FC4{ VBC3 v2 v3 v4 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC6{ VBC7{ BC4 v5 v6 Fp FC8{ BC2 VBC3 VBC4 Fi Fp} Fi Fp Fi[2]} VBC9{ v7 v8 Fp[2] Fi[2] Fp[15] Fi FC10{ VBC2 v10 Fp FL Fp[6] FC3 FC11{ BC3 v13 Fc FL Fi[3] FC2} Fp Fi}} VBC12{ vd v9 Fi} VBC13{ BC4 BC14{ VBC4 BC10 v11 Fp FC3 FL[8] FC4 Fp} VBC15{ VBC3 BC7 VBC10 vd v12 Fp[2] Fi[9] FC11 FC3[9] FL FD Fp FL Fl FL} VBC9 VBC11 v14 Fs FC5 Fc Fp[2] Fi[2] FL} v15 v16 FL Fi Fc Fp FL FD Fc Fs} BC16{ BC13 BC17{ m Fl Fc} Fi FD[10] Fi Fp FC13 Fi[2] FC18{ VBC8 BC19{ BC7 v18 Fs:16 FL Fc Fl[10] Fi[10] FL[4] Fp FU20{ m Fp FL FL Fi:27 Fs:16 Fs Fp}} v17 FC4 FL:28 Fp Fl Fs} Fi FL FL Fi Fi FL} vd Fi[9] FL}


 S19276C1 ::~S19276C1(){ note_dtor("S19276C1", this);}
S19276C1 ::S19276C1(){ note_ctor("S19276C1", this);} // tgen

static void Test_S19276C1()
{
  extern Class_Descriptor cd_S19276C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(622,1519)];
    init_test(&cd_S19276C1, buf);
    S19276C1 *dp, &lv = *(dp=new (buf) S19276C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9936,6072), "sizeof(S19276C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19276C1)");
    check_base_class_offset(lv, (S19276C3*)(S19276C2*), ABISELECT(5728,3528), "S19276C1");
    check_base_class_offset(lv, (S19276C2*), ABISELECT(5728,3528), "S19276C1");
    /*is_ambiguous_... S19276C1::S19276C13 */ AMB_check_base_class_offset(lv, (S19276C2*)(S19276C10*)(S19276C14*)(S19276C13*), ABISELECT(5728,3528), "S19276C1");
    /*is_ambiguous_... S19276C1::S19276C10 */ AMB_check_base_class_offset(lv, (S19276C2*)(S19276C10*), ABISELECT(5728,3528), "S19276C1");
    check_base_class_offset(lv, (S19276C2*)(S19276C10*)(S19276C14*)(S19276C13*)(S19276C16*), ABISELECT(5728,3528), "S19276C1");
    /*is_ambiguous_... S19276C1::S19276C7 */ AMB_check_base_class_offset(lv, (S19276C3*)(S19276C4*)(S19276C7*), ABISELECT(6032,3712), "S19276C1");
    /*is_ambiguous_... S19276C1::S19276C13 */ AMB_check_base_class_offset(lv, (S19276C3*)(S19276C4*)(S19276C13*), ABISELECT(6032,3712), "S19276C1");
    /*is_ambiguous_... S19276C1::S19276C4 */ AMB_check_base_class_offset(lv, (S19276C3*)(S19276C4*), ABISELECT(6032,3712), "S19276C1");
    /*is_ambiguous_... S19276C15::S19276C3 */ AMB_check_base_class_offset(lv, (S19276C3*)(S19276C15*), ABISELECT(6032,3712), "S19276C1");
    check_base_class_offset(lv, (S19276C3*)(S19276C4*)(S19276C7*)(S19276C15*), ABISELECT(6032,3712), "S19276C1");
    /*is_ambiguous_... S19276C13::S19276C4 */ AMB_check_base_class_offset(lv, (S19276C3*)(S19276C4*)(S19276C13*)(S19276C16*), ABISELECT(6032,3712), "S19276C1");
    /*is_ambiguous_... S19276C1::S19276C7 */ AMB_check_base_class_offset(lv, (S19276C4*)(S19276C7*), ABISELECT(6104,3760), "S19276C1");
    /*is_ambiguous_... S19276C6::S19276C7 */ AMB_check_base_class_offset(lv, (S19276C7*)(S19276C6*), ABISELECT(6104,3760), "S19276C1");
    check_base_class_offset(lv, (S19276C9*)(S19276C6*), ABISELECT(6544,4020), "S19276C1");
    /*is_ambiguous_... S19276C1::S19276C13 */ AMB_check_base_class_offset(lv, (S19276C9*)(S19276C13*), ABISELECT(6544,4020), "S19276C1");
    check_base_class_offset(lv, (S19276C9*)(S19276C13*)(S19276C16*), ABISELECT(6544,4020), "S19276C1");
    check_base_class_offset(lv, (S19276C12*)(S19276C6*), ABISELECT(7448,4552), "S19276C1");
    /*is_ambiguous_... S19276C1::S19276C13 */ AMB_check_base_class_offset(lv, (S19276C4*)(S19276C13*), ABISELECT(7464,4560), "S19276C1");
    /*is_ambiguous_... S19276C1::S19276C13 */ AMB_check_base_class_offset(lv, (S19276C4*)(S19276C14*)(S19276C13*), ABISELECT(8128,4976), "S19276C1");
    check_base_class_offset(lv, (S19276C4*)(S19276C14*)(S19276C13*)(S19276C16*), ABISELECT(8128,4976), "S19276C1");
    /*is_ambiguous_... S19276C1::S19276C13 */ AMB_check_base_class_offset(lv, (S19276C10*)(S19276C14*)(S19276C13*), ABISELECT(7512,4584), "S19276C1");
    /*is_ambiguous_... S19276C1::S19276C13 */ AMB_check_base_class_offset(lv, (S19276C14*)(S19276C13*), ABISELECT(7512,4584), "S19276C1");
    check_base_class_offset(lv, (S19276C4*)(S19276C7*)(S19276C15*), ABISELECT(8176,5000), "S19276C1");
    check_base_class_offset(lv, (S19276C7*)(S19276C15*), ABISELECT(8176,5000), "S19276C1");
    check_base_class_offset(lv, (S19276C10*)(S19276C15*), ABISELECT(9152,5596), "S19276C1");
    /*is_ambiguous_... S19276C1::S19276C13 */ AMB_check_base_class_offset(lv, (S19276C15*)(S19276C13*), ABISELECT(8176,5000), "S19276C1");
    check_base_class_offset(lv, (S19276C15*)(S19276C13*)(S19276C16*), ABISELECT(8176,5000), "S19276C1");
    check_base_class_offset(lv, (S19276C3*)(S19276C11*), ABISELECT(9592,5860), "S19276C1");
    /*is_ambiguous_... S19276C1::S19276C13 */ AMB_check_base_class_offset(lv, (S19276C11*)(S19276C13*), ABISELECT(9592,5860), "S19276C1");
    check_base_class_offset(lv, (S19276C11*)(S19276C13*)(S19276C16*), ABISELECT(9592,5860), "S19276C1");
    check_base_class_offset(lv, (S19276C13*)(S19276C6*), ABISELECT(7464,4560), "S19276C1");
    check_base_class_offset(lv, (S19276C6*), ABISELECT(6032,3712), "S19276C1");
    /*is_ambiguous_... S19276C13::S19276C4 */ AMB_check_base_class_offset(lv, (S19276C4*)(S19276C13*)(S19276C16*), 0, "S19276C1");
    check_base_class_offset(lv, (S19276C10*)(S19276C14*)(S19276C13*)(S19276C16*), ABISELECT(48,24), "S19276C1");
    check_base_class_offset(lv, (S19276C14*)(S19276C13*)(S19276C16*), ABISELECT(48,24), "S19276C1");
    check_base_class_offset(lv, (S19276C13*)(S19276C16*), 0, "S19276C1");
    check_base_class_offset(lv, (S19277C17*)(S19276C16*), ABISELECT(664,416), "S19276C1");
    check_base_class_offset(lv, (S19276C16*), 0, "S19276C1");
    check_field_offset(lv, s19276c1f0, ABISELECT(5680,3484), "S19276C1.s19276c1f0");
    check_field_offset(lv, s19276c1f1, ABISELECT(5720,3520), "S19276C1.s19276c1f1");
    test_class_info(&lv, &cd_S19276C1);
    dp->~S19276C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19276C1(Test_S19276C1, "S19276C1", ABISELECT(9936,6072));

#else // __cplusplus

extern void _ZN8S19276C1C1Ev();
extern void _ZN8S19276C1D2Ev();
Name_Map name_map_S19276C1[] = {
  NSPAIR(_ZN8S19276C1C1Ev),
  NSPAIR(_ZN8S19276C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C2;
extern VTBL_ENTRY _ZTI8S19276C2[];
extern  VTBL_ENTRY _ZTV8S19276C2[];
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C7;
extern VTBL_ENTRY _ZTI8S19276C7[];
extern  VTBL_ENTRY _ZTV8S19276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C7[];
extern Class_Descriptor cd_S19276C9;
extern VTBL_ENTRY _ZTI8S19276C9[];
extern  VTBL_ENTRY _ZTV8S19276C9[];
extern Class_Descriptor cd_S19276C12;
extern VTBL_ENTRY _ZTI9S19276C12[];
extern  VTBL_ENTRY _ZTV9S19276C12[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C10;
extern VTBL_ENTRY _ZTI9S19276C10[];
extern  VTBL_ENTRY _ZTV9S19276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C10[];
extern Class_Descriptor cd_S19276C14;
extern VTBL_ENTRY _ZTI9S19276C14[];
extern  VTBL_ENTRY _ZTV9S19276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C14[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C7;
extern VTBL_ENTRY _ZTI8S19276C7[];
extern  VTBL_ENTRY _ZTV8S19276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C7[];
extern Class_Descriptor cd_S19276C10;
extern VTBL_ENTRY _ZTI9S19276C10[];
extern  VTBL_ENTRY _ZTV9S19276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C10[];
extern Class_Descriptor cd_S19276C15;
extern VTBL_ENTRY _ZTI9S19276C15[];
extern  VTBL_ENTRY _ZTV9S19276C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C15[];
extern Class_Descriptor cd_S19276C3;
extern VTBL_ENTRY _ZTI8S19276C3[];
extern  VTBL_ENTRY _ZTV8S19276C3[];
extern Class_Descriptor cd_S19276C11;
extern VTBL_ENTRY _ZTI9S19276C11[];
extern  VTBL_ENTRY _ZTV9S19276C11[];
extern Class_Descriptor cd_S19276C13;
extern VTBL_ENTRY _ZTI9S19276C13[];
extern  VTBL_ENTRY _ZTV9S19276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C13[];
extern Class_Descriptor cd_S19276C6;
extern VTBL_ENTRY _ZTI8S19276C6[];
extern  VTBL_ENTRY _ZTV8S19276C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C6[];
extern Class_Descriptor cd_S19276C4;
extern VTBL_ENTRY _ZTI8S19276C4[];
extern  VTBL_ENTRY _ZTV8S19276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C4[];
extern Class_Descriptor cd_S19276C10;
extern VTBL_ENTRY _ZTI9S19276C10[];
extern  VTBL_ENTRY _ZTV9S19276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C10[];
extern Class_Descriptor cd_S19276C14;
extern VTBL_ENTRY _ZTI9S19276C14[];
extern  VTBL_ENTRY _ZTV9S19276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C14[];
extern Class_Descriptor cd_S19276C13;
extern VTBL_ENTRY _ZTI9S19276C13[];
extern  VTBL_ENTRY _ZTV9S19276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C13[];
extern Class_Descriptor cd_S19277C17;
extern VTBL_ENTRY _ZTI9S19277C17[];
extern Class_Descriptor cd_S19276C16;
extern VTBL_ENTRY _ZTI9S19276C16[];
extern  VTBL_ENTRY _ZTV9S19276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19276C16[];
static Base_Class bases_S19276C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19276C3,    ABISELECT(5728,3528), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19276C2,    ABISELECT(5728,3528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19276C3,    ABISELECT(6032,3712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19276C4,    ABISELECT(6104,3760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19276C7,    ABISELECT(6104,3760), //bcp->offset
    53, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19276C9,    ABISELECT(6544,4020), //bcp->offset
    68, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19276C12,    ABISELECT(7448,4552), //bcp->offset
    74, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19276C4,    ABISELECT(7464,4560), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19276C4,    ABISELECT(8128,4976), //bcp->offset
    112, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19276C10,    ABISELECT(7512,4584), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19276C14,    ABISELECT(7512,4584), //bcp->offset
    105, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19276C4,    ABISELECT(8176,5000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19276C7,    ABISELECT(8176,5000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19276C10,    ABISELECT(9152,5596), //bcp->offset
    145, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    84, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19276C15,    ABISELECT(8176,5000), //bcp->offset
    123, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19276C3,    ABISELECT(9592,5860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19276C11,    ABISELECT(9592,5860), //bcp->offset
    150, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19276C13,    ABISELECT(7464,4560), //bcp->offset
    81, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19276C6,    ABISELECT(6032,3712), //bcp->offset
    32, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19276C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19276C10,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19276C14,    ABISELECT(48,24), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19276C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19277C17,    ABISELECT(664,416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19276C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19276C1[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN9S19276C133v14Ev();
extern void _ZN8S19276C1D1Ev();
extern void _ZN8S19276C1D0Ev();
extern void _ZN9S19276C103v10Ev();
extern void _ZN9S19276C143v11Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C63v15Ev();
extern void _ZN8S19276C63v16Ev();
extern void ABISELECT(_ZTv0_n128_N8S19276C1D1Ev,_ZTv0_n64_N8S19276C1D1Ev)();
extern void ABISELECT(_ZThn6032_N8S19276C1D1Ev,_ZThn3712_N8S19276C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n128_N8S19276C1D0Ev,_ZTv0_n64_N8S19276C1D0Ev)();
extern void ABISELECT(_ZThn6032_N8S19276C1D0Ev,_ZThn3712_N8S19276C1D0Ev)() __attribute__((weak));
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void _ZN8S19276C92v7Ev();
extern void _ZN8S19276C92v8Ev();
extern void ABISELECT(_ZTv0_n24_N8S19276C1D1Ev,_ZTv0_n12_N8S19276C1D1Ev)();
extern void ABISELECT(_ZThn7448_N8S19276C1D1Ev,_ZThn4552_N8S19276C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19276C1D0Ev,_ZTv0_n12_N8S19276C1D0Ev)();
extern void ABISELECT(_ZThn7448_N8S19276C1D0Ev,_ZThn4552_N8S19276C1D0Ev)() __attribute__((weak));
extern void _ZN9S19276C122v9Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN9S19276C133v14Ev();
extern void ABISELECT(_ZTv0_n120_N8S19276C1D1Ev,_ZTv0_n60_N8S19276C1D1Ev)();
extern void ABISELECT(_ZThn7464_N8S19276C1D1Ev,_ZThn4560_N8S19276C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S19276C1D0Ev,_ZTv0_n60_N8S19276C1D0Ev)();
extern void ABISELECT(_ZThn7464_N8S19276C1D0Ev,_ZThn4560_N8S19276C1D0Ev)() __attribute__((weak));
extern void _ZN9S19276C103v10Ev();
extern void _ZN9S19276C143v11Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N8S19276C1D1Ev,_ZTv0_n48_N8S19276C1D1Ev)();
extern void ABISELECT(_ZThn8176_N8S19276C1D1Ev,_ZThn5000_N8S19276C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19276C1D0Ev,_ZTv0_n48_N8S19276C1D0Ev)();
extern void ABISELECT(_ZThn8176_N8S19276C1D0Ev,_ZThn5000_N8S19276C1D0Ev)() __attribute__((weak));
extern void _ZN9S19276C153v12Ev();
extern void _ZN9S19276C103v10Ev();
extern void _ZN8S19276C32v1Ev();
extern void _ZN9S19276C113v13Ev();
static  VTBL_ENTRY vtc_S19276C1[] = {
  ABISELECT(7464,4560),
  ABISELECT(7448,4552),
  ABISELECT(6104,3760),
  ABISELECT(6032,3712),
  ABISELECT(9592,5860),
  ABISELECT(6544,4020),
  ABISELECT(9152,5596),
  ABISELECT(8176,5000),
  ABISELECT(5728,3528),
  ABISELECT(8128,4976),
  ABISELECT(6032,3712),
  ABISELECT(6032,3712),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C1[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19276C133v14Ev,
  (VTBL_ENTRY)&_ZN8S19276C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19276C1D0Ev,
  ABISELECT(5984,3688),
  ABISELECT(8080,4952),
  ABISELECT(5680,3504),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19276C1[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19276C143v11Ev,
  0,
  ABISELECT(-5728,-3528),
  (VTBL_ENTRY)&(_ZTI8S19276C1[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  ABISELECT(-6032,-3712),
  0,
  0,
  ABISELECT(3560,2148),
  ABISELECT(3120,1884),
  ABISELECT(2144,1288),
  ABISELECT(-304,-184),
  ABISELECT(2096,1264),
  ABISELECT(1432,848),
  ABISELECT(1416,840),
  ABISELECT(512,308),
  0,
  ABISELECT(72,48),
  0,
  ABISELECT(-6032,-3712),
  (VTBL_ENTRY)&(_ZTI8S19276C1[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19276C63v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S19276C1D1Ev,_ZTv0_n64_N8S19276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S19276C1D0Ev,_ZTv0_n64_N8S19276C1D0Ev),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-6104,-3760),
  (VTBL_ENTRY)&(_ZTI8S19276C1[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  0,
  0,
  ABISELECT(-6544,-4020),
  (VTBL_ENTRY)&(_ZTI8S19276C1[0]),
  (VTBL_ENTRY)&_ZN8S19276C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19276C92v8Ev,
  0,
  ABISELECT(-7448,-4552),
  ABISELECT(-7448,-4552),
  (VTBL_ENTRY)&(_ZTI8S19276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19276C1D1Ev,_ZTv0_n12_N8S19276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19276C1D0Ev,_ZTv0_n12_N8S19276C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19276C122v9Ev,
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-7464,-4560),
  0,
  0,
  0,
  0,
  ABISELECT(2128,1300),
  ABISELECT(-920,-540),
  ABISELECT(1688,1036),
  ABISELECT(712,440),
  ABISELECT(-1736,-1032),
  ABISELECT(664,416),
  ABISELECT(-1432,-848),
  ABISELECT(-1432,-848),
  ABISELECT(-7464,-4560),
  (VTBL_ENTRY)&(_ZTI8S19276C1[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19276C133v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19276C1D1Ev,_ZTv0_n60_N8S19276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19276C1D0Ev,_ZTv0_n60_N8S19276C1D0Ev),
  ABISELECT(-1480,-872),
  ABISELECT(616,392),
  ABISELECT(-1784,-1056),
  ABISELECT(-7512,-4584),
  (VTBL_ENTRY)&(_ZTI8S19276C1[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19276C143v11Ev,
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-8128,-4976),
  (VTBL_ENTRY)&(_ZTI8S19276C1[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  0,
  ABISELECT(-8176,-5000),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2448,-1472),
  ABISELECT(976,596),
  ABISELECT(-2144,-1288),
  ABISELECT(-2144,-1288),
  ABISELECT(-8176,-5000),
  (VTBL_ENTRY)&(_ZTI8S19276C1[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19276C1D1Ev,_ZTv0_n48_N8S19276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19276C1D0Ev,_ZTv0_n48_N8S19276C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19276C153v12Ev,
  0,
  ABISELECT(-3424,-2068),
  ABISELECT(-9152,-5596),
  (VTBL_ENTRY)&(_ZTI8S19276C1[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  0,
  0,
  ABISELECT(-9592,-5860),
  (VTBL_ENTRY)&(_ZTI8S19276C1[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19276C113v13Ev,
};
extern VTBL_ENTRY _ZTV8S19276C1[];
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN9S19276C133v14Ev();
extern void _ZN9S19276C16D1Ev();
extern void _ZN9S19276C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C16__8S19276C1[] = {
  ABISELECT(9592,5860),
  ABISELECT(6544,4020),
  ABISELECT(9152,5596),
  ABISELECT(8176,5000),
  ABISELECT(5728,3528),
  ABISELECT(8128,4976),
  ABISELECT(6032,3712),
  ABISELECT(6032,3712),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C16[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19276C133v14Ev,
  (VTBL_ENTRY)&_ZN9S19276C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19276C16D0Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN9S19276C133v14Ev();
extern void _ZN9S19276C13D1Ev();
extern void _ZN9S19276C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C139S19276C16__A1__8S19276C1[] = {
  ABISELECT(9592,5860),
  ABISELECT(6544,4020),
  ABISELECT(9152,5596),
  ABISELECT(8176,5000),
  ABISELECT(5728,3528),
  ABISELECT(8128,4976),
  ABISELECT(6032,3712),
  ABISELECT(6032,3712),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19276C133v14Ev,
  (VTBL_ENTRY)&_ZN9S19276C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19276C13D0Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C49S19276C139S19276C16__A4__8S19276C1[] = {
  ABISELECT(6032,3712),
  ABISELECT(6032,3712),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C49S19276C139S19276C16__A4__8S19276C1[] = {
  0,
  ABISELECT(-6032,-3712),
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN9S19276C103v10Ev();
extern void _ZN9S19276C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C149S19276C139S19276C16__A1__8S19276C1[] = {
  ABISELECT(5984,3688),
  ABISELECT(8080,4952),
  ABISELECT(5680,3504),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19276C143v11Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C109S19276C149S19276C139S19276C16__A2__8S19276C1[] = {
  ABISELECT(5680,3504),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__9S19276C109S19276C149S19276C139S19276C16__A2__8S19276C1[] = {
  0,
  ABISELECT(-5680,-3504),
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__9S19276C149S19276C139S19276C16__A1__8S19276C1[] = {
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-8080,-4952),
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__9S19276C149S19276C139S19276C16__A1__8S19276C1[] = {
  0,
  ABISELECT(-5984,-3688),
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__A1__9S19276C149S19276C139S19276C16__A1__8S19276C1[] = {
  0,
  ABISELECT(-5680,-3504),
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__9S19276C139S19276C16__A1__8S19276C1[] = {
  0,
  ABISELECT(-6032,-3712),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN9S19276C103v10Ev();
extern void _ZN9S19276C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C14__9S19276C139S19276C16__A1__8S19276C1[] = {
  ABISELECT(5984,3688),
  ABISELECT(8080,4952),
  ABISELECT(5680,3504),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19276C143v11Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__A1__9S19276C139S19276C16__A1__8S19276C1[] = {
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-8128,-4976),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__A1__9S19276C139S19276C16__A1__8S19276C1[] = {
  0,
  ABISELECT(-5728,-3528),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19276C13D1Ev,_ZTv0_n48_N9S19276C13D1Ev)();
extern void ABISELECT(_ZThn8176_N9S19276C13D1Ev,_ZThn5000_N9S19276C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19276C13D0Ev,_ZTv0_n48_N9S19276C13D0Ev)();
extern void ABISELECT(_ZThn8176_N9S19276C13D0Ev,_ZThn5000_N9S19276C13D0Ev)() __attribute__((weak));
extern void _ZN9S19276C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C15__9S19276C139S19276C16__A1__8S19276C1[] = {
  0,
  ABISELECT(-8176,-5000),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2448,-1472),
  ABISELECT(976,596),
  ABISELECT(-2144,-1288),
  ABISELECT(-2144,-1288),
  ABISELECT(-8176,-5000),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19276C13D1Ev,_ZTv0_n48_N9S19276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19276C13D0Ev,_ZTv0_n48_N9S19276C13D0Ev),
  (VTBL_ENTRY)&_ZN9S19276C153v12Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C10__A1__9S19276C139S19276C16__A1__8S19276C1[] = {
  0,
  ABISELECT(-3424,-2068),
  ABISELECT(-9152,-5596),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C92v7Ev();
extern void _ZN8S19276C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C9__9S19276C139S19276C16__A1__8S19276C1[] = {
  0,
  0,
  ABISELECT(-6544,-4020),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19276C92v8Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN9S19276C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C11__9S19276C139S19276C16__A1__8S19276C1[] = {
  0,
  0,
  ABISELECT(-9592,-5860),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19276C113v13Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__9S19276C16__8S19276C1[] = {
  0,
  ABISELECT(-6032,-3712),
  (VTBL_ENTRY)&(_ZTI9S19276C16[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN9S19276C103v10Ev();
extern void _ZN9S19276C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C149S19276C13__9S19276C16__8S19276C1[] = {
  ABISELECT(5984,3688),
  ABISELECT(8080,4952),
  ABISELECT(5680,3504),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19276C16[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19276C143v11Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__A1__9S19276C16__8S19276C1[] = {
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-8128,-4976),
  (VTBL_ENTRY)&(_ZTI9S19276C16[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__A1__9S19276C16__8S19276C1[] = {
  0,
  ABISELECT(-5728,-3528),
  (VTBL_ENTRY)&(_ZTI9S19276C16[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19276C16D1Ev,_ZTv0_n48_N9S19276C16D1Ev)();
extern void ABISELECT(_ZThn8176_N9S19276C16D1Ev,_ZThn5000_N9S19276C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19276C16D0Ev,_ZTv0_n48_N9S19276C16D0Ev)();
extern void ABISELECT(_ZThn8176_N9S19276C16D0Ev,_ZThn5000_N9S19276C16D0Ev)() __attribute__((weak));
extern void _ZN9S19276C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C15__9S19276C16__8S19276C1[] = {
  0,
  ABISELECT(-8176,-5000),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2448,-1472),
  ABISELECT(976,596),
  ABISELECT(-2144,-1288),
  ABISELECT(-2144,-1288),
  ABISELECT(-8176,-5000),
  (VTBL_ENTRY)&(_ZTI9S19276C16[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19276C16D1Ev,_ZTv0_n48_N9S19276C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19276C16D0Ev,_ZTv0_n48_N9S19276C16D0Ev),
  (VTBL_ENTRY)&_ZN9S19276C153v12Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C10__A1__9S19276C16__8S19276C1[] = {
  0,
  ABISELECT(-3424,-2068),
  ABISELECT(-9152,-5596),
  (VTBL_ENTRY)&(_ZTI9S19276C16[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C92v7Ev();
extern void _ZN8S19276C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C9__9S19276C16__8S19276C1[] = {
  0,
  0,
  ABISELECT(-6544,-4020),
  (VTBL_ENTRY)&(_ZTI9S19276C16[0]),
  (VTBL_ENTRY)&_ZN8S19276C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19276C92v8Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN9S19276C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C11__9S19276C16__8S19276C1[] = {
  0,
  0,
  ABISELECT(-9592,-5860),
  (VTBL_ENTRY)&(_ZTI9S19276C16[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19276C113v13Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C63v15Ev();
extern void _ZN8S19276C63v16Ev();
extern void _ZN8S19276C6D1Ev();
extern void _ZN8S19276C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C6__8S19276C1[] = {
  ABISELECT(3560,2148),
  ABISELECT(3120,1884),
  ABISELECT(2144,1288),
  ABISELECT(-304,-184),
  ABISELECT(2096,1264),
  ABISELECT(1432,848),
  ABISELECT(1416,840),
  ABISELECT(512,308),
  0,
  ABISELECT(72,48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19276C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19276C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19276C6D0Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C7__8S19276C6__8S19276C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
};
extern void _ZN8S19276C92v7Ev();
extern void _ZN8S19276C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C9__8S19276C6__8S19276C1[] = {
  0,
  0,
  ABISELECT(-512,-308),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN8S19276C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19276C92v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19276C6D1Ev,_ZTv0_n12_N8S19276C6D1Ev)();
extern void ABISELECT(_ZThn1416_N8S19276C6D1Ev,_ZThn840_N8S19276C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19276C6D0Ev,_ZTv0_n12_N8S19276C6D0Ev)();
extern void ABISELECT(_ZThn1416_N8S19276C6D0Ev,_ZThn840_N8S19276C6D0Ev)() __attribute__((weak));
extern void _ZN9S19276C122v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C12__8S19276C6__8S19276C1[] = {
  0,
  ABISELECT(-1416,-840),
  ABISELECT(-1416,-840),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19276C6D1Ev,_ZTv0_n12_N8S19276C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19276C6D0Ev,_ZTv0_n12_N8S19276C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19276C122v9Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN9S19276C133v14Ev();
extern void ABISELECT(_ZTv0_n120_N8S19276C6D1Ev,_ZTv0_n60_N8S19276C6D1Ev)();
extern void ABISELECT(_ZThn1432_N8S19276C6D1Ev,_ZThn848_N8S19276C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S19276C6D0Ev,_ZTv0_n60_N8S19276C6D0Ev)();
extern void ABISELECT(_ZThn1432_N8S19276C6D0Ev,_ZThn848_N8S19276C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19276C13__8S19276C6__8S19276C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-1432,-848),
  0,
  0,
  0,
  0,
  ABISELECT(2128,1300),
  ABISELECT(-920,-540),
  ABISELECT(1688,1036),
  ABISELECT(712,440),
  ABISELECT(-1736,-1032),
  ABISELECT(664,416),
  ABISELECT(-1432,-848),
  ABISELECT(-1432,-848),
  ABISELECT(-1432,-848),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19276C133v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19276C6D1Ev,_ZTv0_n60_N8S19276C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19276C6D0Ev,_ZTv0_n60_N8S19276C6D0Ev),
};
extern void _ZN9S19276C103v10Ev();
extern void _ZN9S19276C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C149S19276C13__8S19276C6__8S19276C1[] = {
  ABISELECT(-1480,-872),
  ABISELECT(616,392),
  ABISELECT(-1784,-1056),
  ABISELECT(-1480,-872),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19276C143v11Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__A2__8S19276C6__8S19276C1[] = {
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__A1__8S19276C6__8S19276C1[] = {
  0,
  ABISELECT(304,184),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N8S19276C6D1Ev,_ZTv0_n48_N8S19276C6D1Ev)();
extern void ABISELECT(_ZThn2144_N8S19276C6D1Ev,_ZThn1288_N8S19276C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19276C6D0Ev,_ZTv0_n48_N8S19276C6D0Ev)();
extern void ABISELECT(_ZThn2144_N8S19276C6D0Ev,_ZThn1288_N8S19276C6D0Ev)() __attribute__((weak));
extern void _ZN9S19276C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C15__8S19276C6__8S19276C1[] = {
  0,
  ABISELECT(-2144,-1288),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2448,-1472),
  ABISELECT(976,596),
  ABISELECT(-2144,-1288),
  ABISELECT(-2144,-1288),
  ABISELECT(-2144,-1288),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19276C6D1Ev,_ZTv0_n48_N8S19276C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19276C6D0Ev,_ZTv0_n48_N8S19276C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19276C153v12Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C10__A1__8S19276C6__8S19276C1[] = {
  0,
  ABISELECT(-3424,-2068),
  ABISELECT(-3120,-1884),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN9S19276C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C11__8S19276C6__8S19276C1[] = {
  0,
  0,
  ABISELECT(-3560,-2148),
  (VTBL_ENTRY)&(_ZTI8S19276C6[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19276C113v13Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C7__8S19276C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C7[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C48S19276C7__8S19276C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C48S19276C7__8S19276C1[] = {
  0,
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C7__8S19276C1[] = {
  0,
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S19276C7[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN9S19276C133v14Ev();
extern void _ZN9S19276C13D1Ev();
extern void _ZN9S19276C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C13__8S19276C1[] = {
  ABISELECT(2128,1300),
  ABISELECT(-920,-540),
  ABISELECT(1688,1036),
  ABISELECT(712,440),
  ABISELECT(-1736,-1032),
  ABISELECT(664,416),
  ABISELECT(-1432,-848),
  ABISELECT(-1432,-848),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN9S19276C133v14Ev,
  (VTBL_ENTRY)&_ZN9S19276C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19276C13D0Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C49S19276C13__A1__8S19276C1[] = {
  ABISELECT(-1432,-848),
  ABISELECT(-1432,-848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C49S19276C13__A1__8S19276C1[] = {
  0,
  ABISELECT(1432,848),
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN9S19276C103v10Ev();
extern void _ZN9S19276C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C149S19276C13__8S19276C1[] = {
  ABISELECT(-1480,-872),
  ABISELECT(616,392),
  ABISELECT(-1784,-1056),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19276C143v11Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C109S19276C149S19276C13__8S19276C1[] = {
  ABISELECT(-1784,-1056),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__9S19276C109S19276C149S19276C13__8S19276C1[] = {
  0,
  ABISELECT(1784,1056),
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__9S19276C149S19276C13__8S19276C1[] = {
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-616,-392),
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__9S19276C149S19276C13__8S19276C1[] = {
  0,
  ABISELECT(1480,872),
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__A1__9S19276C149S19276C13__8S19276C1[] = {
  0,
  ABISELECT(1784,1056),
  (VTBL_ENTRY)&(_ZTI9S19276C14[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__9S19276C13__8S19276C1[] = {
  0,
  ABISELECT(1432,848),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN9S19276C103v10Ev();
extern void _ZN9S19276C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C14__9S19276C13__8S19276C1[] = {
  ABISELECT(-1480,-872),
  ABISELECT(616,392),
  ABISELECT(-1784,-1056),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
  (VTBL_ENTRY)&_ZN9S19276C143v11Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__A1__9S19276C13__8S19276C1[] = {
  0,
  0,
  0,
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__A1__9S19276C13__8S19276C1[] = {
  0,
  ABISELECT(1736,1032),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19276C13D1Ev,_ZTv0_n48_N9S19276C13D1Ev)();
extern void ABISELECT(_ZThn712_N9S19276C13D1Ev,_ZThn440_N9S19276C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19276C13D0Ev,_ZTv0_n48_N9S19276C13D0Ev)();
extern void ABISELECT(_ZThn712_N9S19276C13D0Ev,_ZThn440_N9S19276C13D0Ev)() __attribute__((weak));
extern void _ZN9S19276C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C15__9S19276C13__8S19276C1[] = {
  0,
  ABISELECT(-712,-440),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2448,-1472),
  ABISELECT(976,596),
  ABISELECT(-2144,-1288),
  ABISELECT(-2144,-1288),
  ABISELECT(-712,-440),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19276C13D1Ev,_ZTv0_n48_N9S19276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19276C13D0Ev,_ZTv0_n48_N9S19276C13D0Ev),
  (VTBL_ENTRY)&_ZN9S19276C153v12Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C10__A1__9S19276C13__8S19276C1[] = {
  0,
  ABISELECT(-3424,-2068),
  ABISELECT(-1688,-1036),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C92v7Ev();
extern void _ZN8S19276C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C9__9S19276C13__8S19276C1[] = {
  0,
  0,
  ABISELECT(920,540),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19276C92v8Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN9S19276C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C11__9S19276C13__8S19276C1[] = {
  0,
  0,
  ABISELECT(-2128,-1300),
  (VTBL_ENTRY)&(_ZTI9S19276C13[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19276C113v13Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C4__A2__8S19276C1[] = {
  ABISELECT(-2096,-1264),
  ABISELECT(-2096,-1264),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C4__A2__8S19276C1[] = {
  0,
  ABISELECT(2096,1264),
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
extern void _ZN9S19276C15D1Ev();
extern void _ZN9S19276C15D0Ev();
extern void _ZN9S19276C153v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C15__8S19276C1[] = {
  ABISELECT(-2448,-1472),
  ABISELECT(976,596),
  ABISELECT(-2144,-1288),
  ABISELECT(-2144,-1288),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C15[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
  (VTBL_ENTRY)&_ZN9S19276C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19276C15D0Ev,
  (VTBL_ENTRY)&_ZN9S19276C153v12Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
extern void _ZN8S19276C72v5Ev();
extern void _ZN8S19276C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C79S19276C15__A1__8S19276C1[] = {
  ABISELECT(-2144,-1288),
  ABISELECT(-2144,-1288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C7[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19276C72v6Ev,
};
extern void _ZN8S19276C32v1Ev();
extern void _ZN8S19276C42v2Ev();
extern void _ZN8S19276C42v3Ev();
extern void _ZN8S19276C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C48S19276C79S19276C15__A3__8S19276C1[] = {
  ABISELECT(-2144,-1288),
  ABISELECT(-2144,-1288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19276C42v4Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C48S19276C79S19276C15__A3__8S19276C1[] = {
  0,
  ABISELECT(2144,1288),
  (VTBL_ENTRY)&(_ZTI8S19276C4[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__8S19276C79S19276C15__A1__8S19276C1[] = {
  0,
  ABISELECT(2144,1288),
  (VTBL_ENTRY)&(_ZTI8S19276C7[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C3__9S19276C15__8S19276C1[] = {
  0,
  ABISELECT(2144,1288),
  (VTBL_ENTRY)&(_ZTI9S19276C15[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C10__9S19276C15__8S19276C1[] = {
  0,
  ABISELECT(-3424,-2068),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI9S19276C15[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__A1__9S19276C15__8S19276C1[] = {
  0,
  ABISELECT(2448,1472),
  (VTBL_ENTRY)&(_ZTI9S19276C15[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
extern void _ZN9S19276C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19276C10__A1__8S19276C1[] = {
  ABISELECT(-3424,-2068),
  0,
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN9S19276C103v10Ev,
};
extern void _ZN8S19276C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19276C38S19276C2__9S19276C10__A1__8S19276C1[] = {
  0,
  ABISELECT(3424,2068),
  (VTBL_ENTRY)&(_ZTI9S19276C10[0]),
  (VTBL_ENTRY)&_ZN8S19276C32v1Ev,
};
static  VTT_ENTRY vtt_S19276C1[] = {
  {&(_ZTV8S19276C1[14]),  14,156},
  {&(_tg__ZTV9S19276C16__8S19276C1[10]),  10,17},
  {&(_tg__ZTV9S19276C139S19276C16__A1__8S19276C1[10]),  10,17},
  {&(_tg__ZTV8S19276C49S19276C139S19276C16__A4__8S19276C1[4]),  4,8},
  {&(_tg__ZTV8S19276C3__8S19276C49S19276C139S19276C16__A4__8S19276C1[3]),  3,4},
  {&(_tg__ZTV9S19276C149S19276C139S19276C16__A1__8S19276C1[5]),  5,7},
  {&(_tg__ZTV9S19276C109S19276C149S19276C139S19276C16__A2__8S19276C1[3]),  3,4},
  {&(_tg__ZTV8S19276C38S19276C2__9S19276C109S19276C149S19276C139S19276C16__A2__8S19276C1[3]),  3,4},
  {&(_tg__ZTV8S19276C4__9S19276C149S19276C139S19276C16__A1__8S19276C1[7]),  7,11},
  {&(_tg__ZTV8S19276C3__9S19276C149S19276C139S19276C16__A1__8S19276C1[3]),  3,4},
  {&(_tg__ZTV8S19276C38S19276C2__A1__9S19276C149S19276C139S19276C16__A1__8S19276C1[3]),  3,4},
  {&(_tg__ZTV8S19276C3__9S19276C139S19276C16__A1__8S19276C1[3]),  3,4},
  {&(_tg__ZTV9S19276C14__9S19276C139S19276C16__A1__8S19276C1[5]),  5,7},
  {&(_tg__ZTV8S19276C4__A1__9S19276C139S19276C16__A1__8S19276C1[7]),  7,11},
  {&(_tg__ZTV8S19276C38S19276C2__A1__9S19276C139S19276C16__A1__8S19276C1[3]),  3,4},
  {&(_tg__ZTV9S19276C15__9S19276C139S19276C16__A1__8S19276C1[13]),  13,22},
  {&(_tg__ZTV9S19276C10__A1__9S19276C139S19276C16__A1__8S19276C1[4]),  4,5},
  {&(_tg__ZTV8S19276C9__9S19276C139S19276C16__A1__8S19276C1[4]),  4,6},
  {&(_tg__ZTV9S19276C11__9S19276C139S19276C16__A1__8S19276C1[4]),  4,6},
  {&(_tg__ZTV8S19276C3__9S19276C16__8S19276C1[3]),  3,4},
  {&(_tg__ZTV9S19276C149S19276C13__9S19276C16__8S19276C1[5]),  5,7},
  {&(_tg__ZTV8S19276C4__A1__9S19276C16__8S19276C1[7]),  7,11},
  {&(_tg__ZTV8S19276C38S19276C2__A1__9S19276C16__8S19276C1[3]),  3,4},
  {&(_tg__ZTV9S19276C15__9S19276C16__8S19276C1[13]),  13,22},
  {&(_tg__ZTV9S19276C10__A1__9S19276C16__8S19276C1[4]),  4,5},
  {&(_tg__ZTV8S19276C9__9S19276C16__8S19276C1[4]),  4,6},
  {&(_tg__ZTV9S19276C11__9S19276C16__8S19276C1[4]),  4,6},
  {&(_ZTV8S19276C1[31]),  31,156},
  {&(_ZTV8S19276C1[48]),  48,156},
  {&(_ZTV8S19276C1[62]),  62,156},
  {&(_ZTV8S19276C1[48]),  48,156},
  {&(_ZTV8S19276C1[72]),  72,156},
  {&(_ZTV8S19276C1[78]),  78,156},
  {&(_ZTV8S19276C1[98]),  98,156},
  {&(_ZTV8S19276C1[110]),  110,156},
  {&(_ZTV8S19276C1[119]),  119,156},
  {&(_ZTV8S19276C1[136]),  136,156},
  {&(_ZTV8S19276C1[149]),  149,156},
  {&(_ZTV8S19276C1[154]),  154,156},
  {&(_ZTV8S19276C1[26]),  26,156},
  {&(_tg__ZTV8S19276C6__8S19276C1[13]),  13,18},
  {&(_tg__ZTV8S19276C7__8S19276C6__8S19276C1[9]),  9,15},
  {&(_tg__ZTV8S19276C6__8S19276C1[13]),  13,18},
  {&(_tg__ZTV8S19276C9__8S19276C6__8S19276C1[4]),  4,6},
  {&(_tg__ZTV9S19276C12__8S19276C6__8S19276C1[4]),  4,7},
  {&(_tg__ZTV9S19276C13__8S19276C6__8S19276C1[17]),  17,24},
  {&(_tg__ZTV9S19276C149S19276C13__8S19276C6__8S19276C1[5]),  5,7},
  {&(_tg__ZTV8S19276C4__A2__8S19276C6__8S19276C1[7]),  7,11},
  {&(_tg__ZTV8S19276C38S19276C2__A1__8S19276C6__8S19276C1[3]),  3,4},
  {&(_tg__ZTV9S19276C15__8S19276C6__8S19276C1[13]),  13,22},
  {&(_tg__ZTV9S19276C10__A1__8S19276C6__8S19276C1[4]),  4,5},
  {&(_tg__ZTV9S19276C11__8S19276C6__8S19276C1[4]),  4,6},
  {&(_tg__ZTV8S19276C7__8S19276C1[4]),  4,10},
  {&(_tg__ZTV8S19276C48S19276C7__8S19276C1[4]),  4,8},
  {&(_tg__ZTV8S19276C3__8S19276C48S19276C7__8S19276C1[3]),  3,4},
  {&(_tg__ZTV8S19276C3__8S19276C7__8S19276C1[3]),  3,4},
  {&(_tg__ZTV9S19276C13__8S19276C1[10]),  10,17},
  {&(_tg__ZTV8S19276C49S19276C13__A1__8S19276C1[4]),  4,8},
  {&(_tg__ZTV8S19276C3__8S19276C49S19276C13__A1__8S19276C1[3]),  3,4},
  {&(_tg__ZTV9S19276C149S19276C13__8S19276C1[5]),  5,7},
  {&(_tg__ZTV9S19276C109S19276C149S19276C13__8S19276C1[3]),  3,4},
  {&(_tg__ZTV8S19276C38S19276C2__9S19276C109S19276C149S19276C13__8S19276C1[3]),  3,4},
  {&(_tg__ZTV8S19276C4__9S19276C149S19276C13__8S19276C1[7]),  7,11},
  {&(_tg__ZTV8S19276C3__9S19276C149S19276C13__8S19276C1[3]),  3,4},
  {&(_tg__ZTV8S19276C38S19276C2__A1__9S19276C149S19276C13__8S19276C1[3]),  3,4},
  {&(_tg__ZTV8S19276C3__9S19276C13__8S19276C1[3]),  3,4},
  {&(_tg__ZTV9S19276C14__9S19276C13__8S19276C1[5]),  5,7},
  {&(_tg__ZTV8S19276C4__A1__9S19276C13__8S19276C1[7]),  7,11},
  {&(_tg__ZTV8S19276C38S19276C2__A1__9S19276C13__8S19276C1[3]),  3,4},
  {&(_tg__ZTV9S19276C15__9S19276C13__8S19276C1[13]),  13,22},
  {&(_tg__ZTV9S19276C10__A1__9S19276C13__8S19276C1[4]),  4,5},
  {&(_tg__ZTV8S19276C9__9S19276C13__8S19276C1[4]),  4,6},
  {&(_tg__ZTV9S19276C11__9S19276C13__8S19276C1[4]),  4,6},
  {&(_tg__ZTV8S19276C4__A2__8S19276C1[4]),  4,8},
  {&(_tg__ZTV8S19276C3__8S19276C4__A2__8S19276C1[3]),  3,4},
  {&(_tg__ZTV9S19276C15__8S19276C1[6]),  6,15},
  {&(_tg__ZTV8S19276C79S19276C15__A1__8S19276C1[4]),  4,10},
  {&(_tg__ZTV8S19276C48S19276C79S19276C15__A3__8S19276C1[4]),  4,8},
  {&(_tg__ZTV8S19276C3__8S19276C48S19276C79S19276C15__A3__8S19276C1[3]),  3,4},
  {&(_tg__ZTV8S19276C3__8S19276C79S19276C15__A1__8S19276C1[3]),  3,4},
  {&(_tg__ZTV8S19276C3__9S19276C15__8S19276C1[3]),  3,4},
  {&(_tg__ZTV9S19276C10__9S19276C15__8S19276C1[4]),  4,5},
  {&(_tg__ZTV8S19276C38S19276C2__A1__9S19276C15__8S19276C1[3]),  3,4},
  {&(_tg__ZTV9S19276C10__A1__8S19276C1[3]),  3,4},
  {&(_tg__ZTV8S19276C38S19276C2__9S19276C10__A1__8S19276C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19276C1[];
extern  VTBL_ENTRY _ZTV8S19276C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19276C1[];
static VTBL_ENTRY alt_thunk_names52[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19276C6D0Ev,_ZTv0_n48_N8S19276C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2144_N8S19276C6D0Ev,_ZThn1288_N8S19276C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19276C6D1Ev,_ZTv0_n48_N8S19276C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2144_N8S19276C6D1Ev,_ZThn1288_N8S19276C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19276C6D0Ev,_ZTv0_n60_N8S19276C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S19276C6D0Ev,_ZThn848_N8S19276C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19276C6D1Ev,_ZTv0_n60_N8S19276C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S19276C6D1Ev,_ZThn848_N8S19276C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19276C6D0Ev,_ZTv0_n12_N8S19276C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1416_N8S19276C6D0Ev,_ZThn840_N8S19276C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19276C6D1Ev,_ZTv0_n12_N8S19276C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1416_N8S19276C6D1Ev,_ZThn840_N8S19276C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19276C16D0Ev,_ZTv0_n48_N9S19276C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8176_N9S19276C16D0Ev,_ZThn5000_N9S19276C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19276C16D1Ev,_ZTv0_n48_N9S19276C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8176_N9S19276C16D1Ev,_ZThn5000_N9S19276C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19276C13D0Ev,_ZTv0_n48_N9S19276C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn712_N9S19276C13D0Ev,_ZThn440_N9S19276C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8176_N9S19276C13D0Ev,_ZThn5000_N9S19276C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19276C13D1Ev,_ZTv0_n48_N9S19276C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn712_N9S19276C13D1Ev,_ZThn440_N9S19276C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8176_N9S19276C13D1Ev,_ZThn5000_N9S19276C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19276C1D0Ev,_ZTv0_n48_N8S19276C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8176_N8S19276C1D0Ev,_ZThn5000_N8S19276C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19276C1D1Ev,_ZTv0_n48_N8S19276C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8176_N8S19276C1D1Ev,_ZThn5000_N8S19276C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19276C1D0Ev,_ZTv0_n60_N8S19276C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7464_N8S19276C1D0Ev,_ZThn4560_N8S19276C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19276C1D1Ev,_ZTv0_n60_N8S19276C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7464_N8S19276C1D1Ev,_ZThn4560_N8S19276C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19276C1D0Ev,_ZTv0_n12_N8S19276C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7448_N8S19276C1D0Ev,_ZThn4552_N8S19276C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19276C1D1Ev,_ZTv0_n12_N8S19276C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7448_N8S19276C1D1Ev,_ZThn4552_N8S19276C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S19276C1D0Ev,_ZTv0_n64_N8S19276C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6032_N8S19276C1D0Ev,_ZThn3712_N8S19276C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S19276C1D1Ev,_ZTv0_n64_N8S19276C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6032_N8S19276C1D1Ev,_ZThn3712_N8S19276C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19276C1 = {  "S19276C1", // class name
  bases_S19276C1, 25,
  &(vtc_S19276C1[0]), // expected_vtbl_contents
  &(vtt_S19276C1[0]), // expected_vtt_contents
  ABISELECT(9936,6072), // object size
  NSPAIRA(_ZTI8S19276C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19276C1),156, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19276C1),85, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names52,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6658C2  {
  long double s6658c2f0;
  ::S19560C15 s6658c2f1[6];
  char s6658c2f2;
  void *s6658c2f3;
  void *s6658c2f4;
  int s6658c2f5[6];
  int s6658c2f6;
  void *s6658c2f7;
  __tsi64 s6658c2f8;
  void *s6658c2f9;
  int s6658c2f10;
  void *s6658c2f11;
  void *s6658c2f12;
  virtual void  v3(); // _ZN7S6658C22v3Ev
  ~S6658C2(); // tgen
  S6658C2(); // tgen
};
//SIG(-1 S6658C2) C1{ v1 FD FC2{ VBC3{ BC4{ m Fc Fi FL FU5{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC6{ VBC4 v2 v3 Fp Fp Fi Fi FU7{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU7 Fp FL:3 FC4 FL FU7} v4 Fp FD FC4[7] FD FU5 Fs FL FL} VBC8{ VBC4 VBC6 vd v5 FL FL FL FL Fi FU7 Fc[10] Fi} Fi Fp Fi FU7}[6] Fc Fp Fp Fi[6] Fi Fp FL Fp Fi Fp Fp}


void  S6658C2 ::v3(){vfunc_called(this, "_ZN7S6658C22v3Ev");}
S6658C2 ::~S6658C2(){ note_dtor("S6658C2", this);} // tgen
S6658C2 ::S6658C2(){ note_ctor("S6658C2", this);} // tgen

static void Test_S6658C2()
{
  extern Class_Descriptor cd_S6658C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(874,1930)];
    init_test(&cd_S6658C2, buf);
    S6658C2 *dp, &lv = *(dp=new (buf) S6658C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13968,7716), "sizeof(S6658C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6658C2)");
    check_field_offset(lv, s6658c2f0, ABISELECT(16,4), "S6658C2.s6658c2f0");
    check_field_offset(lv, s6658c2f1, ABISELECT(32,16), "S6658C2.s6658c2f1");
    check_field_offset(lv, s6658c2f2, ABISELECT(13856,7648), "S6658C2.s6658c2f2");
    check_field_offset(lv, s6658c2f3, ABISELECT(13864,7652), "S6658C2.s6658c2f3");
    check_field_offset(lv, s6658c2f4, ABISELECT(13872,7656), "S6658C2.s6658c2f4");
    check_field_offset(lv, s6658c2f5, ABISELECT(13880,7660), "S6658C2.s6658c2f5");
    check_field_offset(lv, s6658c2f6, ABISELECT(13904,7684), "S6658C2.s6658c2f6");
    check_field_offset(lv, s6658c2f7, ABISELECT(13912,7688), "S6658C2.s6658c2f7");
    check_field_offset(lv, s6658c2f8, ABISELECT(13920,7692), "S6658C2.s6658c2f8");
    check_field_offset(lv, s6658c2f9, ABISELECT(13928,7700), "S6658C2.s6658c2f9");
    check_field_offset(lv, s6658c2f10, ABISELECT(13936,7704), "S6658C2.s6658c2f10");
    check_field_offset(lv, s6658c2f11, ABISELECT(13944,7708), "S6658C2.s6658c2f11");
    check_field_offset(lv, s6658c2f12, ABISELECT(13952,7712), "S6658C2.s6658c2f12");
    test_class_info(&lv, &cd_S6658C2);
    dp->~S6658C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6658C2(Test_S6658C2, "S6658C2", ABISELECT(13968,7716));

#else // __cplusplus

extern void _ZN7S6658C2C1Ev();
extern void _ZN7S6658C2D1Ev();
Name_Map name_map_S6658C2[] = {
  NSPAIR(_ZN7S6658C2C1Ev),
  NSPAIR(_ZN7S6658C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6658C2[];
extern void _ZN7S6658C22v3Ev();
static  VTBL_ENTRY vtc_S6658C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6658C2[0]),
  (VTBL_ENTRY)&_ZN7S6658C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6658C2[];
extern  VTBL_ENTRY _ZTV7S6658C2[];
Class_Descriptor cd_S6658C2 = {  "S6658C2", // class name
  0,0,//no base classes
  &(vtc_S6658C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13968,7716), // object size
  NSPAIRA(_ZTI7S6658C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6658C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6658C7  : virtual S2489C3 {
  void *s6658c7f0;
  void *s6658c7f1;
  int s6658c7f2;
  int s6658c7f3;
  ::S2489C7 s6658c7f4;
  __tsi64  :0;
  long double s6658c7f6;
  ::S2489C7 s6658c7f7;
  void *s6658c7f8;
  __tsi64 s6658c7f9:3;
  ::S2489C3 s6658c7f10;
  __tsi64 s6658c7f11;
  ::S2489C7 s6658c7f12;
  virtual void  v4(); // _ZN7S6658C72v4Ev
  virtual void  v5(); // _ZN7S6658C72v5Ev
  ~S6658C7(); // tgen
  S6658C7(); // tgen
};
//SIG(-1 S6658C7) C1{ VBC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} v1 v2 Fp Fp Fi Fi FU4{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU4 Fp FL:3 FC2 FL FU4}


void  S6658C7 ::v4(){vfunc_called(this, "_ZN7S6658C72v4Ev");}
void  S6658C7 ::v5(){vfunc_called(this, "_ZN7S6658C72v5Ev");}
S6658C7 ::~S6658C7(){ note_dtor("S6658C7", this);} // tgen
S6658C7 ::S6658C7(){ note_ctor("S6658C7", this);} // tgen

static void Test_S6658C7()
{
  extern Class_Descriptor cd_S6658C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,70)];
    init_test(&cd_S6658C7, buf);
    S6658C7 *dp, &lv = *(dp=new (buf) S6658C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,276), "sizeof(S6658C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6658C7)");
    check_base_class_offset(lv, (S2489C3*), ABISELECT(384,204), "S6658C7");
    check_field_offset(lv, s6658c7f0, ABISELECT(8,4), "S6658C7.s6658c7f0");
    check_field_offset(lv, s6658c7f1, ABISELECT(16,8), "S6658C7.s6658c7f1");
    check_field_offset(lv, s6658c7f2, ABISELECT(24,12), "S6658C7.s6658c7f2");
    check_field_offset(lv, s6658c7f3, ABISELECT(28,16), "S6658C7.s6658c7f3");
    check_field_offset(lv, s6658c7f4, ABISELECT(32,20), "S6658C7.s6658c7f4");
    check_field_offset(lv, s6658c7f6, ABISELECT(96,48), "S6658C7.s6658c7f6");
    check_field_offset(lv, s6658c7f7, ABISELECT(112,60), "S6658C7.s6658c7f7");
    check_field_offset(lv, s6658c7f8, ABISELECT(168,88), "S6658C7.s6658c7f8");
    set_bf_and_test(lv, s6658c7f9, ABISELECT(176,92), 0, 3, 1, "S6658C7");
    set_bf_and_test(lv, s6658c7f9, ABISELECT(176,92), 0, 3, hide_sll(1LL<<2), "S6658C7");
    check_field_offset(lv, s6658c7f10, ABISELECT(192,96), "S6658C7.s6658c7f10");
    check_field_offset(lv, s6658c7f11, ABISELECT(320,168), "S6658C7.s6658c7f11");
    check_field_offset(lv, s6658c7f12, ABISELECT(328,176), "S6658C7.s6658c7f12");
    test_class_info(&lv, &cd_S6658C7);
    dp->~S6658C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6658C7(Test_S6658C7, "S6658C7", ABISELECT(512,276));

#else // __cplusplus

extern void _ZN7S6658C7C1Ev();
extern void _ZN7S6658C7D1Ev();
Name_Map name_map_S6658C7[] = {
  NSPAIR(_ZN7S6658C7C1Ev),
  NSPAIR(_ZN7S6658C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
static Base_Class bases_S6658C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(384,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6658C7[];
extern void _ZN7S6658C72v4Ev();
extern void _ZN7S6658C72v5Ev();
static  VTBL_ENTRY vtc_S6658C7[] = {
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S6658C7[0]),
  (VTBL_ENTRY)&_ZN7S6658C72v4Ev,
  (VTBL_ENTRY)&_ZN7S6658C72v5Ev,
};
extern VTBL_ENTRY _ZTV7S6658C7[];
static  VTT_ENTRY vtt_S6658C7[] = {
  {&(_ZTV7S6658C7[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S6658C7[];
extern  VTBL_ENTRY _ZTV7S6658C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6658C7[];
Class_Descriptor cd_S6658C7 = {  "S6658C7", // class name
  bases_S6658C7, 1,
  &(vtc_S6658C7[0]), // expected_vtbl_contents
  &(vtt_S6658C7[0]), // expected_vtt_contents
  ABISELECT(512,276), // object size
  NSPAIRA(_ZTI7S6658C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6658C7),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6658C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6658C4  : S2489C3 , S6658C7 {
  void *s6658c4f0;
  long double s6658c4f1;
  ::S2489C3 s6658c4f2[7];
  long double s6658c4f3;
  ::S2489C4 s6658c4f4;
  short s6658c4f5;
  __tsi64 s6658c4f6;
  __tsi64 s6658c4f7;
  virtual void  v6(); // _ZN7S6658C42v6Ev
  ~S6658C4(); // tgen
  S6658C4(); // tgen
};
//SIG(-1 S6658C4) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 FL FU5} v1 Fp FD FC2[7] FD FU3 Fs FL FL}


void  S6658C4 ::v6(){vfunc_called(this, "_ZN7S6658C42v6Ev");}
S6658C4 ::~S6658C4(){ note_dtor("S6658C4", this);} // tgen
S6658C4 ::S6658C4(){ note_ctor("S6658C4", this);} // tgen

static void Test_S6658C4()
{
  extern Class_Descriptor cd_S6658C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(107,236)];
    init_test(&cd_S6658C4, buf);
    S6658C4 *dp, &lv = *(dp=new (buf) S6658C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1696,940), "sizeof(S6658C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6658C4)");
    /*is_ambiguous_... S6658C4::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(384,204), "S6658C4");
    check_base_class_offset(lv, (S2489C3*)(S6658C7*), ABISELECT(1568,868), "S6658C4");
    check_base_class_offset(lv, (S6658C7*), 0, "S6658C4");
    check_field_offset(lv, s6658c4f0, ABISELECT(512,276), "S6658C4.s6658c4f0");
    check_field_offset(lv, s6658c4f1, ABISELECT(528,280), "S6658C4.s6658c4f1");
    check_field_offset(lv, s6658c4f2, ABISELECT(544,292), "S6658C4.s6658c4f2");
    check_field_offset(lv, s6658c4f3, ABISELECT(1440,796), "S6658C4.s6658c4f3");
    check_field_offset(lv, s6658c4f4, ABISELECT(1456,808), "S6658C4.s6658c4f4");
    check_field_offset(lv, s6658c4f5, ABISELECT(1536,848), "S6658C4.s6658c4f5");
    check_field_offset(lv, s6658c4f6, ABISELECT(1544,852), "S6658C4.s6658c4f6");
    check_field_offset(lv, s6658c4f7, ABISELECT(1552,860), "S6658C4.s6658c4f7");
    test_class_info(&lv, &cd_S6658C4);
    dp->~S6658C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6658C4(Test_S6658C4, "S6658C4", ABISELECT(1696,940));

#else // __cplusplus

extern void _ZN7S6658C4C1Ev();
extern void _ZN7S6658C4D1Ev();
Name_Map name_map_S6658C4[] = {
  NSPAIR(_ZN7S6658C4C1Ev),
  NSPAIR(_ZN7S6658C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S6658C7;
extern VTBL_ENTRY _ZTI7S6658C7[];
extern  VTBL_ENTRY _ZTV7S6658C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6658C7[];
static Base_Class bases_S6658C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(384,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(1568,868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6658C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6658C4[];
extern void _ZN7S6658C72v4Ev();
extern void _ZN7S6658C72v5Ev();
extern void _ZN7S6658C42v6Ev();
static  VTBL_ENTRY vtc_S6658C4[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI7S6658C4[0]),
  (VTBL_ENTRY)&_ZN7S6658C72v4Ev,
  (VTBL_ENTRY)&_ZN7S6658C72v5Ev,
  (VTBL_ENTRY)&_ZN7S6658C42v6Ev,
};
extern VTBL_ENTRY _ZTV7S6658C4[];
extern void _ZN7S6658C72v4Ev();
extern void _ZN7S6658C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6658C7__7S6658C4[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI7S6658C7[0]),
  (VTBL_ENTRY)&_ZN7S6658C72v4Ev,
  (VTBL_ENTRY)&_ZN7S6658C72v5Ev,
};
static  VTT_ENTRY vtt_S6658C4[] = {
  {&(_ZTV7S6658C4[3]),  3,6},
  {&(_tg__ZTV7S6658C7__7S6658C4[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S6658C4[];
extern  VTBL_ENTRY _ZTV7S6658C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6658C4[];
Class_Descriptor cd_S6658C4 = {  "S6658C4", // class name
  bases_S6658C4, 3,
  &(vtc_S6658C4[0]), // expected_vtbl_contents
  &(vtt_S6658C4[0]), // expected_vtt_contents
  ABISELECT(1696,940), // object size
  NSPAIRA(_ZTI7S6658C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6658C4),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6658C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6658C1  : S6658C2 {
  int s6658c1f0;
  __tsi64 s6658c1f1;
  int s6658c1f2;
  void *s6658c1f3;
  int s6658c1f4;
  ::S19560C16 s6658c1f5;
  ::S6658C4 s6658c1f6;
  virtual void  v1(); // _ZN7S6658C12v1Ev
  virtual void  v2(); // _ZN7S6658C12v2Ev
  ~S6658C1(); // tgen
  S6658C1(); // tgen
};
//SIG(1 S6658C1) C1{ BC2{ v3 FD FC3{ VBC4{ BC5{ m Fc Fi FL FU6{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC7{ VBC5 v4 v5 Fp Fp Fi Fi FU8{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU8 Fp FL:3 FC5 FL FU8} v6 Fp FD FC5[7] FD FU6 Fs FL FL} VBC9{ VBC5 VBC7 vd v7 FL FL FL FL Fi FU8 Fc[10] Fi} Fi Fp Fi FU8}[6] Fc Fp Fp Fi[6] Fi Fp FL Fp Fi Fp Fp} v1 v2 Fi FL Fi Fp Fi FC10{ VBC4 VBC7 VBC9 BC11{ BC12{ BC5 VBC7 VBC9 VBC4 vd v8 Fc Fi[7] Fl[5] FL FL FL FU13{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} vd v9 v10 Fp Fp Fp Fi FC14{} FL FL} VBC15{ v11 FD FC3[6] Fc Fp Fp Fi[6] Fi Fp FL Fp Fi Fp Fp} vd Fc Fs[3] FC16{ BC5 VBC17{ VBC5 v12 v13 Fp Fp Fi Fi FU8 FL:0 FD FU8 Fp FL:3 FC5 FL FU8} VBC18{ VBC5 VBC17 vd v14 FL FL FL FL Fi FU8 Fc[10] Fi} VBC19{ BC5 BC17 v15 Fp FD FC5[7] FD FU6 Fs FL FL} VBC20{ VBC18 BC21{ BC5 VBC17 VBC18 VBC19 vd v16 Fc Fi[7] Fl[5] FL FL FL FU13} BC5 BC17 vd v17 v18 v19 FU8 Fi Fl Fc Fp FC19 Fs} vd FL Fi Fp Fp FL}[10] FC4 FL FL:5 Fi Fp[6] FL[2] FL Fi} FC22{ BC5 BC23{ VBC5 v21 v22 Fp Fp Fi Fi FU8 FL:0 FD FU8 Fp FL:3 FC5 FL FU8} v20 Fp FD FC5[7] FD FU6 Fs FL FL}}


void  S6658C1 ::v1(){vfunc_called(this, "_ZN7S6658C12v1Ev");}
void  S6658C1 ::v2(){vfunc_called(this, "_ZN7S6658C12v2Ev");}
S6658C1 ::~S6658C1(){ note_dtor("S6658C1", this);} // tgen
S6658C1 ::S6658C1(){ note_ctor("S6658C1", this);} // tgen

static void Test_S6658C1()
{
  extern Class_Descriptor cd_S6658C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5256,11688)];
    init_test(&cd_S6658C1, buf);
    S6658C1 *dp, &lv = *(dp=new (buf) S6658C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(84080,46748), "sizeof(S6658C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6658C1)");
    check_base_class_offset(lv, (S6658C2*), 0, "S6658C1");
    check_field_offset(lv, s6658c1f0, ABISELECT(13960,7716), "S6658C1.s6658c1f0");
    check_field_offset(lv, s6658c1f1, ABISELECT(13968,7720), "S6658C1.s6658c1f1");
    check_field_offset(lv, s6658c1f2, ABISELECT(13976,7728), "S6658C1.s6658c1f2");
    check_field_offset(lv, s6658c1f3, ABISELECT(13984,7732), "S6658C1.s6658c1f3");
    check_field_offset(lv, s6658c1f4, ABISELECT(13992,7736), "S6658C1.s6658c1f4");
    check_field_offset(lv, s6658c1f5, ABISELECT(14000,7740), "S6658C1.s6658c1f5");
    check_field_offset(lv, s6658c1f6, ABISELECT(82384,45808), "S6658C1.s6658c1f6");
    test_class_info(&lv, &cd_S6658C1);
    dp->~S6658C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6658C1(Test_S6658C1, "S6658C1", ABISELECT(84080,46748));

#else // __cplusplus

extern void _ZN7S6658C1C1Ev();
extern void _ZN7S6658C1D1Ev();
Name_Map name_map_S6658C1[] = {
  NSPAIR(_ZN7S6658C1C1Ev),
  NSPAIR(_ZN7S6658C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6658C2;
extern VTBL_ENTRY _ZTI7S6658C2[];
extern  VTBL_ENTRY _ZTV7S6658C2[];
static Base_Class bases_S6658C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6658C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6658C1[];
extern void _ZN7S6658C22v3Ev();
extern void _ZN7S6658C12v1Ev();
extern void _ZN7S6658C12v2Ev();
static  VTBL_ENTRY vtc_S6658C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6658C1[0]),
  (VTBL_ENTRY)&_ZN7S6658C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6658C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6658C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6658C1[];
extern  VTBL_ENTRY _ZTV7S6658C1[];
Class_Descriptor cd_S6658C1 = {  "S6658C1", // class name
  bases_S6658C1, 1,
  &(vtc_S6658C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(84080,46748), // object size
  NSPAIRA(_ZTI7S6658C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6658C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6657C2  {
  long double s6657c2f0;
  ::S19559C15 s6657c2f1[6];
  char s6657c2f2;
  void *s6657c2f3;
  void *s6657c2f4;
  int s6657c2f5[6];
  int s6657c2f6;
  void *s6657c2f7;
  long s6657c2f8;
  void *s6657c2f9;
  int s6657c2f10;
  void *s6657c2f11;
  void *s6657c2f12;
  virtual void  v3(); // _ZN7S6657C22v3Ev
  ~S6657C2(); // tgen
  S6657C2(); // tgen
};
//SIG(-1 S6657C2) C1{ v1 FD FC2{ VBC3{ BC4{ m Fc Fi FL FU5{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC6{ VBC4 v2 v3 Fp Fp Fi Fi FU7{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU7 Fp FL:3 FC4 Fl FU7} v4 Fp FD FC4[7] FD FU5 Fs Fl Fl} VBC8{ VBC4 VBC6 vd v5 FL FL FL Fl Fi FU7 Fc[10] Fi} Fi Fp Fi FU7}[6] Fc Fp Fp Fi[6] Fi Fp Fl Fp Fi Fp Fp}


void  S6657C2 ::v3(){vfunc_called(this, "_ZN7S6657C22v3Ev");}
S6657C2 ::~S6657C2(){ note_dtor("S6657C2", this);} // tgen
S6657C2 ::S6657C2(){ note_ctor("S6657C2", this);} // tgen

static void Test_S6657C2()
{
  extern Class_Descriptor cd_S6657C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(874,1899)];
    init_test(&cd_S6657C2, buf);
    S6657C2 *dp, &lv = *(dp=new (buf) S6657C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13968,7592), "sizeof(S6657C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6657C2)");
    check_field_offset(lv, s6657c2f0, ABISELECT(16,4), "S6657C2.s6657c2f0");
    check_field_offset(lv, s6657c2f1, ABISELECT(32,16), "S6657C2.s6657c2f1");
    check_field_offset(lv, s6657c2f2, ABISELECT(13856,7528), "S6657C2.s6657c2f2");
    check_field_offset(lv, s6657c2f3, ABISELECT(13864,7532), "S6657C2.s6657c2f3");
    check_field_offset(lv, s6657c2f4, ABISELECT(13872,7536), "S6657C2.s6657c2f4");
    check_field_offset(lv, s6657c2f5, ABISELECT(13880,7540), "S6657C2.s6657c2f5");
    check_field_offset(lv, s6657c2f6, ABISELECT(13904,7564), "S6657C2.s6657c2f6");
    check_field_offset(lv, s6657c2f7, ABISELECT(13912,7568), "S6657C2.s6657c2f7");
    check_field_offset(lv, s6657c2f8, ABISELECT(13920,7572), "S6657C2.s6657c2f8");
    check_field_offset(lv, s6657c2f9, ABISELECT(13928,7576), "S6657C2.s6657c2f9");
    check_field_offset(lv, s6657c2f10, ABISELECT(13936,7580), "S6657C2.s6657c2f10");
    check_field_offset(lv, s6657c2f11, ABISELECT(13944,7584), "S6657C2.s6657c2f11");
    check_field_offset(lv, s6657c2f12, ABISELECT(13952,7588), "S6657C2.s6657c2f12");
    test_class_info(&lv, &cd_S6657C2);
    dp->~S6657C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6657C2(Test_S6657C2, "S6657C2", ABISELECT(13968,7592));

#else // __cplusplus

extern void _ZN7S6657C2C1Ev();
extern void _ZN7S6657C2D1Ev();
Name_Map name_map_S6657C2[] = {
  NSPAIR(_ZN7S6657C2C1Ev),
  NSPAIR(_ZN7S6657C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6657C2[];
extern void _ZN7S6657C22v3Ev();
static  VTBL_ENTRY vtc_S6657C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6657C2[0]),
  (VTBL_ENTRY)&_ZN7S6657C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6657C2[];
extern  VTBL_ENTRY _ZTV7S6657C2[];
Class_Descriptor cd_S6657C2 = {  "S6657C2", // class name
  0,0,//no base classes
  &(vtc_S6657C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13968,7592), // object size
  NSPAIRA(_ZTI7S6657C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6657C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6657C7  : virtual S2489C3 {
  void *s6657c7f0;
  void *s6657c7f1;
  int s6657c7f2;
  int s6657c7f3;
  ::S2489C7 s6657c7f4;
  __tsi64  :0;
  long double s6657c7f6;
  ::S2489C7 s6657c7f7;
  void *s6657c7f8;
  __tsi64 s6657c7f9:3;
  ::S2489C3 s6657c7f10;
  long s6657c7f11;
  ::S2489C7 s6657c7f12;
  virtual void  v4(); // _ZN7S6657C72v4Ev
  virtual void  v5(); // _ZN7S6657C72v5Ev
  ~S6657C7(); // tgen
  S6657C7(); // tgen
};
//SIG(-1 S6657C7) C1{ VBC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} v1 v2 Fp Fp Fi Fi FU4{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU4 Fp FL:3 FC2 Fl FU4}


void  S6657C7 ::v4(){vfunc_called(this, "_ZN7S6657C72v4Ev");}
void  S6657C7 ::v5(){vfunc_called(this, "_ZN7S6657C72v5Ev");}
S6657C7 ::~S6657C7(){ note_dtor("S6657C7", this);} // tgen
S6657C7 ::S6657C7(){ note_ctor("S6657C7", this);} // tgen

static void Test_S6657C7()
{
  extern Class_Descriptor cd_S6657C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,69)];
    init_test(&cd_S6657C7, buf);
    S6657C7 *dp, &lv = *(dp=new (buf) S6657C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,272), "sizeof(S6657C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6657C7)");
    check_base_class_offset(lv, (S2489C3*), ABISELECT(384,200), "S6657C7");
    check_field_offset(lv, s6657c7f0, ABISELECT(8,4), "S6657C7.s6657c7f0");
    check_field_offset(lv, s6657c7f1, ABISELECT(16,8), "S6657C7.s6657c7f1");
    check_field_offset(lv, s6657c7f2, ABISELECT(24,12), "S6657C7.s6657c7f2");
    check_field_offset(lv, s6657c7f3, ABISELECT(28,16), "S6657C7.s6657c7f3");
    check_field_offset(lv, s6657c7f4, ABISELECT(32,20), "S6657C7.s6657c7f4");
    check_field_offset(lv, s6657c7f6, ABISELECT(96,48), "S6657C7.s6657c7f6");
    check_field_offset(lv, s6657c7f7, ABISELECT(112,60), "S6657C7.s6657c7f7");
    check_field_offset(lv, s6657c7f8, ABISELECT(168,88), "S6657C7.s6657c7f8");
    set_bf_and_test(lv, s6657c7f9, ABISELECT(176,92), 0, 3, 1, "S6657C7");
    set_bf_and_test(lv, s6657c7f9, ABISELECT(176,92), 0, 3, hide_sll(1LL<<2), "S6657C7");
    check_field_offset(lv, s6657c7f10, ABISELECT(192,96), "S6657C7.s6657c7f10");
    check_field_offset(lv, s6657c7f11, ABISELECT(320,168), "S6657C7.s6657c7f11");
    check_field_offset(lv, s6657c7f12, ABISELECT(328,172), "S6657C7.s6657c7f12");
    test_class_info(&lv, &cd_S6657C7);
    dp->~S6657C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6657C7(Test_S6657C7, "S6657C7", ABISELECT(512,272));

#else // __cplusplus

extern void _ZN7S6657C7C1Ev();
extern void _ZN7S6657C7D1Ev();
Name_Map name_map_S6657C7[] = {
  NSPAIR(_ZN7S6657C7C1Ev),
  NSPAIR(_ZN7S6657C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
static Base_Class bases_S6657C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(384,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6657C7[];
extern void _ZN7S6657C72v4Ev();
extern void _ZN7S6657C72v5Ev();
static  VTBL_ENTRY vtc_S6657C7[] = {
  ABISELECT(384,200),
  0,
  (VTBL_ENTRY)&(_ZTI7S6657C7[0]),
  (VTBL_ENTRY)&_ZN7S6657C72v4Ev,
  (VTBL_ENTRY)&_ZN7S6657C72v5Ev,
};
extern VTBL_ENTRY _ZTV7S6657C7[];
static  VTT_ENTRY vtt_S6657C7[] = {
  {&(_ZTV7S6657C7[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S6657C7[];
extern  VTBL_ENTRY _ZTV7S6657C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6657C7[];
Class_Descriptor cd_S6657C7 = {  "S6657C7", // class name
  bases_S6657C7, 1,
  &(vtc_S6657C7[0]), // expected_vtbl_contents
  &(vtt_S6657C7[0]), // expected_vtt_contents
  ABISELECT(512,272), // object size
  NSPAIRA(_ZTI7S6657C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6657C7),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6657C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6657C4  : S2489C3 , S6657C7 {
  void *s6657c4f0;
  long double s6657c4f1;
  ::S2489C3 s6657c4f2[7];
  long double s6657c4f3;
  ::S2489C4 s6657c4f4;
  short s6657c4f5;
  long s6657c4f6;
  long s6657c4f7;
  virtual void  v6(); // _ZN7S6657C42v6Ev
  ~S6657C4(); // tgen
  S6657C4(); // tgen
};
//SIG(-1 S6657C4) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 Fl FU5} v1 Fp FD FC2[7] FD FU3 Fs Fl Fl}


void  S6657C4 ::v6(){vfunc_called(this, "_ZN7S6657C42v6Ev");}
S6657C4 ::~S6657C4(){ note_dtor("S6657C4", this);} // tgen
S6657C4 ::S6657C4(){ note_ctor("S6657C4", this);} // tgen

static void Test_S6657C4()
{
  extern Class_Descriptor cd_S6657C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(107,233)];
    init_test(&cd_S6657C4, buf);
    S6657C4 *dp, &lv = *(dp=new (buf) S6657C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1696,928), "sizeof(S6657C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6657C4)");
    /*is_ambiguous_... S6657C4::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(384,200), "S6657C4");
    check_base_class_offset(lv, (S2489C3*)(S6657C7*), ABISELECT(1568,856), "S6657C4");
    check_base_class_offset(lv, (S6657C7*), 0, "S6657C4");
    check_field_offset(lv, s6657c4f0, ABISELECT(512,272), "S6657C4.s6657c4f0");
    check_field_offset(lv, s6657c4f1, ABISELECT(528,276), "S6657C4.s6657c4f1");
    check_field_offset(lv, s6657c4f2, ABISELECT(544,288), "S6657C4.s6657c4f2");
    check_field_offset(lv, s6657c4f3, ABISELECT(1440,792), "S6657C4.s6657c4f3");
    check_field_offset(lv, s6657c4f4, ABISELECT(1456,804), "S6657C4.s6657c4f4");
    check_field_offset(lv, s6657c4f5, ABISELECT(1536,844), "S6657C4.s6657c4f5");
    check_field_offset(lv, s6657c4f6, ABISELECT(1544,848), "S6657C4.s6657c4f6");
    check_field_offset(lv, s6657c4f7, ABISELECT(1552,852), "S6657C4.s6657c4f7");
    test_class_info(&lv, &cd_S6657C4);
    dp->~S6657C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6657C4(Test_S6657C4, "S6657C4", ABISELECT(1696,928));

#else // __cplusplus

extern void _ZN7S6657C4C1Ev();
extern void _ZN7S6657C4D1Ev();
Name_Map name_map_S6657C4[] = {
  NSPAIR(_ZN7S6657C4C1Ev),
  NSPAIR(_ZN7S6657C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S6657C7;
extern VTBL_ENTRY _ZTI7S6657C7[];
extern  VTBL_ENTRY _ZTV7S6657C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6657C7[];
static Base_Class bases_S6657C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(384,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(1568,856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6657C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6657C4[];
extern void _ZN7S6657C72v4Ev();
extern void _ZN7S6657C72v5Ev();
extern void _ZN7S6657C42v6Ev();
static  VTBL_ENTRY vtc_S6657C4[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI7S6657C4[0]),
  (VTBL_ENTRY)&_ZN7S6657C72v4Ev,
  (VTBL_ENTRY)&_ZN7S6657C72v5Ev,
  (VTBL_ENTRY)&_ZN7S6657C42v6Ev,
};
extern VTBL_ENTRY _ZTV7S6657C4[];
extern void _ZN7S6657C72v4Ev();
extern void _ZN7S6657C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6657C7__7S6657C4[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI7S6657C7[0]),
  (VTBL_ENTRY)&_ZN7S6657C72v4Ev,
  (VTBL_ENTRY)&_ZN7S6657C72v5Ev,
};
static  VTT_ENTRY vtt_S6657C4[] = {
  {&(_ZTV7S6657C4[3]),  3,6},
  {&(_tg__ZTV7S6657C7__7S6657C4[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S6657C4[];
extern  VTBL_ENTRY _ZTV7S6657C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6657C4[];
Class_Descriptor cd_S6657C4 = {  "S6657C4", // class name
  bases_S6657C4, 3,
  &(vtc_S6657C4[0]), // expected_vtbl_contents
  &(vtt_S6657C4[0]), // expected_vtt_contents
  ABISELECT(1696,928), // object size
  NSPAIRA(_ZTI7S6657C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6657C4),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6657C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6657C1  : S6657C2 {
  int s6657c1f0;
  __tsi64 s6657c1f1;
  int s6657c1f2;
  void *s6657c1f3;
  int s6657c1f4;
  ::S19559C16 s6657c1f5;
  ::S6657C4 s6657c1f6;
  virtual void  v1(); // _ZN7S6657C12v1Ev
  virtual void  v2(); // _ZN7S6657C12v2Ev
  ~S6657C1(); // tgen
  S6657C1(); // tgen
};
//SIG(1 S6657C1) C1{ BC2{ v3 FD FC3{ VBC4{ BC5{ m Fc Fi FL FU6{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC7{ VBC5 v4 v5 Fp Fp Fi Fi FU8{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU8 Fp FL:3 FC5 Fl FU8} v6 Fp FD FC5[7] FD FU6 Fs Fl Fl} VBC9{ VBC5 VBC7 vd v7 FL FL FL Fl Fi FU8 Fc[10] Fi} Fi Fp Fi FU8}[6] Fc Fp Fp Fi[6] Fi Fp Fl Fp Fi Fp Fp} v1 v2 Fi FL Fi Fp Fi FC10{ VBC4 VBC7 VBC9 BC11{ BC12{ BC5 VBC7 VBC9 VBC4 vd v8 Fc Fi[7] Fl[5] Fl FL FL FU13{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} vd v9 v10 Fp Fp Fp Fi FC14{} Fl Fl} VBC15{ v11 FD FC3[6] Fc Fp Fp Fi[6] Fi Fp Fl Fp Fi Fp Fp} vd Fc Fs[3] FC16{ BC5 VBC17{ VBC5 v12 v13 Fp Fp Fi Fi FU8 FL:0 FD FU8 Fp FL:3 FC5 Fl FU8} VBC18{ VBC5 VBC17 vd v14 FL FL FL Fl Fi FU8 Fc[10] Fi} VBC19{ BC5 BC17 v15 Fp FD FC5[7] FD FU6 Fs Fl Fl} VBC20{ VBC18 BC21{ BC5 VBC17 VBC18 VBC19 vd v16 Fc Fi[7] Fl[5] Fl FL FL FU13} BC5 BC17 vd v17 v18 v19 FU8 Fi Fl Fc Fp FC19 Fs} vd FL Fi Fp Fp Fl}[10] FC4 FL FL:5 Fi Fp[6] Fl[2] FL Fi} FC22{ BC5 BC23{ VBC5 v21 v22 Fp Fp Fi Fi FU8 FL:0 FD FU8 Fp FL:3 FC5 Fl FU8} v20 Fp FD FC5[7] FD FU6 Fs Fl Fl}}


void  S6657C1 ::v1(){vfunc_called(this, "_ZN7S6657C12v1Ev");}
void  S6657C1 ::v2(){vfunc_called(this, "_ZN7S6657C12v2Ev");}
S6657C1 ::~S6657C1(){ note_dtor("S6657C1", this);} // tgen
S6657C1 ::S6657C1(){ note_ctor("S6657C1", this);} // tgen

static void Test_S6657C1()
{
  extern Class_Descriptor cd_S6657C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5256,11445)];
    init_test(&cd_S6657C1, buf);
    S6657C1 *dp, &lv = *(dp=new (buf) S6657C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(84080,45776), "sizeof(S6657C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6657C1)");
    check_base_class_offset(lv, (S6657C2*), 0, "S6657C1");
    check_field_offset(lv, s6657c1f0, ABISELECT(13960,7592), "S6657C1.s6657c1f0");
    check_field_offset(lv, s6657c1f1, ABISELECT(13968,7596), "S6657C1.s6657c1f1");
    check_field_offset(lv, s6657c1f2, ABISELECT(13976,7604), "S6657C1.s6657c1f2");
    check_field_offset(lv, s6657c1f3, ABISELECT(13984,7608), "S6657C1.s6657c1f3");
    check_field_offset(lv, s6657c1f4, ABISELECT(13992,7612), "S6657C1.s6657c1f4");
    check_field_offset(lv, s6657c1f5, ABISELECT(14000,7616), "S6657C1.s6657c1f5");
    check_field_offset(lv, s6657c1f6, ABISELECT(82384,44848), "S6657C1.s6657c1f6");
    test_class_info(&lv, &cd_S6657C1);
    dp->~S6657C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6657C1(Test_S6657C1, "S6657C1", ABISELECT(84080,45776));

#else // __cplusplus

extern void _ZN7S6657C1C1Ev();
extern void _ZN7S6657C1D1Ev();
Name_Map name_map_S6657C1[] = {
  NSPAIR(_ZN7S6657C1C1Ev),
  NSPAIR(_ZN7S6657C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6657C2;
extern VTBL_ENTRY _ZTI7S6657C2[];
extern  VTBL_ENTRY _ZTV7S6657C2[];
static Base_Class bases_S6657C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6657C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6657C1[];
extern void _ZN7S6657C22v3Ev();
extern void _ZN7S6657C12v1Ev();
extern void _ZN7S6657C12v2Ev();
static  VTBL_ENTRY vtc_S6657C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6657C1[0]),
  (VTBL_ENTRY)&_ZN7S6657C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6657C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6657C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6657C1[];
extern  VTBL_ENTRY _ZTV7S6657C1[];
Class_Descriptor cd_S6657C1 = {  "S6657C1", // class name
  bases_S6657C1, 1,
  &(vtc_S6657C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(84080,45776), // object size
  NSPAIRA(_ZTI7S6657C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6657C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7717C6  : virtual S2489C3 {
  void *s7717c6f0;
  void *s7717c6f1;
  int s7717c6f2;
  int s7717c6f3;
  ::S2489C7 s7717c6f4;
  __tsi64  :0;
  long double s7717c6f6;
  ::S2489C7 s7717c6f7;
  void *s7717c6f8;
  __tsi64 s7717c6f9:3;
  ::S2489C3 s7717c6f10;
  __tsi64 s7717c6f11;
  ::S2489C7 s7717c6f12;
  virtual void  v1(); // _ZN7S7717C62v1Ev
  virtual void  v2(); // _ZN7S7717C62v2Ev
  ~S7717C6(); // tgen
  S7717C6(); // tgen
};
//SIG(-1 S7717C6) C1{ VBC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} v1 v2 Fp Fp Fi Fi FU4{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU4 Fp FL:3 FC2 FL FU4}


void  S7717C6 ::v1(){vfunc_called(this, "_ZN7S7717C62v1Ev");}
void  S7717C6 ::v2(){vfunc_called(this, "_ZN7S7717C62v2Ev");}
S7717C6 ::~S7717C6(){ note_dtor("S7717C6", this);} // tgen
S7717C6 ::S7717C6(){ note_ctor("S7717C6", this);} // tgen

static void Test_S7717C6()
{
  extern Class_Descriptor cd_S7717C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,70)];
    init_test(&cd_S7717C6, buf);
    S7717C6 *dp, &lv = *(dp=new (buf) S7717C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,276), "sizeof(S7717C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7717C6)");
    check_base_class_offset(lv, (S2489C3*), ABISELECT(384,204), "S7717C6");
    check_field_offset(lv, s7717c6f0, ABISELECT(8,4), "S7717C6.s7717c6f0");
    check_field_offset(lv, s7717c6f1, ABISELECT(16,8), "S7717C6.s7717c6f1");
    check_field_offset(lv, s7717c6f2, ABISELECT(24,12), "S7717C6.s7717c6f2");
    check_field_offset(lv, s7717c6f3, ABISELECT(28,16), "S7717C6.s7717c6f3");
    check_field_offset(lv, s7717c6f4, ABISELECT(32,20), "S7717C6.s7717c6f4");
    check_field_offset(lv, s7717c6f6, ABISELECT(96,48), "S7717C6.s7717c6f6");
    check_field_offset(lv, s7717c6f7, ABISELECT(112,60), "S7717C6.s7717c6f7");
    check_field_offset(lv, s7717c6f8, ABISELECT(168,88), "S7717C6.s7717c6f8");
    set_bf_and_test(lv, s7717c6f9, ABISELECT(176,92), 0, 3, 1, "S7717C6");
    set_bf_and_test(lv, s7717c6f9, ABISELECT(176,92), 0, 3, hide_sll(1LL<<2), "S7717C6");
    check_field_offset(lv, s7717c6f10, ABISELECT(192,96), "S7717C6.s7717c6f10");
    check_field_offset(lv, s7717c6f11, ABISELECT(320,168), "S7717C6.s7717c6f11");
    check_field_offset(lv, s7717c6f12, ABISELECT(328,176), "S7717C6.s7717c6f12");
    test_class_info(&lv, &cd_S7717C6);
    dp->~S7717C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7717C6(Test_S7717C6, "S7717C6", ABISELECT(512,276));

#else // __cplusplus

extern void _ZN7S7717C6C1Ev();
extern void _ZN7S7717C6D1Ev();
Name_Map name_map_S7717C6[] = {
  NSPAIR(_ZN7S7717C6C1Ev),
  NSPAIR(_ZN7S7717C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
static Base_Class bases_S7717C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(384,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7717C6[];
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY vtc_S7717C6[] = {
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C6[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S7717C6[];
static  VTT_ENTRY vtt_S7717C6[] = {
  {&(_ZTV7S7717C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7717C6[];
extern  VTBL_ENTRY _ZTV7S7717C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C6[];
Class_Descriptor cd_S7717C6 = {  "S7717C6", // class name
  bases_S7717C6, 1,
  &(vtc_S7717C6[0]), // expected_vtbl_contents
  &(vtt_S7717C6[0]), // expected_vtt_contents
  ABISELECT(512,276), // object size
  NSPAIRA(_ZTI7S7717C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7717C6),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7717C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7717C3  : virtual S2489C3 , virtual S7717C6 {
  __tsi64 s7717c3f0;
  __tsi64 s7717c3f1;
  __tsi64 s7717c3f2;
  __tsi64 s7717c3f3;
  int s7717c3f4;
  ::S2489C7 s7717c3f5;
  char s7717c3f6[10];
  int s7717c3f7;
  virtual  ~S7717C3(); // _ZN7S7717C3D2Ev
  virtual void  v3(); // _ZN7S7717C32v3Ev
  S7717C3(); // tgen
};
//SIG(-1 S7717C3) C1{ VBC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 FL FU5} vd v1 FL FL FL FL Fi FU5 Fc[10] Fi}


 S7717C3 ::~S7717C3(){ note_dtor("S7717C3", this);}
void  S7717C3 ::v3(){vfunc_called(this, "_ZN7S7717C32v3Ev");}
S7717C3 ::S7717C3(){ note_ctor("S7717C3", this);} // tgen

static void Test_S7717C3()
{
  extern Class_Descriptor cd_S7717C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,91)];
    init_test(&cd_S7717C3, buf);
    S7717C3 *dp, &lv = *(dp=new (buf) S7717C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,360), "sizeof(S7717C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7717C3)");
    check_base_class_offset(lv, (S2489C3*), ABISELECT(128,84), "S7717C3");
    check_base_class_offset(lv, (S2489C3*)(S7717C6*), ABISELECT(128,84), "S7717C3");
    check_base_class_offset(lv, (S7717C6*), ABISELECT(256,156), "S7717C3");
    check_field_offset(lv, s7717c3f0, ABISELECT(8,4), "S7717C3.s7717c3f0");
    check_field_offset(lv, s7717c3f1, ABISELECT(16,12), "S7717C3.s7717c3f1");
    check_field_offset(lv, s7717c3f2, ABISELECT(24,20), "S7717C3.s7717c3f2");
    check_field_offset(lv, s7717c3f3, ABISELECT(32,28), "S7717C3.s7717c3f3");
    check_field_offset(lv, s7717c3f4, ABISELECT(40,36), "S7717C3.s7717c3f4");
    check_field_offset(lv, s7717c3f5, ABISELECT(48,40), "S7717C3.s7717c3f5");
    check_field_offset(lv, s7717c3f6, ABISELECT(104,68), "S7717C3.s7717c3f6");
    check_field_offset(lv, s7717c3f7, ABISELECT(116,80), "S7717C3.s7717c3f7");
    test_class_info(&lv, &cd_S7717C3);
    dp->~S7717C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7717C3(Test_S7717C3, "S7717C3", ABISELECT(640,360));

#else // __cplusplus

extern void _ZN7S7717C3C1Ev();
extern void _ZN7S7717C3D2Ev();
Name_Map name_map_S7717C3[] = {
  NSPAIR(_ZN7S7717C3C1Ev),
  NSPAIR(_ZN7S7717C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C6;
extern VTBL_ENTRY _ZTI7S7717C6[];
extern  VTBL_ENTRY _ZTV7S7717C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C6[];
static Base_Class bases_S7717C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(128,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7717C6,    ABISELECT(256,156), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7717C3[];
extern void _ZN7S7717C3D1Ev();
extern void _ZN7S7717C3D0Ev();
extern void _ZN7S7717C32v3Ev();
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY vtc_S7717C3[] = {
  ABISELECT(256,156),
  ABISELECT(128,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C3[0]),
  (VTBL_ENTRY)&_ZN7S7717C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7717C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-256,-156),
  (VTBL_ENTRY)&(_ZTI7S7717C3[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S7717C3[];
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__7S7717C3[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C6[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
static  VTT_ENTRY vtt_S7717C3[] = {
  {&(_ZTV7S7717C3[4]),  4,14},
  {&(_ZTV7S7717C3[12]),  12,14},
  {&(_tg__ZTV7S7717C6__7S7717C3[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7717C3[];
extern  VTBL_ENTRY _ZTV7S7717C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C3[];
Class_Descriptor cd_S7717C3 = {  "S7717C3", // class name
  bases_S7717C3, 2,
  &(vtc_S7717C3[0]), // expected_vtbl_contents
  &(vtt_S7717C3[0]), // expected_vtt_contents
  ABISELECT(640,360), // object size
  NSPAIRA(_ZTI7S7717C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7717C3),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7717C3),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7717C9  : S2489C3 , S7717C6 {
  void *s7717c9f0;
  long double s7717c9f1;
  ::S2489C3 s7717c9f2[7];
  long double s7717c9f3;
  ::S2489C4 s7717c9f4;
  short s7717c9f5;
  __tsi64 s7717c9f6;
  __tsi64 s7717c9f7;
  virtual void  v4(); // _ZN7S7717C92v4Ev
  ~S7717C9(); // tgen
  S7717C9(); // tgen
};
//SIG(-1 S7717C9) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 FL FU5} v1 Fp FD FC2[7] FD FU3 Fs FL FL}


void  S7717C9 ::v4(){vfunc_called(this, "_ZN7S7717C92v4Ev");}
S7717C9 ::~S7717C9(){ note_dtor("S7717C9", this);} // tgen
S7717C9 ::S7717C9(){ note_ctor("S7717C9", this);} // tgen

static void Test_S7717C9()
{
  extern Class_Descriptor cd_S7717C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(107,236)];
    init_test(&cd_S7717C9, buf);
    S7717C9 *dp, &lv = *(dp=new (buf) S7717C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1696,940), "sizeof(S7717C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7717C9)");
    /*is_ambiguous_... S7717C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(384,204), "S7717C9");
    check_base_class_offset(lv, (S2489C3*)(S7717C6*), ABISELECT(1568,868), "S7717C9");
    check_base_class_offset(lv, (S7717C6*), 0, "S7717C9");
    check_field_offset(lv, s7717c9f0, ABISELECT(512,276), "S7717C9.s7717c9f0");
    check_field_offset(lv, s7717c9f1, ABISELECT(528,280), "S7717C9.s7717c9f1");
    check_field_offset(lv, s7717c9f2, ABISELECT(544,292), "S7717C9.s7717c9f2");
    check_field_offset(lv, s7717c9f3, ABISELECT(1440,796), "S7717C9.s7717c9f3");
    check_field_offset(lv, s7717c9f4, ABISELECT(1456,808), "S7717C9.s7717c9f4");
    check_field_offset(lv, s7717c9f5, ABISELECT(1536,848), "S7717C9.s7717c9f5");
    check_field_offset(lv, s7717c9f6, ABISELECT(1544,852), "S7717C9.s7717c9f6");
    check_field_offset(lv, s7717c9f7, ABISELECT(1552,860), "S7717C9.s7717c9f7");
    test_class_info(&lv, &cd_S7717C9);
    dp->~S7717C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7717C9(Test_S7717C9, "S7717C9", ABISELECT(1696,940));

#else // __cplusplus

extern void _ZN7S7717C9C1Ev();
extern void _ZN7S7717C9D1Ev();
Name_Map name_map_S7717C9[] = {
  NSPAIR(_ZN7S7717C9C1Ev),
  NSPAIR(_ZN7S7717C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C6;
extern VTBL_ENTRY _ZTI7S7717C6[];
extern  VTBL_ENTRY _ZTV7S7717C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C6[];
static Base_Class bases_S7717C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(384,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(1568,868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7717C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7717C9[];
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY vtc_S7717C9[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C9[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern VTBL_ENTRY _ZTV7S7717C9[];
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__7S7717C9[] = {
  ABISELECT(1568,868),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C6[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
static  VTT_ENTRY vtt_S7717C9[] = {
  {&(_ZTV7S7717C9[3]),  3,6},
  {&(_tg__ZTV7S7717C6__7S7717C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7717C9[];
extern  VTBL_ENTRY _ZTV7S7717C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C9[];
Class_Descriptor cd_S7717C9 = {  "S7717C9", // class name
  bases_S7717C9, 3,
  &(vtc_S7717C9[0]), // expected_vtbl_contents
  &(vtt_S7717C9[0]), // expected_vtt_contents
  ABISELECT(1696,940), // object size
  NSPAIRA(_ZTI7S7717C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7717C9),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7717C9),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7717C8  : S2489C3 , virtual S7717C6 , virtual S7717C3 , virtual S7717C9 {
  char s7717c8f0;
  int s7717c8f1[7];
  long s7717c8f2[5];
  __tsi64 s7717c8f3;
  __tsi64 s7717c8f4;
  __tsi64 s7717c8f5;
  ::S2489C11 s7717c8f6;
  virtual  ~S7717C8(); // _ZN7S7717C8D2Ev
  virtual void  v5(); // _ZN7S7717C82v5Ev
  S7717C8(); // tgen
};
//SIG(-1 S7717C8) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 FL FU5} VBC6{ VBC2 VBC4 vd v4 FL FL FL FL Fi FU5 Fc[10] Fi} VBC7{ BC2 BC4 v5 Fp FD FC2[7] FD FU3 Fs FL FL} vd v1 Fc Fi[7] Fl[5] FL FL FL FU8{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}}


 S7717C8 ::~S7717C8(){ note_dtor("S7717C8", this);}
void  S7717C8 ::v5(){vfunc_called(this, "_ZN7S7717C82v5Ev");}
S7717C8 ::S7717C8(){ note_ctor("S7717C8", this);} // tgen

static void Test_S7717C8()
{
  extern Class_Descriptor cd_S7717C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(157,356)];
    init_test(&cd_S7717C8, buf);
    S7717C8 *dp, &lv = *(dp=new (buf) S7717C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2496,1420), "sizeof(S7717C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7717C8)");
    /*is_ambiguous_... S7717C8::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(16,4), "S7717C8");
    /*is_ambiguous_... S7717C8::S7717C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C6*), ABISELECT(672,396), "S7717C8");
    check_base_class_offset(lv, (S2489C3*)(S7717C3*), ABISELECT(672,396), "S7717C8");
    check_base_class_offset(lv, (S2489C3*)(S7717C6*)(S7717C9*), ABISELECT(672,396), "S7717C8");
    /*is_ambiguous_... S7717C8::S7717C6 */ AMB_check_base_class_offset(lv, (S7717C6*), ABISELECT(288,192), "S7717C8");
    check_base_class_offset(lv, (S7717C6*)(S7717C3*), ABISELECT(288,192), "S7717C8");
    check_base_class_offset(lv, (S7717C3*), ABISELECT(800,468), "S7717C8");
    /*is_ambiguous_... S7717C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C9*), ABISELECT(1312,756), "S7717C8");
    check_base_class_offset(lv, (S7717C6*)(S7717C9*), ABISELECT(928,552), "S7717C8");
    check_base_class_offset(lv, (S7717C9*), ABISELECT(928,552), "S7717C8");
    check_field_offset(lv, s7717c8f0, ABISELECT(144,76), "S7717C8.s7717c8f0");
    check_field_offset(lv, s7717c8f1, ABISELECT(148,80), "S7717C8.s7717c8f1");
    check_field_offset(lv, s7717c8f2, ABISELECT(176,108), "S7717C8.s7717c8f2");
    check_field_offset(lv, s7717c8f3, ABISELECT(216,128), "S7717C8.s7717c8f3");
    check_field_offset(lv, s7717c8f4, ABISELECT(224,136), "S7717C8.s7717c8f4");
    check_field_offset(lv, s7717c8f5, ABISELECT(232,144), "S7717C8.s7717c8f5");
    check_field_offset(lv, s7717c8f6, ABISELECT(240,152), "S7717C8.s7717c8f6");
    test_class_info(&lv, &cd_S7717C8);
    dp->~S7717C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7717C8(Test_S7717C8, "S7717C8", ABISELECT(2496,1420));

#else // __cplusplus

extern void _ZN7S7717C8C1Ev();
extern void _ZN7S7717C8D2Ev();
Name_Map name_map_S7717C8[] = {
  NSPAIR(_ZN7S7717C8C1Ev),
  NSPAIR(_ZN7S7717C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C6;
extern VTBL_ENTRY _ZTI7S7717C6[];
extern  VTBL_ENTRY _ZTV7S7717C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C6[];
extern Class_Descriptor cd_S7717C3;
extern VTBL_ENTRY _ZTI7S7717C3[];
extern  VTBL_ENTRY _ZTV7S7717C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C6;
extern VTBL_ENTRY _ZTI7S7717C6[];
extern  VTBL_ENTRY _ZTV7S7717C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C6[];
extern Class_Descriptor cd_S7717C9;
extern VTBL_ENTRY _ZTI7S7717C9[];
extern  VTBL_ENTRY _ZTV7S7717C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C9[];
static Base_Class bases_S7717C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(672,396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7717C6,    ABISELECT(288,192), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7717C3,    ABISELECT(800,468), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(1312,756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7717C6,    ABISELECT(928,552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7717C9,    ABISELECT(928,552), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7717C8[];
extern void _ZN7S7717C8D1Ev();
extern void _ZN7S7717C8D0Ev();
extern void _ZN7S7717C82v5Ev();
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S7717C8D1Ev,_ZTv0_n20_N7S7717C8D1Ev)();
extern void ABISELECT(_ZThn800_N7S7717C8D1Ev,_ZThn468_N7S7717C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7717C8D0Ev,_ZTv0_n20_N7S7717C8D0Ev)();
extern void ABISELECT(_ZThn800_N7S7717C8D0Ev,_ZThn468_N7S7717C8D0Ev)() __attribute__((weak));
extern void _ZN7S7717C32v3Ev();
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY vtc_S7717C8[] = {
  ABISELECT(928,552),
  ABISELECT(800,468),
  ABISELECT(672,396),
  ABISELECT(288,192),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7717C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C82v5Ev,
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  0,
  ABISELECT(-800,-468),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-800,-468),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C8D1Ev,_ZTv0_n20_N7S7717C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C8D0Ev,_ZTv0_n20_N7S7717C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-928,-552),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern VTBL_ENTRY _ZTV7S7717C8[];
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__7S7717C8[] = {
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C6[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN7S7717C3D1Ev();
extern void _ZN7S7717C3D0Ev();
extern void _ZN7S7717C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C3__7S7717C8[] = {
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C3[0]),
  (VTBL_ENTRY)&_ZN7S7717C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7717C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__7S7717C3__7S7717C8[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(512,276),
  (VTBL_ENTRY)&(_ZTI7S7717C3[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C9__7S7717C8[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C9[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C67S7717C9__A1__7S7717C8[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C6[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
static  VTT_ENTRY vtt_S7717C8[] = {
  {&(_ZTV7S7717C8[6]),  6,34},
  {&(_ZTV7S7717C8[14]),  14,34},
  {&(_ZTV7S7717C8[22]),  22,34},
  {&(_ZTV7S7717C8[31]),  31,34},
  {&(_tg__ZTV7S7717C6__7S7717C8[3]),  3,5},
  {&(_tg__ZTV7S7717C3__7S7717C8[4]),  4,7},
  {&(_tg__ZTV7S7717C6__7S7717C3__7S7717C8[5]),  5,7},
  {&(_tg__ZTV7S7717C9__7S7717C8[3]),  3,6},
  {&(_tg__ZTV7S7717C67S7717C9__A1__7S7717C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7717C8[];
extern  VTBL_ENTRY _ZTV7S7717C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C8[];
static VTBL_ENTRY alt_thunk_names53[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7717C8D0Ev,_ZTv0_n20_N7S7717C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N7S7717C8D0Ev,_ZThn468_N7S7717C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7717C8D1Ev,_ZTv0_n20_N7S7717C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N7S7717C8D1Ev,_ZThn468_N7S7717C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7717C8 = {  "S7717C8", // class name
  bases_S7717C8, 7,
  &(vtc_S7717C8[0]), // expected_vtbl_contents
  &(vtt_S7717C8[0]), // expected_vtt_contents
  ABISELECT(2496,1420), // object size
  NSPAIRA(_ZTI7S7717C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7717C8),34, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7717C8),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names53,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7717C2  : virtual S7717C3 , S7717C8 , S2489C3 , S7717C6 {
  ::S2489C7 s7717c2f0;
  int s7717c2f1;
  long s7717c2f2;
  char s7717c2f3;
  void *s7717c2f4;
  ::S7717C9 s7717c2f5;
  short s7717c2f6;
  virtual  ~S7717C2(); // _ZN7S7717C2D2Ev
  virtual void  v6(); // _ZN7S7717C22v6Ev
  virtual void  v7(); // _ZN7S7717C22v7Ev
  virtual void  v8(); // _ZN7S7717C22v8Ev
  S7717C2(); // tgen
};
//SIG(-1 S7717C2) C1{ VBC2{ VBC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC5{ VBC3 v4 v5 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 FL FU6} vd v6 FL FL FL FL Fi FU6 Fc[10] Fi} BC7{ BC3 VBC5 VBC2 VBC8{ BC3 BC5 v7 Fp FD FC3[7] FD FU4 Fs FL FL} vd v8 Fc Fi[7] Fl[5] FL FL FL FU9{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} BC3 BC5 vd v1 v2 v3 FU6 Fi Fl Fc Fp FC8 Fs}


 S7717C2 ::~S7717C2(){ note_dtor("S7717C2", this);}
void  S7717C2 ::v6(){vfunc_called(this, "_ZN7S7717C22v6Ev");}
void  S7717C2 ::v7(){vfunc_called(this, "_ZN7S7717C22v7Ev");}
void  S7717C2 ::v8(){vfunc_called(this, "_ZN7S7717C22v8Ev");}
S7717C2 ::S7717C2(){ note_ctor("S7717C2", this);} // tgen

static void Test_S7717C2()
{
  extern Class_Descriptor cd_S7717C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(301,672)];
    init_test(&cd_S7717C2, buf);
    S7717C2 *dp, &lv = *(dp=new (buf) S7717C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4800,2684), "sizeof(S7717C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7717C2)");
    check_base_class_offset(lv, (S2489C3*)(S7717C3*), ABISELECT(2720,1540), "S7717C2");
    /*is_ambiguous_... S7717C2::S7717C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C6*), ABISELECT(2720,1540), "S7717C2");
    check_base_class_offset(lv, (S2489C3*)(S7717C6*)(S7717C9*), ABISELECT(2720,1540), "S7717C2");
    /*is_ambiguous_... S7717C2::S7717C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C6*), ABISELECT(2720,1540), "S7717C2");
    check_base_class_offset(lv, (S7717C6*)(S7717C3*), ABISELECT(2848,1612), "S7717C2");
    /*is_ambiguous_... S7717C8::S7717C6 */ AMB_check_base_class_offset(lv, (S7717C6*)(S7717C8*), ABISELECT(2848,1612), "S7717C2");
    check_base_class_offset(lv, (S7717C3*), ABISELECT(2600,1456), "S7717C2");
    check_base_class_offset(lv, (S7717C3*)(S7717C8*), ABISELECT(2600,1456), "S7717C2");
    /*is_ambiguous_... S7717C8::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C8*), ABISELECT(16,4), "S7717C2");
    /*is_ambiguous_... S7717C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C9*), ABISELECT(3616,2020), "S7717C2");
    check_base_class_offset(lv, (S7717C6*)(S7717C9*), ABISELECT(3232,1816), "S7717C2");
    check_base_class_offset(lv, (S7717C9*)(S7717C8*), ABISELECT(3232,1816), "S7717C2");
    check_base_class_offset(lv, (S7717C8*), 0, "S7717C2");
    /*is_ambiguous_... S7717C2::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(288,192), "S7717C2");
    /*is_ambiguous_... S7717C2::S7717C6 */ AMB_check_base_class_offset(lv, (S7717C6*), ABISELECT(416,264), "S7717C2");
    check_field_offset(lv, s7717c2f0, ABISELECT(800,468), "S7717C2.s7717c2f0");
    check_field_offset(lv, s7717c2f1, ABISELECT(856,496), "S7717C2.s7717c2f1");
    check_field_offset(lv, s7717c2f2, ABISELECT(864,500), "S7717C2.s7717c2f2");
    check_field_offset(lv, s7717c2f3, ABISELECT(872,504), "S7717C2.s7717c2f3");
    check_field_offset(lv, s7717c2f4, ABISELECT(880,508), "S7717C2.s7717c2f4");
    check_field_offset(lv, s7717c2f5, ABISELECT(896,512), "S7717C2.s7717c2f5");
    check_field_offset(lv, s7717c2f6, ABISELECT(2592,1452), "S7717C2.s7717c2f6");
    test_class_info(&lv, &cd_S7717C2);
    dp->~S7717C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7717C2(Test_S7717C2, "S7717C2", ABISELECT(4800,2684));

#else // __cplusplus

extern void _ZN7S7717C2C1Ev();
extern void _ZN7S7717C2D2Ev();
Name_Map name_map_S7717C2[] = {
  NSPAIR(_ZN7S7717C2C1Ev),
  NSPAIR(_ZN7S7717C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C6;
extern VTBL_ENTRY _ZTI7S7717C6[];
extern  VTBL_ENTRY _ZTV7S7717C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C6[];
extern Class_Descriptor cd_S7717C3;
extern VTBL_ENTRY _ZTI7S7717C3[];
extern  VTBL_ENTRY _ZTV7S7717C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C6;
extern VTBL_ENTRY _ZTI7S7717C6[];
extern  VTBL_ENTRY _ZTV7S7717C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C6[];
extern Class_Descriptor cd_S7717C9;
extern VTBL_ENTRY _ZTI7S7717C9[];
extern  VTBL_ENTRY _ZTV7S7717C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C9[];
extern Class_Descriptor cd_S7717C8;
extern VTBL_ENTRY _ZTI7S7717C8[];
extern  VTBL_ENTRY _ZTV7S7717C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C6;
extern VTBL_ENTRY _ZTI7S7717C6[];
extern  VTBL_ENTRY _ZTV7S7717C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C6[];
static Base_Class bases_S7717C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(2720,1540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7717C6,    ABISELECT(2848,1612), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7717C3,    ABISELECT(2600,1456), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(3616,2020), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7717C6,    ABISELECT(3232,1816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7717C9,    ABISELECT(3232,1816), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7717C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7717C6,    ABISELECT(416,264), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7717C2[];
extern void _ZN7S7717C2D1Ev();
extern void _ZN7S7717C2D0Ev();
extern void _ZN7S7717C82v5Ev();
extern void _ZN7S7717C22v6Ev();
extern void _ZN7S7717C22v7Ev();
extern void _ZN7S7717C22v8Ev();
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S7717C2D1Ev,_ZTv0_n20_N7S7717C2D1Ev)();
extern void ABISELECT(_ZThn2600_N7S7717C2D1Ev,_ZThn1456_N7S7717C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7717C2D0Ev,_ZTv0_n20_N7S7717C2D0Ev)();
extern void ABISELECT(_ZThn2600_N7S7717C2D0Ev,_ZThn1456_N7S7717C2D0Ev)() __attribute__((weak));
extern void _ZN7S7717C32v3Ev();
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY vtc_S7717C2[] = {
  ABISELECT(3232,1816),
  ABISELECT(2600,1456),
  ABISELECT(2720,1540),
  ABISELECT(2848,1612),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&_ZN7S7717C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7717C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v8Ev,
  ABISELECT(2304,1276),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  0,
  ABISELECT(-2600,-1456),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-2600,-1456),
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C2D1Ev,_ZTv0_n20_N7S7717C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C2D0Ev,_ZTv0_n20_N7S7717C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2848,-1612),
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-3232,-1816),
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern VTBL_ENTRY _ZTV7S7717C2[];
extern void _ZN7S7717C8D1Ev();
extern void _ZN7S7717C8D0Ev();
extern void _ZN7S7717C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C8__7S7717C2[] = {
  ABISELECT(3232,1816),
  ABISELECT(2600,1456),
  ABISELECT(2720,1540),
  ABISELECT(2848,1612),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7717C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C82v5Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__7S7717C8__7S7717C2[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2848,-1612),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7717C8D1Ev,_ZTv0_n20_N7S7717C8D1Ev)();
extern void ABISELECT(_ZThn2600_N7S7717C8D1Ev,_ZThn1456_N7S7717C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7717C8D0Ev,_ZTv0_n20_N7S7717C8D0Ev)();
extern void ABISELECT(_ZThn2600_N7S7717C8D0Ev,_ZThn1456_N7S7717C8D0Ev)() __attribute__((weak));
extern void _ZN7S7717C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C3__7S7717C8__7S7717C2[] = {
  0,
  ABISELECT(-2600,-1456),
  ABISELECT(248,156),
  ABISELECT(120,84),
  ABISELECT(-2600,-1456),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C8D1Ev,_ZTv0_n20_N7S7717C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C8D0Ev,_ZTv0_n20_N7S7717C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C9__7S7717C8__7S7717C2[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-3232,-1816),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__A__7S7717C2[] = {
  ABISELECT(2304,1276),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C6[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN7S7717C3D1Ev();
extern void _ZN7S7717C3D0Ev();
extern void _ZN7S7717C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C3__7S7717C2[] = {
  ABISELECT(248,156),
  ABISELECT(120,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C3[0]),
  (VTBL_ENTRY)&_ZN7S7717C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7717C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__7S7717C3__7S7717C2[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-248,-156),
  (VTBL_ENTRY)&(_ZTI7S7717C3[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__7S7717C2[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C6[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C9__7S7717C2[] = {
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C9[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C67S7717C9__A1__7S7717C2[] = {
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C6[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
static  VTT_ENTRY vtt_S7717C2[] = {
  {&(_ZTV7S7717C2[6]),  6,42},
  {&(_tg__ZTV7S7717C8__7S7717C2[6]),  6,9},
  {&(_tg__ZTV7S7717C6__7S7717C8__7S7717C2[5]),  5,7},
  {&(_tg__ZTV7S7717C3__7S7717C8__7S7717C2[6]),  6,9},
  {&(_tg__ZTV7S7717C9__7S7717C8__7S7717C2[6]),  6,9},
  {&(_tg__ZTV7S7717C6__A__7S7717C2[3]),  3,5},
  {&(_ZTV7S7717C2[23]),  23,42},
  {&(_ZTV7S7717C2[31]),  31,42},
  {&(_ZTV7S7717C2[39]),  39,42},
  {&(_ZTV7S7717C2[15]),  15,42},
  {&(_tg__ZTV7S7717C3__7S7717C2[4]),  4,7},
  {&(_tg__ZTV7S7717C6__7S7717C3__7S7717C2[5]),  5,7},
  {&(_tg__ZTV7S7717C6__7S7717C2[3]),  3,5},
  {&(_tg__ZTV7S7717C9__7S7717C2[3]),  3,6},
  {&(_tg__ZTV7S7717C67S7717C9__A1__7S7717C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7717C2[];
extern  VTBL_ENTRY _ZTV7S7717C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C2[];
static VTBL_ENTRY alt_thunk_names54[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7717C8D0Ev,_ZTv0_n20_N7S7717C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N7S7717C8D0Ev,_ZThn1456_N7S7717C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7717C8D1Ev,_ZTv0_n20_N7S7717C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N7S7717C8D1Ev,_ZThn1456_N7S7717C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7717C2D0Ev,_ZTv0_n20_N7S7717C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N7S7717C2D0Ev,_ZThn1456_N7S7717C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7717C2D1Ev,_ZTv0_n20_N7S7717C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N7S7717C2D1Ev,_ZThn1456_N7S7717C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7717C2 = {  "S7717C2", // class name
  bases_S7717C2, 10,
  &(vtc_S7717C2[0]), // expected_vtbl_contents
  &(vtt_S7717C2[0]), // expected_vtt_contents
  ABISELECT(4800,2684), // object size
  NSPAIRA(_ZTI7S7717C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7717C2),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7717C2),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names54,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7717C11  : S2489C3 , virtual S7717C6 , virtual S7717C3 , virtual S7717C9 , virtual S7717C2 {
  __tsi64 s7717c11f0;
  int s7717c11f1;
  void *s7717c11f2;
  void *s7717c11f3;
  __tsi64 s7717c11f4;
  virtual  ~S7717C11(); // _ZN8S7717C11D2Ev
  S7717C11(); // tgen
};
//SIG(-1 S7717C11) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ VBC2 v1 v2 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 FL FU5} VBC6{ VBC2 VBC4 vd v3 FL FL FL FL Fi FU5 Fc[10] Fi} VBC7{ BC2 BC4 v4 Fp FD FC2[7] FD FU3 Fs FL FL} VBC8{ VBC6 BC9{ BC2 VBC4 VBC6 VBC7 vd v5 Fc Fi[7] Fl[5] FL FL FL FU10{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} BC2 BC4 vd v6 v7 v8 FU5 Fi Fl Fc Fp FC7 Fs} vd FL Fi Fp Fp FL}


 S7717C11 ::~S7717C11(){ note_dtor("S7717C11", this);}
S7717C11 ::S7717C11(){ note_ctor("S7717C11", this);} // tgen

static void Test_S7717C11()
{
  extern Class_Descriptor cd_S7717C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(314,698)];
    init_test(&cd_S7717C11, buf);
    S7717C11 *dp, &lv = *(dp=new (buf) S7717C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5008,2788), "sizeof(S7717C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7717C11)");
    /*is_ambiguous_... S7717C11::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(16,4), "S7717C11");
    /*is_ambiguous_... S7717C11::S7717C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C6*), ABISELECT(576,308), "S7717C11");
    check_base_class_offset(lv, (S2489C3*)(S7717C3*), ABISELECT(576,308), "S7717C11");
    check_base_class_offset(lv, (S2489C3*)(S7717C6*)(S7717C9*), ABISELECT(576,308), "S7717C11");
    /*is_ambiguous_... S7717C2::S7717C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C6*)(S7717C2*), ABISELECT(576,308), "S7717C11");
    /*is_ambiguous_... S7717C11::S7717C6 */ AMB_check_base_class_offset(lv, (S7717C6*), ABISELECT(192,104), "S7717C11");
    check_base_class_offset(lv, (S7717C6*)(S7717C3*), ABISELECT(192,104), "S7717C11");
    /*is_ambiguous_... S7717C8::S7717C6 */ AMB_check_base_class_offset(lv, (S7717C6*)(S7717C8*)(S7717C2*), ABISELECT(192,104), "S7717C11");
    check_base_class_offset(lv, (S7717C3*), ABISELECT(704,380), "S7717C11");
    check_base_class_offset(lv, (S7717C3*)(S7717C2*), ABISELECT(704,380), "S7717C11");
    check_base_class_offset(lv, (S7717C3*)(S7717C8*)(S7717C2*), ABISELECT(704,380), "S7717C11");
    /*is_ambiguous_... S7717C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C9*), ABISELECT(1216,668), "S7717C11");
    check_base_class_offset(lv, (S7717C6*)(S7717C9*), ABISELECT(832,464), "S7717C11");
    check_base_class_offset(lv, (S7717C9*), ABISELECT(832,464), "S7717C11");
    check_base_class_offset(lv, (S7717C9*)(S7717C8*)(S7717C2*), ABISELECT(832,464), "S7717C11");
    /*is_ambiguous_... S7717C8::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C8*)(S7717C2*), ABISELECT(2416,1336), "S7717C11");
    check_base_class_offset(lv, (S7717C8*)(S7717C2*), ABISELECT(2400,1332), "S7717C11");
    /*is_ambiguous_... S7717C2::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C2*), ABISELECT(2688,1524), "S7717C11");
    /*is_ambiguous_... S7717C2::S7717C6 */ AMB_check_base_class_offset(lv, (S7717C6*)(S7717C2*), ABISELECT(2816,1596), "S7717C11");
    check_base_class_offset(lv, (S7717C2*), ABISELECT(2400,1332), "S7717C11");
    check_field_offset(lv, s7717c11f0, ABISELECT(144,76), "S7717C11.s7717c11f0");
    check_field_offset(lv, s7717c11f1, ABISELECT(152,84), "S7717C11.s7717c11f1");
    check_field_offset(lv, s7717c11f2, ABISELECT(160,88), "S7717C11.s7717c11f2");
    check_field_offset(lv, s7717c11f3, ABISELECT(168,92), "S7717C11.s7717c11f3");
    check_field_offset(lv, s7717c11f4, ABISELECT(176,96), "S7717C11.s7717c11f4");
    test_class_info(&lv, &cd_S7717C11);
    dp->~S7717C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7717C11(Test_S7717C11, "S7717C11", ABISELECT(5008,2788));

#else // __cplusplus

extern void _ZN8S7717C11C1Ev();
extern void _ZN8S7717C11D2Ev();
Name_Map name_map_S7717C11[] = {
  NSPAIR(_ZN8S7717C11C1Ev),
  NSPAIR(_ZN8S7717C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C6;
extern VTBL_ENTRY _ZTI7S7717C6[];
extern  VTBL_ENTRY _ZTV7S7717C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C6[];
extern Class_Descriptor cd_S7717C3;
extern VTBL_ENTRY _ZTI7S7717C3[];
extern  VTBL_ENTRY _ZTV7S7717C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C6;
extern VTBL_ENTRY _ZTI7S7717C6[];
extern  VTBL_ENTRY _ZTV7S7717C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C6[];
extern Class_Descriptor cd_S7717C9;
extern VTBL_ENTRY _ZTI7S7717C9[];
extern  VTBL_ENTRY _ZTV7S7717C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C9[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C8;
extern VTBL_ENTRY _ZTI7S7717C8[];
extern  VTBL_ENTRY _ZTV7S7717C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C6;
extern VTBL_ENTRY _ZTI7S7717C6[];
extern  VTBL_ENTRY _ZTV7S7717C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C6[];
extern Class_Descriptor cd_S7717C2;
extern VTBL_ENTRY _ZTI7S7717C2[];
extern  VTBL_ENTRY _ZTV7S7717C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C2[];
static Base_Class bases_S7717C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(576,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7717C6,    ABISELECT(192,104), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7717C3,    ABISELECT(704,380), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(1216,668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7717C6,    ABISELECT(832,464), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7717C9,    ABISELECT(832,464), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(2416,1336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7717C8,    ABISELECT(2400,1332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(2688,1524), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7717C6,    ABISELECT(2816,1596), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7717C2,    ABISELECT(2400,1332), //bcp->offset
    34, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7717C11[];
extern void _ZN8S7717C11D1Ev();
extern void _ZN8S7717C11D0Ev();
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S7717C11D1Ev,_ZTv0_n20_N8S7717C11D1Ev)();
extern void ABISELECT(_ZThn704_N8S7717C11D1Ev,_ZThn380_N8S7717C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7717C11D0Ev,_ZTv0_n20_N8S7717C11D0Ev)();
extern void ABISELECT(_ZThn704_N8S7717C11D0Ev,_ZThn380_N8S7717C11D0Ev)() __attribute__((weak));
extern void _ZN7S7717C32v3Ev();
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
extern void ABISELECT(_ZTv0_n56_N8S7717C11D1Ev,_ZTv0_n28_N8S7717C11D1Ev)();
extern void ABISELECT(_ZThn2400_N8S7717C11D1Ev,_ZThn1332_N8S7717C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7717C11D0Ev,_ZTv0_n28_N8S7717C11D0Ev)();
extern void ABISELECT(_ZThn2400_N8S7717C11D0Ev,_ZThn1332_N8S7717C11D0Ev)() __attribute__((weak));
extern void _ZN7S7717C82v5Ev();
extern void _ZN7S7717C22v6Ev();
extern void _ZN7S7717C22v7Ev();
extern void _ZN7S7717C22v8Ev();
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY vtc_S7717C11[] = {
  ABISELECT(2400,1332),
  ABISELECT(832,464),
  ABISELECT(704,380),
  ABISELECT(576,308),
  ABISELECT(192,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S7717C11[0]),
  (VTBL_ENTRY)&_ZN8S7717C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7717C11D0Ev,
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S7717C11[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  0,
  ABISELECT(-704,-380),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-704,-380),
  (VTBL_ENTRY)&(_ZTI8S7717C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7717C11D1Ev,_ZTv0_n20_N8S7717C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7717C11D0Ev,_ZTv0_n20_N8S7717C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-832,-464),
  (VTBL_ENTRY)&(_ZTI8S7717C11[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-2400,-1332),
  ABISELECT(-1568,-868),
  ABISELECT(-1696,-952),
  ABISELECT(-1824,-1024),
  ABISELECT(-2208,-1228),
  ABISELECT(-2400,-1332),
  (VTBL_ENTRY)&(_ZTI8S7717C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7717C11D1Ev,_ZTv0_n28_N8S7717C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7717C11D0Ev,_ZTv0_n28_N8S7717C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v8Ev,
  ABISELECT(-2240,-1288),
  ABISELECT(-2816,-1596),
  (VTBL_ENTRY)&(_ZTI8S7717C11[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S7717C11[];
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__8S7717C11[] = {
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C6[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN7S7717C3D1Ev();
extern void _ZN7S7717C3D0Ev();
extern void _ZN7S7717C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C3__8S7717C11[] = {
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C3[0]),
  (VTBL_ENTRY)&_ZN7S7717C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7717C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__7S7717C3__8S7717C11[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(512,276),
  (VTBL_ENTRY)&(_ZTI7S7717C3[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C9__8S7717C11[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C9[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C67S7717C9__A1__8S7717C11[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C6[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN7S7717C2D1Ev();
extern void _ZN7S7717C2D0Ev();
extern void _ZN7S7717C82v5Ev();
extern void _ZN7S7717C22v6Ev();
extern void _ZN7S7717C22v7Ev();
extern void _ZN7S7717C22v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C2__8S7717C11[] = {
  ABISELECT(-1568,-868),
  ABISELECT(-1696,-952),
  ABISELECT(-1824,-1024),
  ABISELECT(-2208,-1228),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&_ZN7S7717C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7717C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v8Ev,
};
extern void _ZN7S7717C8D1Ev();
extern void _ZN7S7717C8D0Ev();
extern void _ZN7S7717C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C87S7717C2__8S7717C11[] = {
  ABISELECT(-1568,-868),
  ABISELECT(-1696,-952),
  ABISELECT(-1824,-1024),
  ABISELECT(-2208,-1228),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7717C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C82v5Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__7S7717C87S7717C2__8S7717C11[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(2208,1228),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7717C8D1Ev,_ZTv0_n20_N7S7717C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7717C8D0Ev,_ZTv0_n20_N7S7717C8D0Ev)();
extern void _ZN7S7717C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C3__7S7717C87S7717C2__8S7717C11[] = {
  0,
  ABISELECT(1696,952),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(1696,952),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C8D1Ev,_ZTv0_n20_N7S7717C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C8D0Ev,_ZTv0_n20_N7S7717C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C9__7S7717C87S7717C2__8S7717C11[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(1568,868),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C67S7717C2__A2__8S7717C11[] = {
  ABISELECT(-2240,-1288),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C6[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7717C2D1Ev,_ZTv0_n20_N7S7717C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7717C2D0Ev,_ZTv0_n20_N7S7717C2D0Ev)();
extern void _ZN7S7717C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C3__7S7717C2__8S7717C11[] = {
  0,
  ABISELECT(1696,952),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(1696,952),
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C2D1Ev,_ZTv0_n20_N7S7717C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C2D0Ev,_ZTv0_n20_N7S7717C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__7S7717C2__8S7717C11[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(2208,1228),
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C9__7S7717C2__8S7717C11[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(1568,868),
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__A__7S7717C2__8S7717C11[] = {
  ABISELECT(-2240,-1288),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
static  VTT_ENTRY vtt_S7717C11[] = {
  {&(_ZTV8S7717C11[7]),  7,58},
  {&(_ZTV8S7717C11[14]),  14,58},
  {&(_ZTV8S7717C11[22]),  22,58},
  {&(_ZTV8S7717C11[31]),  31,58},
  {&(_ZTV8S7717C11[47]),  47,58},
  {&(_ZTV8S7717C11[56]),  56,58},
  {&(_tg__ZTV7S7717C6__8S7717C11[3]),  3,5},
  {&(_tg__ZTV7S7717C3__8S7717C11[4]),  4,7},
  {&(_tg__ZTV7S7717C6__7S7717C3__8S7717C11[5]),  5,7},
  {&(_tg__ZTV7S7717C9__8S7717C11[3]),  3,6},
  {&(_tg__ZTV7S7717C67S7717C9__A1__8S7717C11[3]),  3,5},
  {&(_tg__ZTV7S7717C2__8S7717C11[6]),  6,12},
  {&(_tg__ZTV7S7717C87S7717C2__8S7717C11[6]),  6,9},
  {&(_tg__ZTV7S7717C6__7S7717C87S7717C2__8S7717C11[5]),  5,7},
  {&(_tg__ZTV7S7717C3__7S7717C87S7717C2__8S7717C11[6]),  6,9},
  {&(_tg__ZTV7S7717C9__7S7717C87S7717C2__8S7717C11[6]),  6,9},
  {&(_tg__ZTV7S7717C67S7717C2__A2__8S7717C11[3]),  3,5},
  {&(_tg__ZTV7S7717C3__7S7717C2__8S7717C11[6]),  6,9},
  {&(_tg__ZTV7S7717C6__7S7717C2__8S7717C11[5]),  5,7},
  {&(_tg__ZTV7S7717C9__7S7717C2__8S7717C11[6]),  6,9},
  {&(_tg__ZTV7S7717C6__A__7S7717C2__8S7717C11[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7717C11[];
extern  VTBL_ENTRY _ZTV8S7717C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7717C11[];
static VTBL_ENTRY alt_thunk_names55[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7717C11D0Ev,_ZTv0_n28_N8S7717C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2400_N8S7717C11D0Ev,_ZThn1332_N8S7717C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7717C11D1Ev,_ZTv0_n28_N8S7717C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2400_N8S7717C11D1Ev,_ZThn1332_N8S7717C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7717C11D0Ev,_ZTv0_n20_N8S7717C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S7717C11D0Ev,_ZThn380_N8S7717C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7717C11D1Ev,_ZTv0_n20_N8S7717C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S7717C11D1Ev,_ZThn380_N8S7717C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7717C11 = {  "S7717C11", // class name
  bases_S7717C11, 12,
  &(vtc_S7717C11[0]), // expected_vtbl_contents
  &(vtt_S7717C11[0]), // expected_vtt_contents
  ABISELECT(5008,2788), // object size
  NSPAIRA(_ZTI8S7717C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7717C11),58, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7717C11),21, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names55,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7717C12  : S7717C8 {
  void *s7717c12f0;
  void *s7717c12f1;
  void *s7717c12f2;
  int s7717c12f3;
  ::S2489C12_nt s7717c12f4;
  __tsi64 s7717c12f5;
  __tsi64 s7717c12f6;
  virtual  ~S7717C12(); // _ZN8S7717C12D2Ev
  virtual void  v9(); // _ZN8S7717C122v9Ev
  virtual void  v10(); // _ZN8S7717C123v10Ev
  S7717C12(); // tgen
};
//SIG(-1 S7717C12) C1{ BC2{ BC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC5{ VBC3 v3 v4 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 FL FU6} VBC7{ VBC3 VBC5 vd v5 FL FL FL FL Fi FU6 Fc[10] Fi} VBC8{ BC3 BC5 v6 Fp FD FC3[7] FD FU4 Fs FL FL} vd v7 Fc Fi[7] Fl[5] FL FL FL FU9{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} vd v1 v2 Fp Fp Fp Fi FC10{} FL FL}


 S7717C12 ::~S7717C12(){ note_dtor("S7717C12", this);}
void  S7717C12 ::v9(){vfunc_called(this, "_ZN8S7717C122v9Ev");}
void  S7717C12 ::v10(){vfunc_called(this, "_ZN8S7717C123v10Ev");}
S7717C12 ::S7717C12(){ note_ctor("S7717C12", this);} // tgen

static void Test_S7717C12()
{
  extern Class_Descriptor cd_S7717C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(160,365)];
    init_test(&cd_S7717C12, buf);
    S7717C12 *dp, &lv = *(dp=new (buf) S7717C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2544,1456), "sizeof(S7717C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7717C12)");
    /*is_ambiguous_... S7717C8::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C8*), ABISELECT(16,4), "S7717C12");
    /*is_ambiguous_... S7717C12::S7717C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C6*), ABISELECT(720,432), "S7717C12");
    check_base_class_offset(lv, (S2489C3*)(S7717C3*), ABISELECT(720,432), "S7717C12");
    check_base_class_offset(lv, (S2489C3*)(S7717C6*)(S7717C9*), ABISELECT(720,432), "S7717C12");
    /*is_ambiguous_... S7717C8::S7717C6 */ AMB_check_base_class_offset(lv, (S7717C6*)(S7717C8*), ABISELECT(336,228), "S7717C12");
    check_base_class_offset(lv, (S7717C6*)(S7717C3*), ABISELECT(336,228), "S7717C12");
    check_base_class_offset(lv, (S7717C3*)(S7717C8*), ABISELECT(848,504), "S7717C12");
    /*is_ambiguous_... S7717C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C9*), ABISELECT(1360,792), "S7717C12");
    check_base_class_offset(lv, (S7717C6*)(S7717C9*), ABISELECT(976,588), "S7717C12");
    check_base_class_offset(lv, (S7717C9*)(S7717C8*), ABISELECT(976,588), "S7717C12");
    check_base_class_offset(lv, (S7717C8*), 0, "S7717C12");
    check_field_offset(lv, s7717c12f0, ABISELECT(280,192), "S7717C12.s7717c12f0");
    check_field_offset(lv, s7717c12f1, ABISELECT(288,196), "S7717C12.s7717c12f1");
    check_field_offset(lv, s7717c12f2, ABISELECT(296,200), "S7717C12.s7717c12f2");
    check_field_offset(lv, s7717c12f3, ABISELECT(304,204), "S7717C12.s7717c12f3");
    check_field_offset(lv, s7717c12f4, ABISELECT(308,208), "S7717C12.s7717c12f4");
    check_field_offset(lv, s7717c12f5, ABISELECT(312,212), "S7717C12.s7717c12f5");
    check_field_offset(lv, s7717c12f6, ABISELECT(320,220), "S7717C12.s7717c12f6");
    test_class_info(&lv, &cd_S7717C12);
    dp->~S7717C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7717C12(Test_S7717C12, "S7717C12", ABISELECT(2544,1456));

#else // __cplusplus

extern void _ZN8S7717C12C1Ev();
extern void _ZN8S7717C12D2Ev();
Name_Map name_map_S7717C12[] = {
  NSPAIR(_ZN8S7717C12C1Ev),
  NSPAIR(_ZN8S7717C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C6;
extern VTBL_ENTRY _ZTI7S7717C6[];
extern  VTBL_ENTRY _ZTV7S7717C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C6[];
extern Class_Descriptor cd_S7717C3;
extern VTBL_ENTRY _ZTI7S7717C3[];
extern  VTBL_ENTRY _ZTV7S7717C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C6;
extern VTBL_ENTRY _ZTI7S7717C6[];
extern  VTBL_ENTRY _ZTV7S7717C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C6[];
extern Class_Descriptor cd_S7717C9;
extern VTBL_ENTRY _ZTI7S7717C9[];
extern  VTBL_ENTRY _ZTV7S7717C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C9[];
extern Class_Descriptor cd_S7717C8;
extern VTBL_ENTRY _ZTI7S7717C8[];
extern  VTBL_ENTRY _ZTV7S7717C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C8[];
static Base_Class bases_S7717C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(720,432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7717C6,    ABISELECT(336,228), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7717C3,    ABISELECT(848,504), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(1360,792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7717C6,    ABISELECT(976,588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7717C9,    ABISELECT(976,588), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7717C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7717C12[];
extern void _ZN8S7717C12D1Ev();
extern void _ZN8S7717C12D0Ev();
extern void _ZN7S7717C82v5Ev();
extern void _ZN8S7717C122v9Ev();
extern void _ZN8S7717C123v10Ev();
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S7717C12D1Ev,_ZTv0_n20_N8S7717C12D1Ev)();
extern void ABISELECT(_ZThn848_N8S7717C12D1Ev,_ZThn504_N8S7717C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7717C12D0Ev,_ZTv0_n20_N8S7717C12D0Ev)();
extern void ABISELECT(_ZThn848_N8S7717C12D0Ev,_ZThn504_N8S7717C12D0Ev)() __attribute__((weak));
extern void _ZN7S7717C32v3Ev();
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY vtc_S7717C12[] = {
  ABISELECT(976,588),
  ABISELECT(848,504),
  ABISELECT(720,432),
  ABISELECT(336,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S7717C12[0]),
  (VTBL_ENTRY)&_ZN8S7717C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7717C12D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C82v5Ev,
  (VTBL_ENTRY)&_ZN8S7717C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7717C123v10Ev,
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-336,-228),
  (VTBL_ENTRY)&(_ZTI8S7717C12[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  0,
  ABISELECT(-848,-504),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-848,-504),
  (VTBL_ENTRY)&(_ZTI8S7717C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7717C12D1Ev,_ZTv0_n20_N8S7717C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7717C12D0Ev,_ZTv0_n20_N8S7717C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-976,-588),
  (VTBL_ENTRY)&(_ZTI8S7717C12[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern VTBL_ENTRY _ZTV8S7717C12[];
extern void _ZN7S7717C8D1Ev();
extern void _ZN7S7717C8D0Ev();
extern void _ZN7S7717C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C8__8S7717C12[] = {
  ABISELECT(976,588),
  ABISELECT(848,504),
  ABISELECT(720,432),
  ABISELECT(336,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7717C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C82v5Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__7S7717C8__8S7717C12[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(-336,-228),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7717C8D1Ev,_ZTv0_n20_N7S7717C8D1Ev)();
extern void ABISELECT(_ZThn848_N7S7717C8D1Ev,_ZThn504_N7S7717C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7717C8D0Ev,_ZTv0_n20_N7S7717C8D0Ev)();
extern void ABISELECT(_ZThn848_N7S7717C8D0Ev,_ZThn504_N7S7717C8D0Ev)() __attribute__((weak));
extern void _ZN7S7717C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C3__7S7717C8__8S7717C12[] = {
  0,
  ABISELECT(-848,-504),
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  ABISELECT(-848,-504),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C8D1Ev,_ZTv0_n20_N7S7717C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C8D0Ev,_ZTv0_n20_N7S7717C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C9__7S7717C8__8S7717C12[] = {
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-976,-588),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__8S7717C12[] = {
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C6[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN7S7717C3D1Ev();
extern void _ZN7S7717C3D0Ev();
extern void _ZN7S7717C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C3__8S7717C12[] = {
  ABISELECT(-512,-276),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C3[0]),
  (VTBL_ENTRY)&_ZN7S7717C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7717C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__7S7717C3__8S7717C12[] = {
  0,
  0,
  ABISELECT(384,204),
  ABISELECT(512,276),
  (VTBL_ENTRY)&(_ZTI7S7717C3[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C9__8S7717C12[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C9[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C67S7717C9__A1__8S7717C12[] = {
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C6[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
static  VTT_ENTRY vtt_S7717C12[] = {
  {&(_ZTV8S7717C12[6]),  6,36},
  {&(_tg__ZTV7S7717C8__8S7717C12[6]),  6,9},
  {&(_tg__ZTV7S7717C6__7S7717C8__8S7717C12[5]),  5,7},
  {&(_tg__ZTV7S7717C3__7S7717C8__8S7717C12[6]),  6,9},
  {&(_tg__ZTV7S7717C9__7S7717C8__8S7717C12[6]),  6,9},
  {&(_ZTV8S7717C12[16]),  16,36},
  {&(_ZTV8S7717C12[24]),  24,36},
  {&(_ZTV8S7717C12[33]),  33,36},
  {&(_tg__ZTV7S7717C6__8S7717C12[3]),  3,5},
  {&(_tg__ZTV7S7717C3__8S7717C12[4]),  4,7},
  {&(_tg__ZTV7S7717C6__7S7717C3__8S7717C12[5]),  5,7},
  {&(_tg__ZTV7S7717C9__8S7717C12[3]),  3,6},
  {&(_tg__ZTV7S7717C67S7717C9__A1__8S7717C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7717C12[];
extern  VTBL_ENTRY _ZTV8S7717C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7717C12[];
static VTBL_ENTRY alt_thunk_names56[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7717C8D0Ev,_ZTv0_n20_N7S7717C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S7717C8D0Ev,_ZThn504_N7S7717C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7717C8D1Ev,_ZTv0_n20_N7S7717C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S7717C8D1Ev,_ZThn504_N7S7717C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7717C12D0Ev,_ZTv0_n20_N8S7717C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S7717C12D0Ev,_ZThn504_N8S7717C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7717C12D1Ev,_ZTv0_n20_N8S7717C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S7717C12D1Ev,_ZThn504_N8S7717C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7717C12 = {  "S7717C12", // class name
  bases_S7717C12, 8,
  &(vtc_S7717C12[0]), // expected_vtbl_contents
  &(vtt_S7717C12[0]), // expected_vtt_contents
  ABISELECT(2544,1456), // object size
  NSPAIRA(_ZTI8S7717C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7717C12),36, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7717C12),13, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names56,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7717C1  : S7717C2 , S7717C9 , S7717C6 , virtual S7717C11 , S7717C12 {
  int s7717c1f0;
  void *s7717c1f1;
  void *s7717c1f2[6];
  ::S19560C17 s7717c1f3;
  virtual  ~S7717C1(); // _ZN7S7717C1D2Ev
  S7717C1(); // tgen
};
//SIG(1 S7717C1) C1{ BC2{ VBC3{ VBC4{ m Fc Fi FL FU5{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC6{ VBC4 v1 v2 Fp Fp Fi Fi FU7{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU7 Fp FL:3 FC4 FL FU7} vd v3 FL FL FL FL Fi FU7 Fc[10] Fi} BC8{ BC4 VBC6 VBC3 VBC9{ BC4 BC6 v4 Fp FD FC4[7] FD FU5 Fs FL FL} vd v5 Fc Fi[7] Fl[5] FL FL FL FU10{ m Fp Fi Fp Fc Fc FL[5] Fp Fp Fp}} BC4 BC6 vd v6 v7 v8 FU7 Fi Fl Fc Fp FC9 Fs} BC9 BC6 VBC11{ BC4 VBC6 VBC3 VBC9 VBC2 vd FL Fi Fp Fp FL} BC12{ BC8 vd v9 v10 Fp Fp Fp Fi FC13{} FL FL} vd Fi Fp Fp[6] FC14{ v11 FD FC15{ VBC16{ BC4 BC17{ VBC4 v12 v13 Fp Fp Fi Fi FU7 FL:0 FD FU7 Fp FL:3 FC4 FL FU7} v14 Fp FD FC4[7] FD FU5 Fs FL FL} VBC18{ VBC4 VBC17 vd v15 FL FL FL FL Fi FU7 Fc[10] Fi} Fi Fp Fi FU7}[6] Fc Fp Fp Fi[6] Fi Fp FL Fp Fi Fp Fp}}


 S7717C1 ::~S7717C1(){ note_dtor("S7717C1", this);}
S7717C1 ::S7717C1(){ note_ctor("S7717C1", this);} // tgen

static void Test_S7717C1()
{
  extern Class_Descriptor cd_S7717C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1497,3324)];
    init_test(&cd_S7717C1, buf);
    S7717C1 *dp, &lv = *(dp=new (buf) S7717C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(23936,13292), "sizeof(S7717C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7717C1)");
    check_base_class_offset(lv, (S2489C3*)(S7717C3*), ABISELECT(19056,10588), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C6*), ABISELECT(19056,10588), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C9 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C6*)(S7717C9*), ABISELECT(19056,10588), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C2 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C6*)(S7717C2*), ABISELECT(19056,10588), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C9 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C6*)(S7717C9*), ABISELECT(19056,10588), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C6*), ABISELECT(19056,10588), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C2 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C6*)(S7717C2*), ABISELECT(19056,10588), "S7717C1");
    check_base_class_offset(lv, (S7717C6*)(S7717C3*), ABISELECT(19184,10660), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C2 */ AMB_check_base_class_offset(lv, (S7717C6*)(S7717C8*)(S7717C2*), ABISELECT(19184,10660), "S7717C1");
    /*is_ambiguous_... S7717C11::S7717C6 */ AMB_check_base_class_offset(lv, (S7717C6*)(S7717C11*), ABISELECT(19184,10660), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C2 */ AMB_check_base_class_offset(lv, (S7717C6*)(S7717C8*)(S7717C2*), ABISELECT(19184,10660), "S7717C1");
    /*is_ambiguous_... S7717C8::S7717C6 */ AMB_check_base_class_offset(lv, (S7717C6*)(S7717C8*)(S7717C12*), ABISELECT(19184,10660), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C2 */ AMB_check_base_class_offset(lv, (S7717C3*)(S7717C2*), ABISELECT(18928,10504), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C2 */ AMB_check_base_class_offset(lv, (S7717C3*)(S7717C8*)(S7717C2*), ABISELECT(18928,10504), "S7717C1");
    check_base_class_offset(lv, (S7717C3*)(S7717C11*), ABISELECT(18928,10504), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C2 */ AMB_check_base_class_offset(lv, (S7717C3*)(S7717C2*), ABISELECT(18928,10504), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C2 */ AMB_check_base_class_offset(lv, (S7717C3*)(S7717C8*)(S7717C2*), ABISELECT(18928,10504), "S7717C1");
    check_base_class_offset(lv, (S7717C3*)(S7717C8*)(S7717C12*), ABISELECT(18928,10504), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C2 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C8*)(S7717C2*), ABISELECT(16,4), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C9 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C9*), ABISELECT(19952,11068), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C9 */ AMB_check_base_class_offset(lv, (S7717C6*)(S7717C9*), ABISELECT(19568,10864), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C2 */ AMB_check_base_class_offset(lv, (S7717C9*)(S7717C8*)(S7717C2*), ABISELECT(19568,10864), "S7717C1");
    check_base_class_offset(lv, (S7717C9*)(S7717C11*), ABISELECT(19568,10864), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C2 */ AMB_check_base_class_offset(lv, (S7717C9*)(S7717C8*)(S7717C2*), ABISELECT(19568,10864), "S7717C1");
    check_base_class_offset(lv, (S7717C9*)(S7717C8*)(S7717C12*), ABISELECT(19568,10864), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C2 */ AMB_check_base_class_offset(lv, (S7717C8*)(S7717C2*), 0, "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C2 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C2*), ABISELECT(288,192), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C2 */ AMB_check_base_class_offset(lv, (S7717C6*)(S7717C2*), ABISELECT(416,264), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C2 */ AMB_check_base_class_offset(lv, (S7717C2*), 0, "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C9 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C9*), ABISELECT(2992,1660), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C9 */ AMB_check_base_class_offset(lv, (S7717C6*)(S7717C9*), ABISELECT(2608,1456), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C9 */ AMB_check_base_class_offset(lv, (S7717C9*), ABISELECT(2608,1456), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C6 */ AMB_check_base_class_offset(lv, (S7717C6*), ABISELECT(4176,2324), "S7717C1");
    /*is_ambiguous_... S7717C11::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C11*), ABISELECT(21152,11736), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C2 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C8*)(S7717C2*), ABISELECT(21344,11840), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C2 */ AMB_check_base_class_offset(lv, (S7717C8*)(S7717C2*), ABISELECT(21328,11836), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C2 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C2*), ABISELECT(21616,12028), "S7717C1");
    /*is_ambiguous_... S7717C1::S7717C2 */ AMB_check_base_class_offset(lv, (S7717C6*)(S7717C2*), ABISELECT(21744,12100), "S7717C1");
    check_base_class_offset(lv, (S7717C2*)(S7717C11*), ABISELECT(21328,11836), "S7717C1");
    check_base_class_offset(lv, (S7717C11*), ABISELECT(21136,11732), "S7717C1");
    /*is_ambiguous_... S7717C8::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7717C8*)(S7717C12*), ABISELECT(4576,2532), "S7717C1");
    check_base_class_offset(lv, (S7717C8*)(S7717C12*), ABISELECT(4560,2528), "S7717C1");
    check_base_class_offset(lv, (S7717C12*), ABISELECT(4560,2528), "S7717C1");
    check_field_offset(lv, s7717c1f0, ABISELECT(4888,2756), "S7717C1.s7717c1f0");
    check_field_offset(lv, s7717c1f1, ABISELECT(4896,2760), "S7717C1.s7717c1f1");
    check_field_offset(lv, s7717c1f2, ABISELECT(4904,2764), "S7717C1.s7717c1f2");
    check_field_offset(lv, s7717c1f3, ABISELECT(4960,2788), "S7717C1.s7717c1f3");
    test_class_info(&lv, &cd_S7717C1);
    dp->~S7717C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7717C1(Test_S7717C1, "S7717C1", ABISELECT(23936,13292));

#else // __cplusplus

extern void _ZN7S7717C1C1Ev();
extern void _ZN7S7717C1D2Ev();
Name_Map name_map_S7717C1[] = {
  NSPAIR(_ZN7S7717C1C1Ev),
  NSPAIR(_ZN7S7717C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C6;
extern VTBL_ENTRY _ZTI7S7717C6[];
extern  VTBL_ENTRY _ZTV7S7717C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C6[];
extern Class_Descriptor cd_S7717C3;
extern VTBL_ENTRY _ZTI7S7717C3[];
extern  VTBL_ENTRY _ZTV7S7717C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C6;
extern VTBL_ENTRY _ZTI7S7717C6[];
extern  VTBL_ENTRY _ZTV7S7717C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C6[];
extern Class_Descriptor cd_S7717C9;
extern VTBL_ENTRY _ZTI7S7717C9[];
extern  VTBL_ENTRY _ZTV7S7717C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C9[];
extern Class_Descriptor cd_S7717C8;
extern VTBL_ENTRY _ZTI7S7717C8[];
extern  VTBL_ENTRY _ZTV7S7717C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C6;
extern VTBL_ENTRY _ZTI7S7717C6[];
extern  VTBL_ENTRY _ZTV7S7717C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C6[];
extern Class_Descriptor cd_S7717C2;
extern VTBL_ENTRY _ZTI7S7717C2[];
extern  VTBL_ENTRY _ZTV7S7717C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C2[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C6;
extern VTBL_ENTRY _ZTI7S7717C6[];
extern  VTBL_ENTRY _ZTV7S7717C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C6[];
extern Class_Descriptor cd_S7717C9;
extern VTBL_ENTRY _ZTI7S7717C9[];
extern  VTBL_ENTRY _ZTV7S7717C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C9[];
extern Class_Descriptor cd_S7717C6;
extern VTBL_ENTRY _ZTI7S7717C6[];
extern  VTBL_ENTRY _ZTV7S7717C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C6[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C8;
extern VTBL_ENTRY _ZTI7S7717C8[];
extern  VTBL_ENTRY _ZTV7S7717C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C6;
extern VTBL_ENTRY _ZTI7S7717C6[];
extern  VTBL_ENTRY _ZTV7S7717C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C6[];
extern Class_Descriptor cd_S7717C2;
extern VTBL_ENTRY _ZTI7S7717C2[];
extern  VTBL_ENTRY _ZTV7S7717C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C2[];
extern Class_Descriptor cd_S7717C11;
extern VTBL_ENTRY _ZTI8S7717C11[];
extern  VTBL_ENTRY _ZTV8S7717C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7717C11[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7717C8;
extern VTBL_ENTRY _ZTI7S7717C8[];
extern  VTBL_ENTRY _ZTV7S7717C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C8[];
extern Class_Descriptor cd_S7717C12;
extern VTBL_ENTRY _ZTI8S7717C12[];
extern  VTBL_ENTRY _ZTV8S7717C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7717C12[];
static Base_Class bases_S7717C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(19056,10588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7717C6,    ABISELECT(19184,10660), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7717C3,    ABISELECT(18928,10504), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(19952,11068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7717C6,    ABISELECT(19568,10864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7717C9,    ABISELECT(19568,10864), //bcp->offset
    57, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7717C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7717C6,    ABISELECT(416,264), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7717C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(2992,1660), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7717C6,    ABISELECT(2608,1456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7717C9,    ABISELECT(2608,1456), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7717C6,    ABISELECT(4176,2324), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(21152,11736), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(21344,11840), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7717C8,    ABISELECT(21328,11836), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(21616,12028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7717C6,    ABISELECT(21744,12100), //bcp->offset
    95, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7717C2,    ABISELECT(21328,11836), //bcp->offset
    76, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7717C11,    ABISELECT(21136,11732), //bcp->offset
    66, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(4576,2532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7717C8,    ABISELECT(4560,2528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7717C12,    ABISELECT(4560,2528), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7717C1[];
extern void _ZN7S7717C1D1Ev();
extern void _ZN7S7717C1D0Ev();
extern void _ZN7S7717C82v5Ev();
extern void _ZN7S7717C22v6Ev();
extern void _ZN7S7717C22v7Ev();
extern void _ZN7S7717C22v8Ev();
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void ABISELECT(_ZThn4560_N7S7717C1D1Ev,_ZThn2528_N7S7717C1D1Ev)();
extern void ABISELECT(_ZThn4560_N7S7717C1D0Ev,_ZThn2528_N7S7717C1D0Ev)();
extern void _ZN7S7717C82v5Ev();
extern void _ZN8S7717C122v9Ev();
extern void _ZN8S7717C123v10Ev();
extern void ABISELECT(_ZTv0_n40_N7S7717C1D1Ev,_ZTv0_n20_N7S7717C1D1Ev)();
extern void ABISELECT(_ZThn18928_N7S7717C1D1Ev,_ZThn10504_N7S7717C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7717C1D0Ev,_ZTv0_n20_N7S7717C1D0Ev)();
extern void ABISELECT(_ZThn18928_N7S7717C1D0Ev,_ZThn10504_N7S7717C1D0Ev)() __attribute__((weak));
extern void _ZN7S7717C32v3Ev();
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7717C1D1Ev,_ZTv0_n32_N7S7717C1D1Ev)();
extern void ABISELECT(_ZThn21136_N7S7717C1D1Ev,_ZThn11732_N7S7717C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7717C1D0Ev,_ZTv0_n32_N7S7717C1D0Ev)();
extern void ABISELECT(_ZThn21136_N7S7717C1D0Ev,_ZThn11732_N7S7717C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7717C1D1Ev,_ZTv0_n28_N7S7717C1D1Ev)();
extern void ABISELECT(_ZThn21328_N7S7717C1D1Ev,_ZThn11836_N7S7717C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7717C1D0Ev,_ZTv0_n28_N7S7717C1D0Ev)();
extern void ABISELECT(_ZThn21328_N7S7717C1D0Ev,_ZThn11836_N7S7717C1D0Ev)() __attribute__((weak));
extern void _ZN7S7717C82v5Ev();
extern void _ZN7S7717C22v6Ev();
extern void _ZN7S7717C22v7Ev();
extern void _ZN7S7717C22v8Ev();
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY vtc_S7717C1[] = {
  ABISELECT(21328,11836),
  ABISELECT(21136,11732),
  ABISELECT(19568,10864),
  ABISELECT(18928,10504),
  ABISELECT(19056,10588),
  ABISELECT(19184,10660),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C1[0]),
  (VTBL_ENTRY)&_ZN7S7717C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7717C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v8Ev,
  ABISELECT(18640,10324),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI7S7717C1[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  ABISELECT(16448,9132),
  ABISELECT(-2608,-1456),
  (VTBL_ENTRY)&(_ZTI7S7717C1[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
  ABISELECT(14880,8264),
  ABISELECT(-4176,-2324),
  (VTBL_ENTRY)&(_ZTI7S7717C1[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  ABISELECT(15008,8336),
  ABISELECT(14368,7976),
  ABISELECT(14496,8060),
  ABISELECT(14624,8132),
  ABISELECT(-4560,-2528),
  (VTBL_ENTRY)&(_ZTI7S7717C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4560_N7S7717C1D1Ev,_ZThn2528_N7S7717C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4560_N7S7717C1D0Ev,_ZThn2528_N7S7717C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C82v5Ev,
  (VTBL_ENTRY)&_ZN8S7717C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7717C123v10Ev,
  0,
  ABISELECT(-18928,-10504),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(-18928,-10504),
  (VTBL_ENTRY)&(_ZTI7S7717C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C1D1Ev,_ZTv0_n20_N7S7717C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C1D0Ev,_ZTv0_n20_N7S7717C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-19184,-10660),
  (VTBL_ENTRY)&(_ZTI7S7717C1[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-19568,-10864),
  (VTBL_ENTRY)&(_ZTI7S7717C1[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
  ABISELECT(-21136,-11732),
  ABISELECT(192,104),
  ABISELECT(-1568,-868),
  ABISELECT(-2208,-1228),
  ABISELECT(-2080,-1144),
  ABISELECT(-1952,-1072),
  ABISELECT(-21136,-11732),
  (VTBL_ENTRY)&(_ZTI7S7717C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7717C1D1Ev,_ZTv0_n32_N7S7717C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7717C1D0Ev,_ZTv0_n32_N7S7717C1D0Ev),
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-21328,-11836),
  ABISELECT(-1760,-972),
  ABISELECT(-2400,-1332),
  ABISELECT(-2272,-1248),
  ABISELECT(-2144,-1176),
  ABISELECT(-21328,-11836),
  (VTBL_ENTRY)&(_ZTI7S7717C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7717C1D1Ev,_ZTv0_n28_N7S7717C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7717C1D0Ev,_ZTv0_n28_N7S7717C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v8Ev,
  ABISELECT(-2688,-1512),
  ABISELECT(-21744,-12100),
  (VTBL_ENTRY)&(_ZTI7S7717C1[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S7717C1[];
extern void _ZN7S7717C2D1Ev();
extern void _ZN7S7717C2D0Ev();
extern void _ZN7S7717C82v5Ev();
extern void _ZN7S7717C22v6Ev();
extern void _ZN7S7717C22v7Ev();
extern void _ZN7S7717C22v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C2__A__7S7717C1[] = {
  ABISELECT(19568,10864),
  ABISELECT(18928,10504),
  ABISELECT(19056,10588),
  ABISELECT(19184,10660),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&_ZN7S7717C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7717C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v8Ev,
};
extern void _ZN7S7717C8D1Ev();
extern void _ZN7S7717C8D0Ev();
extern void _ZN7S7717C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C87S7717C2__7S7717C1[] = {
  ABISELECT(19568,10864),
  ABISELECT(18928,10504),
  ABISELECT(19056,10588),
  ABISELECT(19184,10660),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7717C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C82v5Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__7S7717C87S7717C2__7S7717C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-19184,-10660),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7717C8D1Ev,_ZTv0_n20_N7S7717C8D1Ev)();
extern void ABISELECT(_ZThn18928_N7S7717C8D1Ev,_ZThn10504_N7S7717C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7717C8D0Ev,_ZTv0_n20_N7S7717C8D0Ev)();
extern void ABISELECT(_ZThn18928_N7S7717C8D0Ev,_ZThn10504_N7S7717C8D0Ev)() __attribute__((weak));
extern void _ZN7S7717C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C3__7S7717C87S7717C2__7S7717C1[] = {
  0,
  ABISELECT(-18928,-10504),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(-18928,-10504),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C8D1Ev,_ZTv0_n20_N7S7717C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C8D0Ev,_ZTv0_n20_N7S7717C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C9__7S7717C87S7717C2__7S7717C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-19568,-10864),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C67S7717C2__A2__7S7717C1[] = {
  ABISELECT(18640,10324),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C6[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7717C2D1Ev,_ZTv0_n20_N7S7717C2D1Ev)();
extern void ABISELECT(_ZThn18928_N7S7717C2D1Ev,_ZThn10504_N7S7717C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7717C2D0Ev,_ZTv0_n20_N7S7717C2D0Ev)();
extern void ABISELECT(_ZThn18928_N7S7717C2D0Ev,_ZThn10504_N7S7717C2D0Ev)() __attribute__((weak));
extern void _ZN7S7717C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C3__7S7717C2__A__7S7717C1[] = {
  0,
  ABISELECT(-18928,-10504),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(-18928,-10504),
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C2D1Ev,_ZTv0_n20_N7S7717C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C2D0Ev,_ZTv0_n20_N7S7717C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__7S7717C2__A__7S7717C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-19184,-10660),
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C9__7S7717C2__A__7S7717C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-19568,-10864),
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__A__7S7717C2__A__7S7717C1[] = {
  ABISELECT(18640,10324),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C9__A__7S7717C1[] = {
  ABISELECT(16448,9132),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C9[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C67S7717C9__A3__7S7717C1[] = {
  ABISELECT(16448,9132),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C6[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__A__7S7717C1[] = {
  ABISELECT(14880,8264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C6[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN8S7717C12D1Ev();
extern void _ZN8S7717C12D0Ev();
extern void _ZN7S7717C82v5Ev();
extern void _ZN8S7717C122v9Ev();
extern void _ZN8S7717C123v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7717C12__7S7717C1[] = {
  ABISELECT(15008,8336),
  ABISELECT(14368,7976),
  ABISELECT(14496,8060),
  ABISELECT(14624,8132),
  0,
  (VTBL_ENTRY)&(_ZTI8S7717C12[0]),
  (VTBL_ENTRY)&_ZN8S7717C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7717C12D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C82v5Ev,
  (VTBL_ENTRY)&_ZN8S7717C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7717C123v10Ev,
};
extern void _ZN7S7717C8D1Ev();
extern void _ZN7S7717C8D0Ev();
extern void _ZN7S7717C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C88S7717C12__A2__7S7717C1[] = {
  ABISELECT(15008,8336),
  ABISELECT(14368,7976),
  ABISELECT(14496,8060),
  ABISELECT(14624,8132),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7717C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C82v5Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__7S7717C88S7717C12__A2__7S7717C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-14624,-8132),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7717C8D1Ev,_ZTv0_n20_N7S7717C8D1Ev)();
extern void ABISELECT(_ZThn14368_N7S7717C8D1Ev,_ZThn7976_N7S7717C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7717C8D0Ev,_ZTv0_n20_N7S7717C8D0Ev)();
extern void ABISELECT(_ZThn14368_N7S7717C8D0Ev,_ZThn7976_N7S7717C8D0Ev)() __attribute__((weak));
extern void _ZN7S7717C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C3__7S7717C88S7717C12__A2__7S7717C1[] = {
  0,
  ABISELECT(-14368,-7976),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(-14368,-7976),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C8D1Ev,_ZTv0_n20_N7S7717C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C8D0Ev,_ZTv0_n20_N7S7717C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C9__7S7717C88S7717C12__A2__7S7717C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-15008,-8336),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__8S7717C12__7S7717C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-14624,-8132),
  (VTBL_ENTRY)&(_ZTI8S7717C12[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7717C12D1Ev,_ZTv0_n20_N8S7717C12D1Ev)();
extern void ABISELECT(_ZThn14368_N8S7717C12D1Ev,_ZThn7976_N8S7717C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7717C12D0Ev,_ZTv0_n20_N8S7717C12D0Ev)();
extern void ABISELECT(_ZThn14368_N8S7717C12D0Ev,_ZThn7976_N8S7717C12D0Ev)() __attribute__((weak));
extern void _ZN7S7717C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C3__8S7717C12__7S7717C1[] = {
  0,
  ABISELECT(-14368,-7976),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(-14368,-7976),
  (VTBL_ENTRY)&(_ZTI8S7717C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7717C12D1Ev,_ZTv0_n20_N8S7717C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7717C12D0Ev,_ZTv0_n20_N8S7717C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C9__8S7717C12__7S7717C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(-15008,-8336),
  (VTBL_ENTRY)&(_ZTI8S7717C12[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern void _ZN7S7717C3D1Ev();
extern void _ZN7S7717C3D0Ev();
extern void _ZN7S7717C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C3__7S7717C1[] = {
  ABISELECT(256,156),
  ABISELECT(128,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C3[0]),
  (VTBL_ENTRY)&_ZN7S7717C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7717C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__7S7717C3__7S7717C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-256,-156),
  (VTBL_ENTRY)&(_ZTI7S7717C3[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__7S7717C1[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C6[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C9__7S7717C1[] = {
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C9[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C67S7717C9__A1__7S7717C1[] = {
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C6[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN8S7717C11D1Ev();
extern void _ZN8S7717C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7717C11__7S7717C1[] = {
  ABISELECT(192,104),
  ABISELECT(-1568,-868),
  ABISELECT(-2208,-1228),
  ABISELECT(-2080,-1144),
  ABISELECT(-1952,-1072),
  0,
  (VTBL_ENTRY)&(_ZTI8S7717C11[0]),
  (VTBL_ENTRY)&_ZN8S7717C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7717C11D0Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__8S7717C11__7S7717C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(1952,1072),
  (VTBL_ENTRY)&(_ZTI8S7717C11[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7717C11D1Ev,_ZTv0_n20_N8S7717C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7717C11D0Ev,_ZTv0_n20_N8S7717C11D0Ev)();
extern void _ZN7S7717C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C3__8S7717C11__7S7717C1[] = {
  0,
  ABISELECT(2208,1228),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(2208,1228),
  (VTBL_ENTRY)&(_ZTI8S7717C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7717C11D1Ev,_ZTv0_n20_N8S7717C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7717C11D0Ev,_ZTv0_n20_N8S7717C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C9__8S7717C11__7S7717C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(1568,868),
  (VTBL_ENTRY)&(_ZTI8S7717C11[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7717C11D1Ev,_ZTv0_n28_N8S7717C11D1Ev)();
extern void ABISELECT(_ZThn192_N8S7717C11D1Ev,_ZThn104_N8S7717C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7717C11D0Ev,_ZTv0_n28_N8S7717C11D0Ev)();
extern void ABISELECT(_ZThn192_N8S7717C11D0Ev,_ZThn104_N8S7717C11D0Ev)() __attribute__((weak));
extern void _ZN7S7717C82v5Ev();
extern void _ZN7S7717C22v6Ev();
extern void _ZN7S7717C22v7Ev();
extern void _ZN7S7717C22v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C2__8S7717C11__7S7717C1[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  0,
  0,
  0,
  0,
  ABISELECT(-192,-104),
  ABISELECT(-1760,-972),
  ABISELECT(-2400,-1332),
  ABISELECT(-2272,-1248),
  ABISELECT(-2144,-1176),
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S7717C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7717C11D1Ev,_ZTv0_n28_N8S7717C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7717C11D0Ev,_ZTv0_n28_N8S7717C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v8Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C67S7717C2__A2__8S7717C11__7S7717C1[] = {
  ABISELECT(-2688,-1512),
  ABISELECT(-608,-368),
  (VTBL_ENTRY)&(_ZTI8S7717C11[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN7S7717C2D1Ev();
extern void _ZN7S7717C2D0Ev();
extern void _ZN7S7717C82v5Ev();
extern void _ZN7S7717C22v6Ev();
extern void _ZN7S7717C22v7Ev();
extern void _ZN7S7717C22v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C2__A1__7S7717C1[] = {
  ABISELECT(-1760,-972),
  ABISELECT(-2400,-1332),
  ABISELECT(-2272,-1248),
  ABISELECT(-2144,-1176),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&_ZN7S7717C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7717C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7717C22v8Ev,
};
extern void _ZN7S7717C8D1Ev();
extern void _ZN7S7717C8D0Ev();
extern void _ZN7S7717C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C87S7717C2__A1__7S7717C1[] = {
  ABISELECT(-1760,-972),
  ABISELECT(-2400,-1332),
  ABISELECT(-2272,-1248),
  ABISELECT(-2144,-1176),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7717C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7717C82v5Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__7S7717C87S7717C2__A1__7S7717C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(2144,1176),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7717C8D1Ev,_ZTv0_n20_N7S7717C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7717C8D0Ev,_ZTv0_n20_N7S7717C8D0Ev)();
extern void _ZN7S7717C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C3__7S7717C87S7717C2__A1__7S7717C1[] = {
  0,
  ABISELECT(2400,1332),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(2400,1332),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C8D1Ev,_ZTv0_n20_N7S7717C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C8D0Ev,_ZTv0_n20_N7S7717C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C9__7S7717C87S7717C2__A1__7S7717C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(1760,972),
  (VTBL_ENTRY)&(_ZTI7S7717C8[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C67S7717C2__A5__7S7717C1[] = {
  ABISELECT(-2688,-1512),
  0,
  (VTBL_ENTRY)&(_ZTI7S7717C6[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7717C2D1Ev,_ZTv0_n20_N7S7717C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7717C2D0Ev,_ZTv0_n20_N7S7717C2D0Ev)();
extern void _ZN7S7717C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C3__7S7717C2__A1__7S7717C1[] = {
  0,
  ABISELECT(2400,1332),
  ABISELECT(256,156),
  ABISELECT(128,84),
  ABISELECT(2400,1332),
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C2D1Ev,_ZTv0_n20_N7S7717C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7717C2D0Ev,_ZTv0_n20_N7S7717C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7717C32v3Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__7S7717C2__A1__7S7717C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(2144,1176),
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
extern void _ZN7S7717C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C9__7S7717C2__A1__7S7717C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-276),
  ABISELECT(1760,972),
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7717C92v4Ev,
};
extern void _ZN7S7717C62v1Ev();
extern void _ZN7S7717C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7717C6__A__7S7717C2__A1__7S7717C1[] = {
  ABISELECT(-2688,-1512),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI7S7717C2[0]),
  (VTBL_ENTRY)&_ZN7S7717C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7717C62v2Ev,
};
static  VTT_ENTRY vtt_S7717C1[] = {
  {&(_ZTV7S7717C1[8]),  8,100},
  {&(_tg__ZTV7S7717C2__A__7S7717C1[6]),  6,12},
  {&(_tg__ZTV7S7717C87S7717C2__7S7717C1[6]),  6,9},
  {&(_tg__ZTV7S7717C6__7S7717C87S7717C2__7S7717C1[5]),  5,7},
  {&(_tg__ZTV7S7717C3__7S7717C87S7717C2__7S7717C1[6]),  6,9},
  {&(_tg__ZTV7S7717C9__7S7717C87S7717C2__7S7717C1[6]),  6,9},
  {&(_tg__ZTV7S7717C67S7717C2__A2__7S7717C1[3]),  3,5},
  {&(_tg__ZTV7S7717C3__7S7717C2__A__7S7717C1[6]),  6,9},
  {&(_tg__ZTV7S7717C6__7S7717C2__A__7S7717C1[5]),  5,7},
  {&(_tg__ZTV7S7717C9__7S7717C2__A__7S7717C1[6]),  6,9},
  {&(_tg__ZTV7S7717C6__A__7S7717C2__A__7S7717C1[3]),  3,5},
  {&(_tg__ZTV7S7717C9__A__7S7717C1[3]),  3,6},
  {&(_tg__ZTV7S7717C67S7717C9__A3__7S7717C1[3]),  3,5},
  {&(_tg__ZTV7S7717C6__A__7S7717C1[3]),  3,5},
  {&(_tg__ZTV8S7717C12__7S7717C1[6]),  6,11},
  {&(_tg__ZTV7S7717C88S7717C12__A2__7S7717C1[6]),  6,9},
  {&(_tg__ZTV7S7717C6__7S7717C88S7717C12__A2__7S7717C1[5]),  5,7},
  {&(_tg__ZTV7S7717C3__7S7717C88S7717C12__A2__7S7717C1[6]),  6,9},
  {&(_tg__ZTV7S7717C9__7S7717C88S7717C12__A2__7S7717C1[6]),  6,9},
  {&(_tg__ZTV7S7717C6__8S7717C12__7S7717C1[5]),  5,7},
  {&(_tg__ZTV7S7717C3__8S7717C12__7S7717C1[6]),  6,9},
  {&(_tg__ZTV7S7717C9__8S7717C12__7S7717C1[6]),  6,9},
  {&(_ZTV7S7717C1[47]),  47,100},
  {&(_ZTV7S7717C1[55]),  55,100},
  {&(_ZTV7S7717C1[63]),  63,100},
  {&(_ZTV7S7717C1[17]),  17,100},
  {&(_ZTV7S7717C1[22]),  22,100},
  {&(_ZTV7S7717C1[28]),  28,100},
  {&(_ZTV7S7717C1[74]),  74,100},
  {&(_ZTV7S7717C1[89]),  89,100},
  {&(_ZTV7S7717C1[98]),  98,100},
  {&(_ZTV7S7717C1[36]),  36,100},
  {&(_tg__ZTV7S7717C3__7S7717C1[4]),  4,7},
  {&(_tg__ZTV7S7717C6__7S7717C3__7S7717C1[5]),  5,7},
  {&(_tg__ZTV7S7717C6__7S7717C1[3]),  3,5},
  {&(_tg__ZTV7S7717C9__7S7717C1[3]),  3,6},
  {&(_tg__ZTV7S7717C67S7717C9__A1__7S7717C1[3]),  3,5},
  {&(_tg__ZTV8S7717C11__7S7717C1[7]),  7,9},
  {&(_tg__ZTV7S7717C6__8S7717C11__7S7717C1[5]),  5,7},
  {&(_tg__ZTV7S7717C3__8S7717C11__7S7717C1[6]),  6,9},
  {&(_tg__ZTV7S7717C9__8S7717C11__7S7717C1[6]),  6,9},
  {&(_tg__ZTV7S7717C2__8S7717C11__7S7717C1[13]),  13,19},
  {&(_tg__ZTV7S7717C67S7717C2__A2__8S7717C11__7S7717C1[3]),  3,5},
  {&(_tg__ZTV7S7717C2__A1__7S7717C1[6]),  6,12},
  {&(_tg__ZTV7S7717C87S7717C2__A1__7S7717C1[6]),  6,9},
  {&(_tg__ZTV7S7717C6__7S7717C87S7717C2__A1__7S7717C1[5]),  5,7},
  {&(_tg__ZTV7S7717C3__7S7717C87S7717C2__A1__7S7717C1[6]),  6,9},
  {&(_tg__ZTV7S7717C9__7S7717C87S7717C2__A1__7S7717C1[6]),  6,9},
  {&(_tg__ZTV7S7717C67S7717C2__A5__7S7717C1[3]),  3,5},
  {&(_tg__ZTV7S7717C3__7S7717C2__A1__7S7717C1[6]),  6,9},
  {&(_tg__ZTV7S7717C6__7S7717C2__A1__7S7717C1[5]),  5,7},
  {&(_tg__ZTV7S7717C9__7S7717C2__A1__7S7717C1[6]),  6,9},
  {&(_tg__ZTV7S7717C6__A__7S7717C2__A1__7S7717C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7717C1[];
extern  VTBL_ENTRY _ZTV7S7717C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7717C1[];
static VTBL_ENTRY alt_thunk_names57[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7717C11D0Ev,_ZTv0_n28_N8S7717C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S7717C11D0Ev,_ZThn104_N8S7717C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7717C11D1Ev,_ZTv0_n28_N8S7717C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S7717C11D1Ev,_ZThn104_N8S7717C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7717C12D0Ev,_ZTv0_n20_N8S7717C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14368_N8S7717C12D0Ev,_ZThn7976_N8S7717C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7717C12D1Ev,_ZTv0_n20_N8S7717C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14368_N8S7717C12D1Ev,_ZThn7976_N8S7717C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7717C2D0Ev,_ZTv0_n20_N7S7717C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18928_N7S7717C2D0Ev,_ZThn10504_N7S7717C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7717C2D1Ev,_ZTv0_n20_N7S7717C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18928_N7S7717C2D1Ev,_ZThn10504_N7S7717C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7717C8D0Ev,_ZTv0_n20_N7S7717C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14368_N7S7717C8D0Ev,_ZThn7976_N7S7717C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18928_N7S7717C8D0Ev,_ZThn10504_N7S7717C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7717C8D1Ev,_ZTv0_n20_N7S7717C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14368_N7S7717C8D1Ev,_ZThn7976_N7S7717C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18928_N7S7717C8D1Ev,_ZThn10504_N7S7717C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7717C1D0Ev,_ZTv0_n28_N7S7717C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21328_N7S7717C1D0Ev,_ZThn11836_N7S7717C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7717C1D1Ev,_ZTv0_n28_N7S7717C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21328_N7S7717C1D1Ev,_ZThn11836_N7S7717C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7717C1D0Ev,_ZTv0_n32_N7S7717C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N7S7717C1D0Ev,_ZThn11732_N7S7717C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7717C1D1Ev,_ZTv0_n32_N7S7717C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N7S7717C1D1Ev,_ZThn11732_N7S7717C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7717C1D0Ev,_ZTv0_n20_N7S7717C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18928_N7S7717C1D0Ev,_ZThn10504_N7S7717C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7717C1D1Ev,_ZTv0_n20_N7S7717C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18928_N7S7717C1D1Ev,_ZThn10504_N7S7717C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7717C1 = {  "S7717C1", // class name
  bases_S7717C1, 25,
  &(vtc_S7717C1[0]), // expected_vtbl_contents
  &(vtt_S7717C1[0]), // expected_vtt_contents
  ABISELECT(23936,13292), // object size
  NSPAIRA(_ZTI7S7717C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7717C1),100, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7717C1),53, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names57,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7716C6  : virtual S2489C3 {
  void *s7716c6f0;
  void *s7716c6f1;
  int s7716c6f2;
  int s7716c6f3;
  ::S2489C7 s7716c6f4;
  __tsi64  :0;
  long double s7716c6f6;
  ::S2489C7 s7716c6f7;
  void *s7716c6f8;
  __tsi64 s7716c6f9:3;
  ::S2489C3 s7716c6f10;
  long s7716c6f11;
  ::S2489C7 s7716c6f12;
  virtual void  v1(); // _ZN7S7716C62v1Ev
  virtual void  v2(); // _ZN7S7716C62v2Ev
  ~S7716C6(); // tgen
  S7716C6(); // tgen
};
//SIG(-1 S7716C6) C1{ VBC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} v1 v2 Fp Fp Fi Fi FU4{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU4 Fp FL:3 FC2 Fl FU4}


void  S7716C6 ::v1(){vfunc_called(this, "_ZN7S7716C62v1Ev");}
void  S7716C6 ::v2(){vfunc_called(this, "_ZN7S7716C62v2Ev");}
S7716C6 ::~S7716C6(){ note_dtor("S7716C6", this);} // tgen
S7716C6 ::S7716C6(){ note_ctor("S7716C6", this);} // tgen

static void Test_S7716C6()
{
  extern Class_Descriptor cd_S7716C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,69)];
    init_test(&cd_S7716C6, buf);
    S7716C6 *dp, &lv = *(dp=new (buf) S7716C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,272), "sizeof(S7716C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7716C6)");
    check_base_class_offset(lv, (S2489C3*), ABISELECT(384,200), "S7716C6");
    check_field_offset(lv, s7716c6f0, ABISELECT(8,4), "S7716C6.s7716c6f0");
    check_field_offset(lv, s7716c6f1, ABISELECT(16,8), "S7716C6.s7716c6f1");
    check_field_offset(lv, s7716c6f2, ABISELECT(24,12), "S7716C6.s7716c6f2");
    check_field_offset(lv, s7716c6f3, ABISELECT(28,16), "S7716C6.s7716c6f3");
    check_field_offset(lv, s7716c6f4, ABISELECT(32,20), "S7716C6.s7716c6f4");
    check_field_offset(lv, s7716c6f6, ABISELECT(96,48), "S7716C6.s7716c6f6");
    check_field_offset(lv, s7716c6f7, ABISELECT(112,60), "S7716C6.s7716c6f7");
    check_field_offset(lv, s7716c6f8, ABISELECT(168,88), "S7716C6.s7716c6f8");
    set_bf_and_test(lv, s7716c6f9, ABISELECT(176,92), 0, 3, 1, "S7716C6");
    set_bf_and_test(lv, s7716c6f9, ABISELECT(176,92), 0, 3, hide_sll(1LL<<2), "S7716C6");
    check_field_offset(lv, s7716c6f10, ABISELECT(192,96), "S7716C6.s7716c6f10");
    check_field_offset(lv, s7716c6f11, ABISELECT(320,168), "S7716C6.s7716c6f11");
    check_field_offset(lv, s7716c6f12, ABISELECT(328,172), "S7716C6.s7716c6f12");
    test_class_info(&lv, &cd_S7716C6);
    dp->~S7716C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7716C6(Test_S7716C6, "S7716C6", ABISELECT(512,272));

#else // __cplusplus

extern void _ZN7S7716C6C1Ev();
extern void _ZN7S7716C6D1Ev();
Name_Map name_map_S7716C6[] = {
  NSPAIR(_ZN7S7716C6C1Ev),
  NSPAIR(_ZN7S7716C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
static Base_Class bases_S7716C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(384,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7716C6[];
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY vtc_S7716C6[] = {
  ABISELECT(384,200),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C6[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S7716C6[];
static  VTT_ENTRY vtt_S7716C6[] = {
  {&(_ZTV7S7716C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7716C6[];
extern  VTBL_ENTRY _ZTV7S7716C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C6[];
Class_Descriptor cd_S7716C6 = {  "S7716C6", // class name
  bases_S7716C6, 1,
  &(vtc_S7716C6[0]), // expected_vtbl_contents
  &(vtt_S7716C6[0]), // expected_vtt_contents
  ABISELECT(512,272), // object size
  NSPAIRA(_ZTI7S7716C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7716C6),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7716C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7716C3  : virtual S2489C3 , virtual S7716C6 {
  __tsi64 s7716c3f0;
  __tsi64 s7716c3f1;
  __tsi64 s7716c3f2;
  long s7716c3f3;
  int s7716c3f4;
  ::S2489C7 s7716c3f5;
  char s7716c3f6[10];
  int s7716c3f7;
  virtual  ~S7716C3(); // _ZN7S7716C3D2Ev
  virtual void  v3(); // _ZN7S7716C32v3Ev
  S7716C3(); // tgen
};
//SIG(-1 S7716C3) C1{ VBC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 Fl FU5} vd v1 FL FL FL Fl Fi FU5 Fc[10] Fi}


 S7716C3 ::~S7716C3(){ note_dtor("S7716C3", this);}
void  S7716C3 ::v3(){vfunc_called(this, "_ZN7S7716C32v3Ev");}
S7716C3 ::S7716C3(){ note_ctor("S7716C3", this);} // tgen

static void Test_S7716C3()
{
  extern Class_Descriptor cd_S7716C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,89)];
    init_test(&cd_S7716C3, buf);
    S7716C3 *dp, &lv = *(dp=new (buf) S7716C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,352), "sizeof(S7716C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7716C3)");
    check_base_class_offset(lv, (S2489C3*), ABISELECT(128,80), "S7716C3");
    check_base_class_offset(lv, (S2489C3*)(S7716C6*), ABISELECT(128,80), "S7716C3");
    check_base_class_offset(lv, (S7716C6*), ABISELECT(256,152), "S7716C3");
    check_field_offset(lv, s7716c3f0, ABISELECT(8,4), "S7716C3.s7716c3f0");
    check_field_offset(lv, s7716c3f1, ABISELECT(16,12), "S7716C3.s7716c3f1");
    check_field_offset(lv, s7716c3f2, ABISELECT(24,20), "S7716C3.s7716c3f2");
    check_field_offset(lv, s7716c3f3, ABISELECT(32,28), "S7716C3.s7716c3f3");
    check_field_offset(lv, s7716c3f4, ABISELECT(40,32), "S7716C3.s7716c3f4");
    check_field_offset(lv, s7716c3f5, ABISELECT(48,36), "S7716C3.s7716c3f5");
    check_field_offset(lv, s7716c3f6, ABISELECT(104,64), "S7716C3.s7716c3f6");
    check_field_offset(lv, s7716c3f7, ABISELECT(116,76), "S7716C3.s7716c3f7");
    test_class_info(&lv, &cd_S7716C3);
    dp->~S7716C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7716C3(Test_S7716C3, "S7716C3", ABISELECT(640,352));

#else // __cplusplus

extern void _ZN7S7716C3C1Ev();
extern void _ZN7S7716C3D2Ev();
Name_Map name_map_S7716C3[] = {
  NSPAIR(_ZN7S7716C3C1Ev),
  NSPAIR(_ZN7S7716C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C6;
extern VTBL_ENTRY _ZTI7S7716C6[];
extern  VTBL_ENTRY _ZTV7S7716C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C6[];
static Base_Class bases_S7716C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7716C6,    ABISELECT(256,152), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7716C3[];
extern void _ZN7S7716C3D1Ev();
extern void _ZN7S7716C3D0Ev();
extern void _ZN7S7716C32v3Ev();
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY vtc_S7716C3[] = {
  ABISELECT(256,152),
  ABISELECT(128,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C3[0]),
  (VTBL_ENTRY)&_ZN7S7716C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7716C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S7716C3[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S7716C3[];
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__7S7716C3[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C6[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
static  VTT_ENTRY vtt_S7716C3[] = {
  {&(_ZTV7S7716C3[4]),  4,14},
  {&(_ZTV7S7716C3[12]),  12,14},
  {&(_tg__ZTV7S7716C6__7S7716C3[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7716C3[];
extern  VTBL_ENTRY _ZTV7S7716C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C3[];
Class_Descriptor cd_S7716C3 = {  "S7716C3", // class name
  bases_S7716C3, 2,
  &(vtc_S7716C3[0]), // expected_vtbl_contents
  &(vtt_S7716C3[0]), // expected_vtt_contents
  ABISELECT(640,352), // object size
  NSPAIRA(_ZTI7S7716C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7716C3),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7716C3),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7716C9  : S2489C3 , S7716C6 {
  void *s7716c9f0;
  long double s7716c9f1;
  ::S2489C3 s7716c9f2[7];
  long double s7716c9f3;
  ::S2489C4 s7716c9f4;
  short s7716c9f5;
  long s7716c9f6;
  long s7716c9f7;
  virtual void  v4(); // _ZN7S7716C92v4Ev
  ~S7716C9(); // tgen
  S7716C9(); // tgen
};
//SIG(-1 S7716C9) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} BC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 Fl FU5} v1 Fp FD FC2[7] FD FU3 Fs Fl Fl}


void  S7716C9 ::v4(){vfunc_called(this, "_ZN7S7716C92v4Ev");}
S7716C9 ::~S7716C9(){ note_dtor("S7716C9", this);} // tgen
S7716C9 ::S7716C9(){ note_ctor("S7716C9", this);} // tgen

static void Test_S7716C9()
{
  extern Class_Descriptor cd_S7716C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(107,233)];
    init_test(&cd_S7716C9, buf);
    S7716C9 *dp, &lv = *(dp=new (buf) S7716C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1696,928), "sizeof(S7716C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7716C9)");
    /*is_ambiguous_... S7716C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(384,200), "S7716C9");
    check_base_class_offset(lv, (S2489C3*)(S7716C6*), ABISELECT(1568,856), "S7716C9");
    check_base_class_offset(lv, (S7716C6*), 0, "S7716C9");
    check_field_offset(lv, s7716c9f0, ABISELECT(512,272), "S7716C9.s7716c9f0");
    check_field_offset(lv, s7716c9f1, ABISELECT(528,276), "S7716C9.s7716c9f1");
    check_field_offset(lv, s7716c9f2, ABISELECT(544,288), "S7716C9.s7716c9f2");
    check_field_offset(lv, s7716c9f3, ABISELECT(1440,792), "S7716C9.s7716c9f3");
    check_field_offset(lv, s7716c9f4, ABISELECT(1456,804), "S7716C9.s7716c9f4");
    check_field_offset(lv, s7716c9f5, ABISELECT(1536,844), "S7716C9.s7716c9f5");
    check_field_offset(lv, s7716c9f6, ABISELECT(1544,848), "S7716C9.s7716c9f6");
    check_field_offset(lv, s7716c9f7, ABISELECT(1552,852), "S7716C9.s7716c9f7");
    test_class_info(&lv, &cd_S7716C9);
    dp->~S7716C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7716C9(Test_S7716C9, "S7716C9", ABISELECT(1696,928));

#else // __cplusplus

extern void _ZN7S7716C9C1Ev();
extern void _ZN7S7716C9D1Ev();
Name_Map name_map_S7716C9[] = {
  NSPAIR(_ZN7S7716C9C1Ev),
  NSPAIR(_ZN7S7716C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C6;
extern VTBL_ENTRY _ZTI7S7716C6[];
extern  VTBL_ENTRY _ZTV7S7716C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C6[];
static Base_Class bases_S7716C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(384,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(1568,856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7716C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7716C9[];
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY vtc_S7716C9[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C9[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern VTBL_ENTRY _ZTV7S7716C9[];
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__7S7716C9[] = {
  ABISELECT(1568,856),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C6[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
static  VTT_ENTRY vtt_S7716C9[] = {
  {&(_ZTV7S7716C9[3]),  3,6},
  {&(_tg__ZTV7S7716C6__7S7716C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7716C9[];
extern  VTBL_ENTRY _ZTV7S7716C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C9[];
Class_Descriptor cd_S7716C9 = {  "S7716C9", // class name
  bases_S7716C9, 3,
  &(vtc_S7716C9[0]), // expected_vtbl_contents
  &(vtt_S7716C9[0]), // expected_vtt_contents
  ABISELECT(1696,928), // object size
  NSPAIRA(_ZTI7S7716C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7716C9),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7716C9),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7716C8  : S2489C3 , virtual S7716C6 , virtual S7716C3 , virtual S7716C9 {
  char s7716c8f0;
  int s7716c8f1[7];
  long s7716c8f2[5];
  long s7716c8f3;
  __tsi64 s7716c8f4;
  __tsi64 s7716c8f5;
  ::S2488C11 s7716c8f6;
  virtual  ~S7716C8(); // _ZN7S7716C8D2Ev
  virtual void  v5(); // _ZN7S7716C82v5Ev
  S7716C8(); // tgen
};
//SIG(-1 S7716C8) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ VBC2 v2 v3 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 Fl FU5} VBC6{ VBC2 VBC4 vd v4 FL FL FL Fl Fi FU5 Fc[10] Fi} VBC7{ BC2 BC4 v5 Fp FD FC2[7] FD FU3 Fs Fl Fl} vd v1 Fc Fi[7] Fl[5] Fl FL FL FU8{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}}


 S7716C8 ::~S7716C8(){ note_dtor("S7716C8", this);}
void  S7716C8 ::v5(){vfunc_called(this, "_ZN7S7716C82v5Ev");}
S7716C8 ::S7716C8(){ note_ctor("S7716C8", this);} // tgen

static void Test_S7716C8()
{
  extern Class_Descriptor cd_S7716C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(157,345)];
    init_test(&cd_S7716C8, buf);
    S7716C8 *dp, &lv = *(dp=new (buf) S7716C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2496,1376), "sizeof(S7716C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7716C8)");
    /*is_ambiguous_... S7716C8::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(16,4), "S7716C8");
    /*is_ambiguous_... S7716C8::S7716C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C6*), ABISELECT(672,368), "S7716C8");
    check_base_class_offset(lv, (S2489C3*)(S7716C3*), ABISELECT(672,368), "S7716C8");
    check_base_class_offset(lv, (S2489C3*)(S7716C6*)(S7716C9*), ABISELECT(672,368), "S7716C8");
    /*is_ambiguous_... S7716C8::S7716C6 */ AMB_check_base_class_offset(lv, (S7716C6*), ABISELECT(288,168), "S7716C8");
    check_base_class_offset(lv, (S7716C6*)(S7716C3*), ABISELECT(288,168), "S7716C8");
    check_base_class_offset(lv, (S7716C3*), ABISELECT(800,440), "S7716C8");
    /*is_ambiguous_... S7716C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C9*), ABISELECT(1312,720), "S7716C8");
    check_base_class_offset(lv, (S7716C6*)(S7716C9*), ABISELECT(928,520), "S7716C8");
    check_base_class_offset(lv, (S7716C9*), ABISELECT(928,520), "S7716C8");
    check_field_offset(lv, s7716c8f0, ABISELECT(144,76), "S7716C8.s7716c8f0");
    check_field_offset(lv, s7716c8f1, ABISELECT(148,80), "S7716C8.s7716c8f1");
    check_field_offset(lv, s7716c8f2, ABISELECT(176,108), "S7716C8.s7716c8f2");
    check_field_offset(lv, s7716c8f3, ABISELECT(216,128), "S7716C8.s7716c8f3");
    check_field_offset(lv, s7716c8f4, ABISELECT(224,132), "S7716C8.s7716c8f4");
    check_field_offset(lv, s7716c8f5, ABISELECT(232,140), "S7716C8.s7716c8f5");
    check_field_offset(lv, s7716c8f6, ABISELECT(240,148), "S7716C8.s7716c8f6");
    test_class_info(&lv, &cd_S7716C8);
    dp->~S7716C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7716C8(Test_S7716C8, "S7716C8", ABISELECT(2496,1376));

#else // __cplusplus

extern void _ZN7S7716C8C1Ev();
extern void _ZN7S7716C8D2Ev();
Name_Map name_map_S7716C8[] = {
  NSPAIR(_ZN7S7716C8C1Ev),
  NSPAIR(_ZN7S7716C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C6;
extern VTBL_ENTRY _ZTI7S7716C6[];
extern  VTBL_ENTRY _ZTV7S7716C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C6[];
extern Class_Descriptor cd_S7716C3;
extern VTBL_ENTRY _ZTI7S7716C3[];
extern  VTBL_ENTRY _ZTV7S7716C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C6;
extern VTBL_ENTRY _ZTI7S7716C6[];
extern  VTBL_ENTRY _ZTV7S7716C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C6[];
extern Class_Descriptor cd_S7716C9;
extern VTBL_ENTRY _ZTI7S7716C9[];
extern  VTBL_ENTRY _ZTV7S7716C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C9[];
static Base_Class bases_S7716C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(672,368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7716C6,    ABISELECT(288,168), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7716C3,    ABISELECT(800,440), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(1312,720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7716C6,    ABISELECT(928,520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7716C9,    ABISELECT(928,520), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7716C8[];
extern void _ZN7S7716C8D1Ev();
extern void _ZN7S7716C8D0Ev();
extern void _ZN7S7716C82v5Ev();
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S7716C8D1Ev,_ZTv0_n20_N7S7716C8D1Ev)();
extern void ABISELECT(_ZThn800_N7S7716C8D1Ev,_ZThn440_N7S7716C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7716C8D0Ev,_ZTv0_n20_N7S7716C8D0Ev)();
extern void ABISELECT(_ZThn800_N7S7716C8D0Ev,_ZThn440_N7S7716C8D0Ev)() __attribute__((weak));
extern void _ZN7S7716C32v3Ev();
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY vtc_S7716C8[] = {
  ABISELECT(928,520),
  ABISELECT(800,440),
  ABISELECT(672,368),
  ABISELECT(288,168),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7716C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C82v5Ev,
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  0,
  ABISELECT(-800,-440),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-800,-440),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C8D1Ev,_ZTv0_n20_N7S7716C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C8D0Ev,_ZTv0_n20_N7S7716C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-928,-520),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern VTBL_ENTRY _ZTV7S7716C8[];
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__7S7716C8[] = {
  ABISELECT(384,200),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C6[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN7S7716C3D1Ev();
extern void _ZN7S7716C3D0Ev();
extern void _ZN7S7716C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C3__7S7716C8[] = {
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C3[0]),
  (VTBL_ENTRY)&_ZN7S7716C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7716C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__7S7716C3__7S7716C8[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(512,272),
  (VTBL_ENTRY)&(_ZTI7S7716C3[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C9__7S7716C8[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C9[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C67S7716C9__A1__7S7716C8[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C6[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
static  VTT_ENTRY vtt_S7716C8[] = {
  {&(_ZTV7S7716C8[6]),  6,34},
  {&(_ZTV7S7716C8[14]),  14,34},
  {&(_ZTV7S7716C8[22]),  22,34},
  {&(_ZTV7S7716C8[31]),  31,34},
  {&(_tg__ZTV7S7716C6__7S7716C8[3]),  3,5},
  {&(_tg__ZTV7S7716C3__7S7716C8[4]),  4,7},
  {&(_tg__ZTV7S7716C6__7S7716C3__7S7716C8[5]),  5,7},
  {&(_tg__ZTV7S7716C9__7S7716C8[3]),  3,6},
  {&(_tg__ZTV7S7716C67S7716C9__A1__7S7716C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7716C8[];
extern  VTBL_ENTRY _ZTV7S7716C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C8[];
static VTBL_ENTRY alt_thunk_names58[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7716C8D0Ev,_ZTv0_n20_N7S7716C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N7S7716C8D0Ev,_ZThn440_N7S7716C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7716C8D1Ev,_ZTv0_n20_N7S7716C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N7S7716C8D1Ev,_ZThn440_N7S7716C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7716C8 = {  "S7716C8", // class name
  bases_S7716C8, 7,
  &(vtc_S7716C8[0]), // expected_vtbl_contents
  &(vtt_S7716C8[0]), // expected_vtt_contents
  ABISELECT(2496,1376), // object size
  NSPAIRA(_ZTI7S7716C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7716C8),34, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7716C8),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names58,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7716C2  : virtual S7716C3 , S7716C8 , S2489C3 , S7716C6 {
  ::S2489C7 s7716c2f0;
  int s7716c2f1;
  long s7716c2f2;
  char s7716c2f3;
  void *s7716c2f4;
  ::S7716C9 s7716c2f5;
  short s7716c2f6;
  virtual  ~S7716C2(); // _ZN7S7716C2D2Ev
  virtual void  v6(); // _ZN7S7716C22v6Ev
  virtual void  v7(); // _ZN7S7716C22v7Ev
  virtual void  v8(); // _ZN7S7716C22v8Ev
  S7716C2(); // tgen
};
//SIG(-1 S7716C2) C1{ VBC2{ VBC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC5{ VBC3 v4 v5 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 Fl FU6} vd v6 FL FL FL Fl Fi FU6 Fc[10] Fi} BC7{ BC3 VBC5 VBC2 VBC8{ BC3 BC5 v7 Fp FD FC3[7] FD FU4 Fs Fl Fl} vd v8 Fc Fi[7] Fl[5] Fl FL FL FU9{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} BC3 BC5 vd v1 v2 v3 FU6 Fi Fl Fc Fp FC8 Fs}


 S7716C2 ::~S7716C2(){ note_dtor("S7716C2", this);}
void  S7716C2 ::v6(){vfunc_called(this, "_ZN7S7716C22v6Ev");}
void  S7716C2 ::v7(){vfunc_called(this, "_ZN7S7716C22v7Ev");}
void  S7716C2 ::v8(){vfunc_called(this, "_ZN7S7716C22v8Ev");}
S7716C2 ::S7716C2(){ note_ctor("S7716C2", this);} // tgen

static void Test_S7716C2()
{
  extern Class_Descriptor cd_S7716C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(301,657)];
    init_test(&cd_S7716C2, buf);
    S7716C2 *dp, &lv = *(dp=new (buf) S7716C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4800,2624), "sizeof(S7716C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7716C2)");
    check_base_class_offset(lv, (S2489C3*)(S7716C3*), ABISELECT(2720,1496), "S7716C2");
    /*is_ambiguous_... S7716C2::S7716C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C6*), ABISELECT(2720,1496), "S7716C2");
    check_base_class_offset(lv, (S2489C3*)(S7716C6*)(S7716C9*), ABISELECT(2720,1496), "S7716C2");
    /*is_ambiguous_... S7716C2::S7716C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C6*), ABISELECT(2720,1496), "S7716C2");
    check_base_class_offset(lv, (S7716C6*)(S7716C3*), ABISELECT(2848,1568), "S7716C2");
    /*is_ambiguous_... S7716C8::S7716C6 */ AMB_check_base_class_offset(lv, (S7716C6*)(S7716C8*), ABISELECT(2848,1568), "S7716C2");
    check_base_class_offset(lv, (S7716C3*), ABISELECT(2600,1416), "S7716C2");
    check_base_class_offset(lv, (S7716C3*)(S7716C8*), ABISELECT(2600,1416), "S7716C2");
    /*is_ambiguous_... S7716C8::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C8*), ABISELECT(16,4), "S7716C2");
    /*is_ambiguous_... S7716C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C9*), ABISELECT(3616,1968), "S7716C2");
    check_base_class_offset(lv, (S7716C6*)(S7716C9*), ABISELECT(3232,1768), "S7716C2");
    check_base_class_offset(lv, (S7716C9*)(S7716C8*), ABISELECT(3232,1768), "S7716C2");
    check_base_class_offset(lv, (S7716C8*), 0, "S7716C2");
    /*is_ambiguous_... S7716C2::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(288,168), "S7716C2");
    /*is_ambiguous_... S7716C2::S7716C6 */ AMB_check_base_class_offset(lv, (S7716C6*), ABISELECT(416,240), "S7716C2");
    check_field_offset(lv, s7716c2f0, ABISELECT(800,440), "S7716C2.s7716c2f0");
    check_field_offset(lv, s7716c2f1, ABISELECT(856,468), "S7716C2.s7716c2f1");
    check_field_offset(lv, s7716c2f2, ABISELECT(864,472), "S7716C2.s7716c2f2");
    check_field_offset(lv, s7716c2f3, ABISELECT(872,476), "S7716C2.s7716c2f3");
    check_field_offset(lv, s7716c2f4, ABISELECT(880,480), "S7716C2.s7716c2f4");
    check_field_offset(lv, s7716c2f5, ABISELECT(896,484), "S7716C2.s7716c2f5");
    check_field_offset(lv, s7716c2f6, ABISELECT(2592,1412), "S7716C2.s7716c2f6");
    test_class_info(&lv, &cd_S7716C2);
    dp->~S7716C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7716C2(Test_S7716C2, "S7716C2", ABISELECT(4800,2624));

#else // __cplusplus

extern void _ZN7S7716C2C1Ev();
extern void _ZN7S7716C2D2Ev();
Name_Map name_map_S7716C2[] = {
  NSPAIR(_ZN7S7716C2C1Ev),
  NSPAIR(_ZN7S7716C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C6;
extern VTBL_ENTRY _ZTI7S7716C6[];
extern  VTBL_ENTRY _ZTV7S7716C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C6[];
extern Class_Descriptor cd_S7716C3;
extern VTBL_ENTRY _ZTI7S7716C3[];
extern  VTBL_ENTRY _ZTV7S7716C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C6;
extern VTBL_ENTRY _ZTI7S7716C6[];
extern  VTBL_ENTRY _ZTV7S7716C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C6[];
extern Class_Descriptor cd_S7716C9;
extern VTBL_ENTRY _ZTI7S7716C9[];
extern  VTBL_ENTRY _ZTV7S7716C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C9[];
extern Class_Descriptor cd_S7716C8;
extern VTBL_ENTRY _ZTI7S7716C8[];
extern  VTBL_ENTRY _ZTV7S7716C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C6;
extern VTBL_ENTRY _ZTI7S7716C6[];
extern  VTBL_ENTRY _ZTV7S7716C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C6[];
static Base_Class bases_S7716C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(2720,1496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7716C6,    ABISELECT(2848,1568), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7716C3,    ABISELECT(2600,1416), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(3616,1968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7716C6,    ABISELECT(3232,1768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7716C9,    ABISELECT(3232,1768), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7716C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(288,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7716C6,    ABISELECT(416,240), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7716C2[];
extern void _ZN7S7716C2D1Ev();
extern void _ZN7S7716C2D0Ev();
extern void _ZN7S7716C82v5Ev();
extern void _ZN7S7716C22v6Ev();
extern void _ZN7S7716C22v7Ev();
extern void _ZN7S7716C22v8Ev();
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S7716C2D1Ev,_ZTv0_n20_N7S7716C2D1Ev)();
extern void ABISELECT(_ZThn2600_N7S7716C2D1Ev,_ZThn1416_N7S7716C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7716C2D0Ev,_ZTv0_n20_N7S7716C2D0Ev)();
extern void ABISELECT(_ZThn2600_N7S7716C2D0Ev,_ZThn1416_N7S7716C2D0Ev)() __attribute__((weak));
extern void _ZN7S7716C32v3Ev();
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY vtc_S7716C2[] = {
  ABISELECT(3232,1768),
  ABISELECT(2600,1416),
  ABISELECT(2720,1496),
  ABISELECT(2848,1568),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&_ZN7S7716C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7716C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v8Ev,
  ABISELECT(2304,1256),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  0,
  ABISELECT(-2600,-1416),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-2600,-1416),
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C2D1Ev,_ZTv0_n20_N7S7716C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C2D0Ev,_ZTv0_n20_N7S7716C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2848,-1568),
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-3232,-1768),
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern VTBL_ENTRY _ZTV7S7716C2[];
extern void _ZN7S7716C8D1Ev();
extern void _ZN7S7716C8D0Ev();
extern void _ZN7S7716C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C8__7S7716C2[] = {
  ABISELECT(3232,1768),
  ABISELECT(2600,1416),
  ABISELECT(2720,1496),
  ABISELECT(2848,1568),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7716C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C82v5Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__7S7716C8__7S7716C2[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-2848,-1568),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7716C8D1Ev,_ZTv0_n20_N7S7716C8D1Ev)();
extern void ABISELECT(_ZThn2600_N7S7716C8D1Ev,_ZThn1416_N7S7716C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7716C8D0Ev,_ZTv0_n20_N7S7716C8D0Ev)();
extern void ABISELECT(_ZThn2600_N7S7716C8D0Ev,_ZThn1416_N7S7716C8D0Ev)() __attribute__((weak));
extern void _ZN7S7716C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C3__7S7716C8__7S7716C2[] = {
  0,
  ABISELECT(-2600,-1416),
  ABISELECT(248,152),
  ABISELECT(120,80),
  ABISELECT(-2600,-1416),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C8D1Ev,_ZTv0_n20_N7S7716C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C8D0Ev,_ZTv0_n20_N7S7716C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C9__7S7716C8__7S7716C2[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-3232,-1768),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__A__7S7716C2[] = {
  ABISELECT(2304,1256),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C6[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN7S7716C3D1Ev();
extern void _ZN7S7716C3D0Ev();
extern void _ZN7S7716C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C3__7S7716C2[] = {
  ABISELECT(248,152),
  ABISELECT(120,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C3[0]),
  (VTBL_ENTRY)&_ZN7S7716C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7716C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__7S7716C3__7S7716C2[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-248,-152),
  (VTBL_ENTRY)&(_ZTI7S7716C3[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__7S7716C2[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C6[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C9__7S7716C2[] = {
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C9[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C67S7716C9__A1__7S7716C2[] = {
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C6[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
static  VTT_ENTRY vtt_S7716C2[] = {
  {&(_ZTV7S7716C2[6]),  6,42},
  {&(_tg__ZTV7S7716C8__7S7716C2[6]),  6,9},
  {&(_tg__ZTV7S7716C6__7S7716C8__7S7716C2[5]),  5,7},
  {&(_tg__ZTV7S7716C3__7S7716C8__7S7716C2[6]),  6,9},
  {&(_tg__ZTV7S7716C9__7S7716C8__7S7716C2[6]),  6,9},
  {&(_tg__ZTV7S7716C6__A__7S7716C2[3]),  3,5},
  {&(_ZTV7S7716C2[23]),  23,42},
  {&(_ZTV7S7716C2[31]),  31,42},
  {&(_ZTV7S7716C2[39]),  39,42},
  {&(_ZTV7S7716C2[15]),  15,42},
  {&(_tg__ZTV7S7716C3__7S7716C2[4]),  4,7},
  {&(_tg__ZTV7S7716C6__7S7716C3__7S7716C2[5]),  5,7},
  {&(_tg__ZTV7S7716C6__7S7716C2[3]),  3,5},
  {&(_tg__ZTV7S7716C9__7S7716C2[3]),  3,6},
  {&(_tg__ZTV7S7716C67S7716C9__A1__7S7716C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7716C2[];
extern  VTBL_ENTRY _ZTV7S7716C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C2[];
static VTBL_ENTRY alt_thunk_names59[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7716C8D0Ev,_ZTv0_n20_N7S7716C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N7S7716C8D0Ev,_ZThn1416_N7S7716C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7716C8D1Ev,_ZTv0_n20_N7S7716C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N7S7716C8D1Ev,_ZThn1416_N7S7716C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7716C2D0Ev,_ZTv0_n20_N7S7716C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N7S7716C2D0Ev,_ZThn1416_N7S7716C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7716C2D1Ev,_ZTv0_n20_N7S7716C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2600_N7S7716C2D1Ev,_ZThn1416_N7S7716C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7716C2 = {  "S7716C2", // class name
  bases_S7716C2, 10,
  &(vtc_S7716C2[0]), // expected_vtbl_contents
  &(vtt_S7716C2[0]), // expected_vtt_contents
  ABISELECT(4800,2624), // object size
  NSPAIRA(_ZTI7S7716C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7716C2),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7716C2),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names59,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7716C11  : S2489C3 , virtual S7716C6 , virtual S7716C3 , virtual S7716C9 , virtual S7716C2 {
  __tsi64 s7716c11f0;
  int s7716c11f1;
  void *s7716c11f2;
  void *s7716c11f3;
  long s7716c11f4;
  virtual  ~S7716C11(); // _ZN8S7716C11D2Ev
  S7716C11(); // tgen
};
//SIG(-1 S7716C11) C1{ BC2{ m Fc Fi FL FU3{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC4{ VBC2 v1 v2 Fp Fp Fi Fi FU5{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU5 Fp FL:3 FC2 Fl FU5} VBC6{ VBC2 VBC4 vd v3 FL FL FL Fl Fi FU5 Fc[10] Fi} VBC7{ BC2 BC4 v4 Fp FD FC2[7] FD FU3 Fs Fl Fl} VBC8{ VBC6 BC9{ BC2 VBC4 VBC6 VBC7 vd v5 Fc Fi[7] Fl[5] Fl FL FL FU10{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} BC2 BC4 vd v6 v7 v8 FU5 Fi Fl Fc Fp FC7 Fs} vd FL Fi Fp Fp Fl}


 S7716C11 ::~S7716C11(){ note_dtor("S7716C11", this);}
S7716C11 ::S7716C11(){ note_ctor("S7716C11", this);} // tgen

static void Test_S7716C11()
{
  extern Class_Descriptor cd_S7716C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(314,682)];
    init_test(&cd_S7716C11, buf);
    S7716C11 *dp, &lv = *(dp=new (buf) S7716C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5008,2724), "sizeof(S7716C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7716C11)");
    /*is_ambiguous_... S7716C11::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*), ABISELECT(16,4), "S7716C11");
    /*is_ambiguous_... S7716C11::S7716C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C6*), ABISELECT(576,300), "S7716C11");
    check_base_class_offset(lv, (S2489C3*)(S7716C3*), ABISELECT(576,300), "S7716C11");
    check_base_class_offset(lv, (S2489C3*)(S7716C6*)(S7716C9*), ABISELECT(576,300), "S7716C11");
    /*is_ambiguous_... S7716C2::S7716C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C6*)(S7716C2*), ABISELECT(576,300), "S7716C11");
    /*is_ambiguous_... S7716C11::S7716C6 */ AMB_check_base_class_offset(lv, (S7716C6*), ABISELECT(192,100), "S7716C11");
    check_base_class_offset(lv, (S7716C6*)(S7716C3*), ABISELECT(192,100), "S7716C11");
    /*is_ambiguous_... S7716C8::S7716C6 */ AMB_check_base_class_offset(lv, (S7716C6*)(S7716C8*)(S7716C2*), ABISELECT(192,100), "S7716C11");
    check_base_class_offset(lv, (S7716C3*), ABISELECT(704,372), "S7716C11");
    check_base_class_offset(lv, (S7716C3*)(S7716C2*), ABISELECT(704,372), "S7716C11");
    check_base_class_offset(lv, (S7716C3*)(S7716C8*)(S7716C2*), ABISELECT(704,372), "S7716C11");
    /*is_ambiguous_... S7716C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C9*), ABISELECT(1216,652), "S7716C11");
    check_base_class_offset(lv, (S7716C6*)(S7716C9*), ABISELECT(832,452), "S7716C11");
    check_base_class_offset(lv, (S7716C9*), ABISELECT(832,452), "S7716C11");
    check_base_class_offset(lv, (S7716C9*)(S7716C8*)(S7716C2*), ABISELECT(832,452), "S7716C11");
    /*is_ambiguous_... S7716C8::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C8*)(S7716C2*), ABISELECT(2416,1312), "S7716C11");
    check_base_class_offset(lv, (S7716C8*)(S7716C2*), ABISELECT(2400,1308), "S7716C11");
    /*is_ambiguous_... S7716C2::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C2*), ABISELECT(2688,1476), "S7716C11");
    /*is_ambiguous_... S7716C2::S7716C6 */ AMB_check_base_class_offset(lv, (S7716C6*)(S7716C2*), ABISELECT(2816,1548), "S7716C11");
    check_base_class_offset(lv, (S7716C2*), ABISELECT(2400,1308), "S7716C11");
    check_field_offset(lv, s7716c11f0, ABISELECT(144,76), "S7716C11.s7716c11f0");
    check_field_offset(lv, s7716c11f1, ABISELECT(152,84), "S7716C11.s7716c11f1");
    check_field_offset(lv, s7716c11f2, ABISELECT(160,88), "S7716C11.s7716c11f2");
    check_field_offset(lv, s7716c11f3, ABISELECT(168,92), "S7716C11.s7716c11f3");
    check_field_offset(lv, s7716c11f4, ABISELECT(176,96), "S7716C11.s7716c11f4");
    test_class_info(&lv, &cd_S7716C11);
    dp->~S7716C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7716C11(Test_S7716C11, "S7716C11", ABISELECT(5008,2724));

#else // __cplusplus

extern void _ZN8S7716C11C1Ev();
extern void _ZN8S7716C11D2Ev();
Name_Map name_map_S7716C11[] = {
  NSPAIR(_ZN8S7716C11C1Ev),
  NSPAIR(_ZN8S7716C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C6;
extern VTBL_ENTRY _ZTI7S7716C6[];
extern  VTBL_ENTRY _ZTV7S7716C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C6[];
extern Class_Descriptor cd_S7716C3;
extern VTBL_ENTRY _ZTI7S7716C3[];
extern  VTBL_ENTRY _ZTV7S7716C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C6;
extern VTBL_ENTRY _ZTI7S7716C6[];
extern  VTBL_ENTRY _ZTV7S7716C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C6[];
extern Class_Descriptor cd_S7716C9;
extern VTBL_ENTRY _ZTI7S7716C9[];
extern  VTBL_ENTRY _ZTV7S7716C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C9[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C8;
extern VTBL_ENTRY _ZTI7S7716C8[];
extern  VTBL_ENTRY _ZTV7S7716C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C6;
extern VTBL_ENTRY _ZTI7S7716C6[];
extern  VTBL_ENTRY _ZTV7S7716C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C6[];
extern Class_Descriptor cd_S7716C2;
extern VTBL_ENTRY _ZTI7S7716C2[];
extern  VTBL_ENTRY _ZTV7S7716C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C2[];
static Base_Class bases_S7716C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(576,300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7716C6,    ABISELECT(192,100), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7716C3,    ABISELECT(704,372), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(1216,652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7716C6,    ABISELECT(832,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7716C9,    ABISELECT(832,452), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(2416,1312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7716C8,    ABISELECT(2400,1308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(2688,1476), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7716C6,    ABISELECT(2816,1548), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7716C2,    ABISELECT(2400,1308), //bcp->offset
    34, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7716C11[];
extern void _ZN8S7716C11D1Ev();
extern void _ZN8S7716C11D0Ev();
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S7716C11D1Ev,_ZTv0_n20_N8S7716C11D1Ev)();
extern void ABISELECT(_ZThn704_N8S7716C11D1Ev,_ZThn372_N8S7716C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7716C11D0Ev,_ZTv0_n20_N8S7716C11D0Ev)();
extern void ABISELECT(_ZThn704_N8S7716C11D0Ev,_ZThn372_N8S7716C11D0Ev)() __attribute__((weak));
extern void _ZN7S7716C32v3Ev();
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
extern void ABISELECT(_ZTv0_n56_N8S7716C11D1Ev,_ZTv0_n28_N8S7716C11D1Ev)();
extern void ABISELECT(_ZThn2400_N8S7716C11D1Ev,_ZThn1308_N8S7716C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7716C11D0Ev,_ZTv0_n28_N8S7716C11D0Ev)();
extern void ABISELECT(_ZThn2400_N8S7716C11D0Ev,_ZThn1308_N8S7716C11D0Ev)() __attribute__((weak));
extern void _ZN7S7716C82v5Ev();
extern void _ZN7S7716C22v6Ev();
extern void _ZN7S7716C22v7Ev();
extern void _ZN7S7716C22v8Ev();
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY vtc_S7716C11[] = {
  ABISELECT(2400,1308),
  ABISELECT(832,452),
  ABISELECT(704,372),
  ABISELECT(576,300),
  ABISELECT(192,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S7716C11[0]),
  (VTBL_ENTRY)&_ZN8S7716C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7716C11D0Ev,
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-192,-100),
  (VTBL_ENTRY)&(_ZTI8S7716C11[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  0,
  ABISELECT(-704,-372),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-704,-372),
  (VTBL_ENTRY)&(_ZTI8S7716C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7716C11D1Ev,_ZTv0_n20_N8S7716C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7716C11D0Ev,_ZTv0_n20_N8S7716C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-832,-452),
  (VTBL_ENTRY)&(_ZTI8S7716C11[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-2400,-1308),
  ABISELECT(-1568,-856),
  ABISELECT(-1696,-936),
  ABISELECT(-1824,-1008),
  ABISELECT(-2208,-1208),
  ABISELECT(-2400,-1308),
  (VTBL_ENTRY)&(_ZTI8S7716C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7716C11D1Ev,_ZTv0_n28_N8S7716C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7716C11D0Ev,_ZTv0_n28_N8S7716C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v8Ev,
  ABISELECT(-2240,-1248),
  ABISELECT(-2816,-1548),
  (VTBL_ENTRY)&(_ZTI8S7716C11[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S7716C11[];
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__8S7716C11[] = {
  ABISELECT(384,200),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C6[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN7S7716C3D1Ev();
extern void _ZN7S7716C3D0Ev();
extern void _ZN7S7716C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C3__8S7716C11[] = {
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C3[0]),
  (VTBL_ENTRY)&_ZN7S7716C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7716C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__7S7716C3__8S7716C11[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(512,272),
  (VTBL_ENTRY)&(_ZTI7S7716C3[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C9__8S7716C11[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C9[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C67S7716C9__A1__8S7716C11[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C6[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN7S7716C2D1Ev();
extern void _ZN7S7716C2D0Ev();
extern void _ZN7S7716C82v5Ev();
extern void _ZN7S7716C22v6Ev();
extern void _ZN7S7716C22v7Ev();
extern void _ZN7S7716C22v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C2__8S7716C11[] = {
  ABISELECT(-1568,-856),
  ABISELECT(-1696,-936),
  ABISELECT(-1824,-1008),
  ABISELECT(-2208,-1208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&_ZN7S7716C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7716C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v8Ev,
};
extern void _ZN7S7716C8D1Ev();
extern void _ZN7S7716C8D0Ev();
extern void _ZN7S7716C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C87S7716C2__8S7716C11[] = {
  ABISELECT(-1568,-856),
  ABISELECT(-1696,-936),
  ABISELECT(-1824,-1008),
  ABISELECT(-2208,-1208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7716C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C82v5Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__7S7716C87S7716C2__8S7716C11[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(2208,1208),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7716C8D1Ev,_ZTv0_n20_N7S7716C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7716C8D0Ev,_ZTv0_n20_N7S7716C8D0Ev)();
extern void _ZN7S7716C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C3__7S7716C87S7716C2__8S7716C11[] = {
  0,
  ABISELECT(1696,936),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(1696,936),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C8D1Ev,_ZTv0_n20_N7S7716C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C8D0Ev,_ZTv0_n20_N7S7716C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C9__7S7716C87S7716C2__8S7716C11[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(1568,856),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C67S7716C2__A2__8S7716C11[] = {
  ABISELECT(-2240,-1248),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C6[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7716C2D1Ev,_ZTv0_n20_N7S7716C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7716C2D0Ev,_ZTv0_n20_N7S7716C2D0Ev)();
extern void _ZN7S7716C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C3__7S7716C2__8S7716C11[] = {
  0,
  ABISELECT(1696,936),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(1696,936),
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C2D1Ev,_ZTv0_n20_N7S7716C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C2D0Ev,_ZTv0_n20_N7S7716C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__7S7716C2__8S7716C11[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(2208,1208),
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C9__7S7716C2__8S7716C11[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(1568,856),
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__A__7S7716C2__8S7716C11[] = {
  ABISELECT(-2240,-1248),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
static  VTT_ENTRY vtt_S7716C11[] = {
  {&(_ZTV8S7716C11[7]),  7,58},
  {&(_ZTV8S7716C11[14]),  14,58},
  {&(_ZTV8S7716C11[22]),  22,58},
  {&(_ZTV8S7716C11[31]),  31,58},
  {&(_ZTV8S7716C11[47]),  47,58},
  {&(_ZTV8S7716C11[56]),  56,58},
  {&(_tg__ZTV7S7716C6__8S7716C11[3]),  3,5},
  {&(_tg__ZTV7S7716C3__8S7716C11[4]),  4,7},
  {&(_tg__ZTV7S7716C6__7S7716C3__8S7716C11[5]),  5,7},
  {&(_tg__ZTV7S7716C9__8S7716C11[3]),  3,6},
  {&(_tg__ZTV7S7716C67S7716C9__A1__8S7716C11[3]),  3,5},
  {&(_tg__ZTV7S7716C2__8S7716C11[6]),  6,12},
  {&(_tg__ZTV7S7716C87S7716C2__8S7716C11[6]),  6,9},
  {&(_tg__ZTV7S7716C6__7S7716C87S7716C2__8S7716C11[5]),  5,7},
  {&(_tg__ZTV7S7716C3__7S7716C87S7716C2__8S7716C11[6]),  6,9},
  {&(_tg__ZTV7S7716C9__7S7716C87S7716C2__8S7716C11[6]),  6,9},
  {&(_tg__ZTV7S7716C67S7716C2__A2__8S7716C11[3]),  3,5},
  {&(_tg__ZTV7S7716C3__7S7716C2__8S7716C11[6]),  6,9},
  {&(_tg__ZTV7S7716C6__7S7716C2__8S7716C11[5]),  5,7},
  {&(_tg__ZTV7S7716C9__7S7716C2__8S7716C11[6]),  6,9},
  {&(_tg__ZTV7S7716C6__A__7S7716C2__8S7716C11[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7716C11[];
extern  VTBL_ENTRY _ZTV8S7716C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7716C11[];
static VTBL_ENTRY alt_thunk_names60[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7716C11D0Ev,_ZTv0_n28_N8S7716C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2400_N8S7716C11D0Ev,_ZThn1308_N8S7716C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7716C11D1Ev,_ZTv0_n28_N8S7716C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2400_N8S7716C11D1Ev,_ZThn1308_N8S7716C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7716C11D0Ev,_ZTv0_n20_N8S7716C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S7716C11D0Ev,_ZThn372_N8S7716C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7716C11D1Ev,_ZTv0_n20_N8S7716C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S7716C11D1Ev,_ZThn372_N8S7716C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7716C11 = {  "S7716C11", // class name
  bases_S7716C11, 12,
  &(vtc_S7716C11[0]), // expected_vtbl_contents
  &(vtt_S7716C11[0]), // expected_vtt_contents
  ABISELECT(5008,2724), // object size
  NSPAIRA(_ZTI8S7716C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7716C11),58, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7716C11),21, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names60,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7716C12  : S7716C8 {
  void *s7716c12f0;
  void *s7716c12f1;
  void *s7716c12f2;
  int s7716c12f3;
  ::S2489C12_nt s7716c12f4;
  long s7716c12f5;
  long s7716c12f6;
  virtual  ~S7716C12(); // _ZN8S7716C12D2Ev
  virtual void  v9(); // _ZN8S7716C122v9Ev
  virtual void  v10(); // _ZN8S7716C123v10Ev
  S7716C12(); // tgen
};
//SIG(-1 S7716C12) C1{ BC2{ BC3{ m Fc Fi FL FU4{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC5{ VBC3 v3 v4 Fp Fp Fi Fi FU6{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU6 Fp FL:3 FC3 Fl FU6} VBC7{ VBC3 VBC5 vd v5 FL FL FL Fl Fi FU6 Fc[10] Fi} VBC8{ BC3 BC5 v6 Fp FD FC3[7] FD FU4 Fs Fl Fl} vd v7 Fc Fi[7] Fl[5] Fl FL FL FU9{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} vd v1 v2 Fp Fp Fp Fi FC10{} Fl Fl}


 S7716C12 ::~S7716C12(){ note_dtor("S7716C12", this);}
void  S7716C12 ::v9(){vfunc_called(this, "_ZN8S7716C122v9Ev");}
void  S7716C12 ::v10(){vfunc_called(this, "_ZN8S7716C123v10Ev");}
S7716C12 ::S7716C12(){ note_ctor("S7716C12", this);} // tgen

static void Test_S7716C12()
{
  extern Class_Descriptor cd_S7716C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(160,352)];
    init_test(&cd_S7716C12, buf);
    S7716C12 *dp, &lv = *(dp=new (buf) S7716C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2544,1404), "sizeof(S7716C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7716C12)");
    /*is_ambiguous_... S7716C8::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C8*), ABISELECT(16,4), "S7716C12");
    /*is_ambiguous_... S7716C12::S7716C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C6*), ABISELECT(720,396), "S7716C12");
    check_base_class_offset(lv, (S2489C3*)(S7716C3*), ABISELECT(720,396), "S7716C12");
    check_base_class_offset(lv, (S2489C3*)(S7716C6*)(S7716C9*), ABISELECT(720,396), "S7716C12");
    /*is_ambiguous_... S7716C8::S7716C6 */ AMB_check_base_class_offset(lv, (S7716C6*)(S7716C8*), ABISELECT(336,196), "S7716C12");
    check_base_class_offset(lv, (S7716C6*)(S7716C3*), ABISELECT(336,196), "S7716C12");
    check_base_class_offset(lv, (S7716C3*)(S7716C8*), ABISELECT(848,468), "S7716C12");
    /*is_ambiguous_... S7716C9::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C9*), ABISELECT(1360,748), "S7716C12");
    check_base_class_offset(lv, (S7716C6*)(S7716C9*), ABISELECT(976,548), "S7716C12");
    check_base_class_offset(lv, (S7716C9*)(S7716C8*), ABISELECT(976,548), "S7716C12");
    check_base_class_offset(lv, (S7716C8*), 0, "S7716C12");
    check_field_offset(lv, s7716c12f0, ABISELECT(280,168), "S7716C12.s7716c12f0");
    check_field_offset(lv, s7716c12f1, ABISELECT(288,172), "S7716C12.s7716c12f1");
    check_field_offset(lv, s7716c12f2, ABISELECT(296,176), "S7716C12.s7716c12f2");
    check_field_offset(lv, s7716c12f3, ABISELECT(304,180), "S7716C12.s7716c12f3");
    check_field_offset(lv, s7716c12f4, ABISELECT(308,184), "S7716C12.s7716c12f4");
    check_field_offset(lv, s7716c12f5, ABISELECT(312,188), "S7716C12.s7716c12f5");
    check_field_offset(lv, s7716c12f6, ABISELECT(320,192), "S7716C12.s7716c12f6");
    test_class_info(&lv, &cd_S7716C12);
    dp->~S7716C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7716C12(Test_S7716C12, "S7716C12", ABISELECT(2544,1404));

#else // __cplusplus

extern void _ZN8S7716C12C1Ev();
extern void _ZN8S7716C12D2Ev();
Name_Map name_map_S7716C12[] = {
  NSPAIR(_ZN8S7716C12C1Ev),
  NSPAIR(_ZN8S7716C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C6;
extern VTBL_ENTRY _ZTI7S7716C6[];
extern  VTBL_ENTRY _ZTV7S7716C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C6[];
extern Class_Descriptor cd_S7716C3;
extern VTBL_ENTRY _ZTI7S7716C3[];
extern  VTBL_ENTRY _ZTV7S7716C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C6;
extern VTBL_ENTRY _ZTI7S7716C6[];
extern  VTBL_ENTRY _ZTV7S7716C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C6[];
extern Class_Descriptor cd_S7716C9;
extern VTBL_ENTRY _ZTI7S7716C9[];
extern  VTBL_ENTRY _ZTV7S7716C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C9[];
extern Class_Descriptor cd_S7716C8;
extern VTBL_ENTRY _ZTI7S7716C8[];
extern  VTBL_ENTRY _ZTV7S7716C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C8[];
static Base_Class bases_S7716C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(720,396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7716C6,    ABISELECT(336,196), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7716C3,    ABISELECT(848,468), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(1360,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7716C6,    ABISELECT(976,548), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7716C9,    ABISELECT(976,548), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7716C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7716C12[];
extern void _ZN8S7716C12D1Ev();
extern void _ZN8S7716C12D0Ev();
extern void _ZN7S7716C82v5Ev();
extern void _ZN8S7716C122v9Ev();
extern void _ZN8S7716C123v10Ev();
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S7716C12D1Ev,_ZTv0_n20_N8S7716C12D1Ev)();
extern void ABISELECT(_ZThn848_N8S7716C12D1Ev,_ZThn468_N8S7716C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7716C12D0Ev,_ZTv0_n20_N8S7716C12D0Ev)();
extern void ABISELECT(_ZThn848_N8S7716C12D0Ev,_ZThn468_N8S7716C12D0Ev)() __attribute__((weak));
extern void _ZN7S7716C32v3Ev();
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY vtc_S7716C12[] = {
  ABISELECT(976,548),
  ABISELECT(848,468),
  ABISELECT(720,396),
  ABISELECT(336,196),
  0,
  (VTBL_ENTRY)&(_ZTI8S7716C12[0]),
  (VTBL_ENTRY)&_ZN8S7716C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7716C12D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C82v5Ev,
  (VTBL_ENTRY)&_ZN8S7716C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7716C123v10Ev,
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-336,-196),
  (VTBL_ENTRY)&(_ZTI8S7716C12[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  0,
  ABISELECT(-848,-468),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-848,-468),
  (VTBL_ENTRY)&(_ZTI8S7716C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7716C12D1Ev,_ZTv0_n20_N8S7716C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7716C12D0Ev,_ZTv0_n20_N8S7716C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-976,-548),
  (VTBL_ENTRY)&(_ZTI8S7716C12[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern VTBL_ENTRY _ZTV8S7716C12[];
extern void _ZN7S7716C8D1Ev();
extern void _ZN7S7716C8D0Ev();
extern void _ZN7S7716C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C8__8S7716C12[] = {
  ABISELECT(976,548),
  ABISELECT(848,468),
  ABISELECT(720,396),
  ABISELECT(336,196),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7716C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C82v5Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__7S7716C8__8S7716C12[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(-336,-196),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7716C8D1Ev,_ZTv0_n20_N7S7716C8D1Ev)();
extern void ABISELECT(_ZThn848_N7S7716C8D1Ev,_ZThn468_N7S7716C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7716C8D0Ev,_ZTv0_n20_N7S7716C8D0Ev)();
extern void ABISELECT(_ZThn848_N7S7716C8D0Ev,_ZThn468_N7S7716C8D0Ev)() __attribute__((weak));
extern void _ZN7S7716C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C3__7S7716C8__8S7716C12[] = {
  0,
  ABISELECT(-848,-468),
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  ABISELECT(-848,-468),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C8D1Ev,_ZTv0_n20_N7S7716C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C8D0Ev,_ZTv0_n20_N7S7716C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C9__7S7716C8__8S7716C12[] = {
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-976,-548),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__8S7716C12[] = {
  ABISELECT(384,200),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C6[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN7S7716C3D1Ev();
extern void _ZN7S7716C3D0Ev();
extern void _ZN7S7716C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C3__8S7716C12[] = {
  ABISELECT(-512,-272),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C3[0]),
  (VTBL_ENTRY)&_ZN7S7716C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7716C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__7S7716C3__8S7716C12[] = {
  0,
  0,
  ABISELECT(384,200),
  ABISELECT(512,272),
  (VTBL_ENTRY)&(_ZTI7S7716C3[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C9__8S7716C12[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C9[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C67S7716C9__A1__8S7716C12[] = {
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C6[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
static  VTT_ENTRY vtt_S7716C12[] = {
  {&(_ZTV8S7716C12[6]),  6,36},
  {&(_tg__ZTV7S7716C8__8S7716C12[6]),  6,9},
  {&(_tg__ZTV7S7716C6__7S7716C8__8S7716C12[5]),  5,7},
  {&(_tg__ZTV7S7716C3__7S7716C8__8S7716C12[6]),  6,9},
  {&(_tg__ZTV7S7716C9__7S7716C8__8S7716C12[6]),  6,9},
  {&(_ZTV8S7716C12[16]),  16,36},
  {&(_ZTV8S7716C12[24]),  24,36},
  {&(_ZTV8S7716C12[33]),  33,36},
  {&(_tg__ZTV7S7716C6__8S7716C12[3]),  3,5},
  {&(_tg__ZTV7S7716C3__8S7716C12[4]),  4,7},
  {&(_tg__ZTV7S7716C6__7S7716C3__8S7716C12[5]),  5,7},
  {&(_tg__ZTV7S7716C9__8S7716C12[3]),  3,6},
  {&(_tg__ZTV7S7716C67S7716C9__A1__8S7716C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7716C12[];
extern  VTBL_ENTRY _ZTV8S7716C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7716C12[];
static VTBL_ENTRY alt_thunk_names61[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7716C8D0Ev,_ZTv0_n20_N7S7716C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S7716C8D0Ev,_ZThn468_N7S7716C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7716C8D1Ev,_ZTv0_n20_N7S7716C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S7716C8D1Ev,_ZThn468_N7S7716C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7716C12D0Ev,_ZTv0_n20_N8S7716C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S7716C12D0Ev,_ZThn468_N8S7716C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7716C12D1Ev,_ZTv0_n20_N8S7716C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S7716C12D1Ev,_ZThn468_N8S7716C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7716C12 = {  "S7716C12", // class name
  bases_S7716C12, 8,
  &(vtc_S7716C12[0]), // expected_vtbl_contents
  &(vtt_S7716C12[0]), // expected_vtt_contents
  ABISELECT(2544,1404), // object size
  NSPAIRA(_ZTI8S7716C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7716C12),36, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7716C12),13, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names61,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7716C1  : S7716C2 , S7716C9 , S7716C6 , virtual S7716C11 , S7716C12 {
  int s7716c1f0;
  void *s7716c1f1;
  void *s7716c1f2[6];
  ::S19559C17 s7716c1f3;
  virtual  ~S7716C1(); // _ZN7S7716C1D2Ev
  S7716C1(); // tgen
};
//SIG(1 S7716C1) C1{ BC2{ VBC3{ VBC4{ m Fc Fi FL FU5{ m FD FL Fi Fl Fc Fi[7] FD Fp Fp[10] FL Fp FL Fi} Fs FL:12 FL Fi} VBC6{ VBC4 v1 v2 Fp Fp Fi Fi FU7{ m FL Fi FL Fp[7] FL:12} FL:0 FD FU7 Fp FL:3 FC4 Fl FU7} vd v3 FL FL FL Fl Fi FU7 Fc[10] Fi} BC8{ BC4 VBC6 VBC3 VBC9{ BC4 BC6 v4 Fp FD FC4[7] FD FU5 Fs Fl Fl} vd v5 Fc Fi[7] Fl[5] Fl FL FL FU10{ m Fp Fi Fp Fc Fc Fl[5] Fp Fp Fp}} BC4 BC6 vd v6 v7 v8 FU7 Fi Fl Fc Fp FC9 Fs} BC9 BC6 VBC11{ BC4 VBC6 VBC3 VBC9 VBC2 vd FL Fi Fp Fp Fl} BC12{ BC8 vd v9 v10 Fp Fp Fp Fi FC13{} Fl Fl} vd Fi Fp Fp[6] FC14{ v11 FD FC15{ VBC16{ BC4 BC17{ VBC4 v12 v13 Fp Fp Fi Fi FU7 FL:0 FD FU7 Fp FL:3 FC4 Fl FU7} v14 Fp FD FC4[7] FD FU5 Fs Fl Fl} VBC18{ VBC4 VBC17 vd v15 FL FL FL Fl Fi FU7 Fc[10] Fi} Fi Fp Fi FU7}[6] Fc Fp Fp Fi[6] Fi Fp Fl Fp Fi Fp Fp}}


 S7716C1 ::~S7716C1(){ note_dtor("S7716C1", this);}
S7716C1 ::S7716C1(){ note_ctor("S7716C1", this);} // tgen

static void Test_S7716C1()
{
  extern Class_Descriptor cd_S7716C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1497,3255)];
    init_test(&cd_S7716C1, buf);
    S7716C1 *dp, &lv = *(dp=new (buf) S7716C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(23936,13016), "sizeof(S7716C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7716C1)");
    check_base_class_offset(lv, (S2489C3*)(S7716C3*), ABISELECT(19056,10372), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C6*), ABISELECT(19056,10372), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C9 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C6*)(S7716C9*), ABISELECT(19056,10372), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C2 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C6*)(S7716C2*), ABISELECT(19056,10372), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C9 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C6*)(S7716C9*), ABISELECT(19056,10372), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C6 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C6*), ABISELECT(19056,10372), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C2 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C6*)(S7716C2*), ABISELECT(19056,10372), "S7716C1");
    check_base_class_offset(lv, (S7716C6*)(S7716C3*), ABISELECT(19184,10444), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C2 */ AMB_check_base_class_offset(lv, (S7716C6*)(S7716C8*)(S7716C2*), ABISELECT(19184,10444), "S7716C1");
    /*is_ambiguous_... S7716C11::S7716C6 */ AMB_check_base_class_offset(lv, (S7716C6*)(S7716C11*), ABISELECT(19184,10444), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C2 */ AMB_check_base_class_offset(lv, (S7716C6*)(S7716C8*)(S7716C2*), ABISELECT(19184,10444), "S7716C1");
    /*is_ambiguous_... S7716C8::S7716C6 */ AMB_check_base_class_offset(lv, (S7716C6*)(S7716C8*)(S7716C12*), ABISELECT(19184,10444), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C2 */ AMB_check_base_class_offset(lv, (S7716C3*)(S7716C2*), ABISELECT(18928,10292), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C2 */ AMB_check_base_class_offset(lv, (S7716C3*)(S7716C8*)(S7716C2*), ABISELECT(18928,10292), "S7716C1");
    check_base_class_offset(lv, (S7716C3*)(S7716C11*), ABISELECT(18928,10292), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C2 */ AMB_check_base_class_offset(lv, (S7716C3*)(S7716C2*), ABISELECT(18928,10292), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C2 */ AMB_check_base_class_offset(lv, (S7716C3*)(S7716C8*)(S7716C2*), ABISELECT(18928,10292), "S7716C1");
    check_base_class_offset(lv, (S7716C3*)(S7716C8*)(S7716C12*), ABISELECT(18928,10292), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C2 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C8*)(S7716C2*), ABISELECT(16,4), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C9 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C9*), ABISELECT(19952,10844), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C9 */ AMB_check_base_class_offset(lv, (S7716C6*)(S7716C9*), ABISELECT(19568,10644), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C2 */ AMB_check_base_class_offset(lv, (S7716C9*)(S7716C8*)(S7716C2*), ABISELECT(19568,10644), "S7716C1");
    check_base_class_offset(lv, (S7716C9*)(S7716C11*), ABISELECT(19568,10644), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C2 */ AMB_check_base_class_offset(lv, (S7716C9*)(S7716C8*)(S7716C2*), ABISELECT(19568,10644), "S7716C1");
    check_base_class_offset(lv, (S7716C9*)(S7716C8*)(S7716C12*), ABISELECT(19568,10644), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C2 */ AMB_check_base_class_offset(lv, (S7716C8*)(S7716C2*), 0, "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C2 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C2*), ABISELECT(288,168), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C2 */ AMB_check_base_class_offset(lv, (S7716C6*)(S7716C2*), ABISELECT(416,240), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C2 */ AMB_check_base_class_offset(lv, (S7716C2*), 0, "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C9 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C9*), ABISELECT(2992,1616), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C9 */ AMB_check_base_class_offset(lv, (S7716C6*)(S7716C9*), ABISELECT(2608,1416), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C9 */ AMB_check_base_class_offset(lv, (S7716C9*), ABISELECT(2608,1416), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C6 */ AMB_check_base_class_offset(lv, (S7716C6*), ABISELECT(4176,2272), "S7716C1");
    /*is_ambiguous_... S7716C11::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C11*), ABISELECT(21152,11504), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C2 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C8*)(S7716C2*), ABISELECT(21344,11604), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C2 */ AMB_check_base_class_offset(lv, (S7716C8*)(S7716C2*), ABISELECT(21328,11600), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C2 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C2*), ABISELECT(21616,11768), "S7716C1");
    /*is_ambiguous_... S7716C1::S7716C2 */ AMB_check_base_class_offset(lv, (S7716C6*)(S7716C2*), ABISELECT(21744,11840), "S7716C1");
    check_base_class_offset(lv, (S7716C2*)(S7716C11*), ABISELECT(21328,11600), "S7716C1");
    check_base_class_offset(lv, (S7716C11*), ABISELECT(21136,11500), "S7716C1");
    /*is_ambiguous_... S7716C8::S2489C3 */ AMB_check_base_class_offset(lv, (S2489C3*)(S7716C8*)(S7716C12*), ABISELECT(4576,2476), "S7716C1");
    check_base_class_offset(lv, (S7716C8*)(S7716C12*), ABISELECT(4560,2472), "S7716C1");
    check_base_class_offset(lv, (S7716C12*), ABISELECT(4560,2472), "S7716C1");
    check_field_offset(lv, s7716c1f0, ABISELECT(4888,2668), "S7716C1.s7716c1f0");
    check_field_offset(lv, s7716c1f1, ABISELECT(4896,2672), "S7716C1.s7716c1f1");
    check_field_offset(lv, s7716c1f2, ABISELECT(4904,2676), "S7716C1.s7716c1f2");
    check_field_offset(lv, s7716c1f3, ABISELECT(4960,2700), "S7716C1.s7716c1f3");
    test_class_info(&lv, &cd_S7716C1);
    dp->~S7716C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7716C1(Test_S7716C1, "S7716C1", ABISELECT(23936,13016));

#else // __cplusplus

extern void _ZN7S7716C1C1Ev();
extern void _ZN7S7716C1D2Ev();
Name_Map name_map_S7716C1[] = {
  NSPAIR(_ZN7S7716C1C1Ev),
  NSPAIR(_ZN7S7716C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C6;
extern VTBL_ENTRY _ZTI7S7716C6[];
extern  VTBL_ENTRY _ZTV7S7716C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C6[];
extern Class_Descriptor cd_S7716C3;
extern VTBL_ENTRY _ZTI7S7716C3[];
extern  VTBL_ENTRY _ZTV7S7716C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C6;
extern VTBL_ENTRY _ZTI7S7716C6[];
extern  VTBL_ENTRY _ZTV7S7716C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C6[];
extern Class_Descriptor cd_S7716C9;
extern VTBL_ENTRY _ZTI7S7716C9[];
extern  VTBL_ENTRY _ZTV7S7716C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C9[];
extern Class_Descriptor cd_S7716C8;
extern VTBL_ENTRY _ZTI7S7716C8[];
extern  VTBL_ENTRY _ZTV7S7716C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C6;
extern VTBL_ENTRY _ZTI7S7716C6[];
extern  VTBL_ENTRY _ZTV7S7716C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C6[];
extern Class_Descriptor cd_S7716C2;
extern VTBL_ENTRY _ZTI7S7716C2[];
extern  VTBL_ENTRY _ZTV7S7716C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C2[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C6;
extern VTBL_ENTRY _ZTI7S7716C6[];
extern  VTBL_ENTRY _ZTV7S7716C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C6[];
extern Class_Descriptor cd_S7716C9;
extern VTBL_ENTRY _ZTI7S7716C9[];
extern  VTBL_ENTRY _ZTV7S7716C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C9[];
extern Class_Descriptor cd_S7716C6;
extern VTBL_ENTRY _ZTI7S7716C6[];
extern  VTBL_ENTRY _ZTV7S7716C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C6[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C8;
extern VTBL_ENTRY _ZTI7S7716C8[];
extern  VTBL_ENTRY _ZTV7S7716C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C8[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C6;
extern VTBL_ENTRY _ZTI7S7716C6[];
extern  VTBL_ENTRY _ZTV7S7716C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C6[];
extern Class_Descriptor cd_S7716C2;
extern VTBL_ENTRY _ZTI7S7716C2[];
extern  VTBL_ENTRY _ZTV7S7716C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C2[];
extern Class_Descriptor cd_S7716C11;
extern VTBL_ENTRY _ZTI8S7716C11[];
extern  VTBL_ENTRY _ZTV8S7716C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7716C11[];
extern Class_Descriptor cd_S2489C3;
extern VTBL_ENTRY _ZTI7S2489C3[];
extern Class_Descriptor cd_S7716C8;
extern VTBL_ENTRY _ZTI7S7716C8[];
extern  VTBL_ENTRY _ZTV7S7716C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C8[];
extern Class_Descriptor cd_S7716C12;
extern VTBL_ENTRY _ZTI8S7716C12[];
extern  VTBL_ENTRY _ZTV8S7716C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7716C12[];
static Base_Class bases_S7716C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C3,    ABISELECT(19056,10372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7716C6,    ABISELECT(19184,10444), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7716C3,    ABISELECT(18928,10292), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2489C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(19952,10844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7716C6,    ABISELECT(19568,10644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7716C9,    ABISELECT(19568,10644), //bcp->offset
    57, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7716C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(288,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7716C6,    ABISELECT(416,240), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7716C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(2992,1616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7716C6,    ABISELECT(2608,1416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7716C9,    ABISELECT(2608,1416), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7716C6,    ABISELECT(4176,2272), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2489C3,    ABISELECT(21152,11504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(21344,11604), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7716C8,    ABISELECT(21328,11600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2489C3,    ABISELECT(21616,11768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7716C6,    ABISELECT(21744,11840), //bcp->offset
    95, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7716C2,    ABISELECT(21328,11600), //bcp->offset
    76, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7716C11,    ABISELECT(21136,11500), //bcp->offset
    66, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2489C3,    ABISELECT(4576,2476), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7716C8,    ABISELECT(4560,2472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7716C12,    ABISELECT(4560,2472), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7716C1[];
extern void _ZN7S7716C1D1Ev();
extern void _ZN7S7716C1D0Ev();
extern void _ZN7S7716C82v5Ev();
extern void _ZN7S7716C22v6Ev();
extern void _ZN7S7716C22v7Ev();
extern void _ZN7S7716C22v8Ev();
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void ABISELECT(_ZThn4560_N7S7716C1D1Ev,_ZThn2472_N7S7716C1D1Ev)();
extern void ABISELECT(_ZThn4560_N7S7716C1D0Ev,_ZThn2472_N7S7716C1D0Ev)();
extern void _ZN7S7716C82v5Ev();
extern void _ZN8S7716C122v9Ev();
extern void _ZN8S7716C123v10Ev();
extern void ABISELECT(_ZTv0_n40_N7S7716C1D1Ev,_ZTv0_n20_N7S7716C1D1Ev)();
extern void ABISELECT(_ZThn18928_N7S7716C1D1Ev,_ZThn10292_N7S7716C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7716C1D0Ev,_ZTv0_n20_N7S7716C1D0Ev)();
extern void ABISELECT(_ZThn18928_N7S7716C1D0Ev,_ZThn10292_N7S7716C1D0Ev)() __attribute__((weak));
extern void _ZN7S7716C32v3Ev();
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7716C1D1Ev,_ZTv0_n32_N7S7716C1D1Ev)();
extern void ABISELECT(_ZThn21136_N7S7716C1D1Ev,_ZThn11500_N7S7716C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7716C1D0Ev,_ZTv0_n32_N7S7716C1D0Ev)();
extern void ABISELECT(_ZThn21136_N7S7716C1D0Ev,_ZThn11500_N7S7716C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7716C1D1Ev,_ZTv0_n28_N7S7716C1D1Ev)();
extern void ABISELECT(_ZThn21328_N7S7716C1D1Ev,_ZThn11600_N7S7716C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7716C1D0Ev,_ZTv0_n28_N7S7716C1D0Ev)();
extern void ABISELECT(_ZThn21328_N7S7716C1D0Ev,_ZThn11600_N7S7716C1D0Ev)() __attribute__((weak));
extern void _ZN7S7716C82v5Ev();
extern void _ZN7S7716C22v6Ev();
extern void _ZN7S7716C22v7Ev();
extern void _ZN7S7716C22v8Ev();
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY vtc_S7716C1[] = {
  ABISELECT(21328,11600),
  ABISELECT(21136,11500),
  ABISELECT(19568,10644),
  ABISELECT(18928,10292),
  ABISELECT(19056,10372),
  ABISELECT(19184,10444),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C1[0]),
  (VTBL_ENTRY)&_ZN7S7716C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7716C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v8Ev,
  ABISELECT(18640,10132),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI7S7716C1[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  ABISELECT(16448,8956),
  ABISELECT(-2608,-1416),
  (VTBL_ENTRY)&(_ZTI7S7716C1[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
  ABISELECT(14880,8100),
  ABISELECT(-4176,-2272),
  (VTBL_ENTRY)&(_ZTI7S7716C1[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  ABISELECT(15008,8172),
  ABISELECT(14368,7820),
  ABISELECT(14496,7900),
  ABISELECT(14624,7972),
  ABISELECT(-4560,-2472),
  (VTBL_ENTRY)&(_ZTI7S7716C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4560_N7S7716C1D1Ev,_ZThn2472_N7S7716C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4560_N7S7716C1D0Ev,_ZThn2472_N7S7716C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C82v5Ev,
  (VTBL_ENTRY)&_ZN8S7716C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7716C123v10Ev,
  0,
  ABISELECT(-18928,-10292),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(-18928,-10292),
  (VTBL_ENTRY)&(_ZTI7S7716C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C1D1Ev,_ZTv0_n20_N7S7716C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C1D0Ev,_ZTv0_n20_N7S7716C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-19184,-10444),
  (VTBL_ENTRY)&(_ZTI7S7716C1[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-19568,-10644),
  (VTBL_ENTRY)&(_ZTI7S7716C1[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
  ABISELECT(-21136,-11500),
  ABISELECT(192,100),
  ABISELECT(-1568,-856),
  ABISELECT(-2208,-1208),
  ABISELECT(-2080,-1128),
  ABISELECT(-1952,-1056),
  ABISELECT(-21136,-11500),
  (VTBL_ENTRY)&(_ZTI7S7716C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7716C1D1Ev,_ZTv0_n32_N7S7716C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7716C1D0Ev,_ZTv0_n32_N7S7716C1D0Ev),
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-21328,-11600),
  ABISELECT(-1760,-956),
  ABISELECT(-2400,-1308),
  ABISELECT(-2272,-1228),
  ABISELECT(-2144,-1156),
  ABISELECT(-21328,-11600),
  (VTBL_ENTRY)&(_ZTI7S7716C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7716C1D1Ev,_ZTv0_n28_N7S7716C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7716C1D0Ev,_ZTv0_n28_N7S7716C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v8Ev,
  ABISELECT(-2688,-1468),
  ABISELECT(-21744,-11840),
  (VTBL_ENTRY)&(_ZTI7S7716C1[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S7716C1[];
extern void _ZN7S7716C2D1Ev();
extern void _ZN7S7716C2D0Ev();
extern void _ZN7S7716C82v5Ev();
extern void _ZN7S7716C22v6Ev();
extern void _ZN7S7716C22v7Ev();
extern void _ZN7S7716C22v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C2__A__7S7716C1[] = {
  ABISELECT(19568,10644),
  ABISELECT(18928,10292),
  ABISELECT(19056,10372),
  ABISELECT(19184,10444),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&_ZN7S7716C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7716C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v8Ev,
};
extern void _ZN7S7716C8D1Ev();
extern void _ZN7S7716C8D0Ev();
extern void _ZN7S7716C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C87S7716C2__7S7716C1[] = {
  ABISELECT(19568,10644),
  ABISELECT(18928,10292),
  ABISELECT(19056,10372),
  ABISELECT(19184,10444),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7716C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C82v5Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__7S7716C87S7716C2__7S7716C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-19184,-10444),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7716C8D1Ev,_ZTv0_n20_N7S7716C8D1Ev)();
extern void ABISELECT(_ZThn18928_N7S7716C8D1Ev,_ZThn10292_N7S7716C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7716C8D0Ev,_ZTv0_n20_N7S7716C8D0Ev)();
extern void ABISELECT(_ZThn18928_N7S7716C8D0Ev,_ZThn10292_N7S7716C8D0Ev)() __attribute__((weak));
extern void _ZN7S7716C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C3__7S7716C87S7716C2__7S7716C1[] = {
  0,
  ABISELECT(-18928,-10292),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(-18928,-10292),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C8D1Ev,_ZTv0_n20_N7S7716C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C8D0Ev,_ZTv0_n20_N7S7716C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C9__7S7716C87S7716C2__7S7716C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-19568,-10644),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C67S7716C2__A2__7S7716C1[] = {
  ABISELECT(18640,10132),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C6[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7716C2D1Ev,_ZTv0_n20_N7S7716C2D1Ev)();
extern void ABISELECT(_ZThn18928_N7S7716C2D1Ev,_ZThn10292_N7S7716C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7716C2D0Ev,_ZTv0_n20_N7S7716C2D0Ev)();
extern void ABISELECT(_ZThn18928_N7S7716C2D0Ev,_ZThn10292_N7S7716C2D0Ev)() __attribute__((weak));
extern void _ZN7S7716C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C3__7S7716C2__A__7S7716C1[] = {
  0,
  ABISELECT(-18928,-10292),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(-18928,-10292),
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C2D1Ev,_ZTv0_n20_N7S7716C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C2D0Ev,_ZTv0_n20_N7S7716C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__7S7716C2__A__7S7716C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-19184,-10444),
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C9__7S7716C2__A__7S7716C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-19568,-10644),
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__A__7S7716C2__A__7S7716C1[] = {
  ABISELECT(18640,10132),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C9__A__7S7716C1[] = {
  ABISELECT(16448,8956),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C9[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C67S7716C9__A3__7S7716C1[] = {
  ABISELECT(16448,8956),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C6[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__A__7S7716C1[] = {
  ABISELECT(14880,8100),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C6[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN8S7716C12D1Ev();
extern void _ZN8S7716C12D0Ev();
extern void _ZN7S7716C82v5Ev();
extern void _ZN8S7716C122v9Ev();
extern void _ZN8S7716C123v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7716C12__7S7716C1[] = {
  ABISELECT(15008,8172),
  ABISELECT(14368,7820),
  ABISELECT(14496,7900),
  ABISELECT(14624,7972),
  0,
  (VTBL_ENTRY)&(_ZTI8S7716C12[0]),
  (VTBL_ENTRY)&_ZN8S7716C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7716C12D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C82v5Ev,
  (VTBL_ENTRY)&_ZN8S7716C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7716C123v10Ev,
};
extern void _ZN7S7716C8D1Ev();
extern void _ZN7S7716C8D0Ev();
extern void _ZN7S7716C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C88S7716C12__A2__7S7716C1[] = {
  ABISELECT(15008,8172),
  ABISELECT(14368,7820),
  ABISELECT(14496,7900),
  ABISELECT(14624,7972),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7716C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C82v5Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__7S7716C88S7716C12__A2__7S7716C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-14624,-7972),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7716C8D1Ev,_ZTv0_n20_N7S7716C8D1Ev)();
extern void ABISELECT(_ZThn14368_N7S7716C8D1Ev,_ZThn7820_N7S7716C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7716C8D0Ev,_ZTv0_n20_N7S7716C8D0Ev)();
extern void ABISELECT(_ZThn14368_N7S7716C8D0Ev,_ZThn7820_N7S7716C8D0Ev)() __attribute__((weak));
extern void _ZN7S7716C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C3__7S7716C88S7716C12__A2__7S7716C1[] = {
  0,
  ABISELECT(-14368,-7820),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(-14368,-7820),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C8D1Ev,_ZTv0_n20_N7S7716C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C8D0Ev,_ZTv0_n20_N7S7716C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C9__7S7716C88S7716C12__A2__7S7716C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-15008,-8172),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__8S7716C12__7S7716C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-14624,-7972),
  (VTBL_ENTRY)&(_ZTI8S7716C12[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7716C12D1Ev,_ZTv0_n20_N8S7716C12D1Ev)();
extern void ABISELECT(_ZThn14368_N8S7716C12D1Ev,_ZThn7820_N8S7716C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7716C12D0Ev,_ZTv0_n20_N8S7716C12D0Ev)();
extern void ABISELECT(_ZThn14368_N8S7716C12D0Ev,_ZThn7820_N8S7716C12D0Ev)() __attribute__((weak));
extern void _ZN7S7716C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C3__8S7716C12__7S7716C1[] = {
  0,
  ABISELECT(-14368,-7820),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(-14368,-7820),
  (VTBL_ENTRY)&(_ZTI8S7716C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7716C12D1Ev,_ZTv0_n20_N8S7716C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7716C12D0Ev,_ZTv0_n20_N8S7716C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C9__8S7716C12__7S7716C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(-15008,-8172),
  (VTBL_ENTRY)&(_ZTI8S7716C12[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern void _ZN7S7716C3D1Ev();
extern void _ZN7S7716C3D0Ev();
extern void _ZN7S7716C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C3__7S7716C1[] = {
  ABISELECT(256,152),
  ABISELECT(128,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C3[0]),
  (VTBL_ENTRY)&_ZN7S7716C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7716C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__7S7716C3__7S7716C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S7716C3[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__7S7716C1[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C6[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C9__7S7716C1[] = {
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C9[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C67S7716C9__A1__7S7716C1[] = {
  ABISELECT(-512,-272),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C6[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN8S7716C11D1Ev();
extern void _ZN8S7716C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7716C11__7S7716C1[] = {
  ABISELECT(192,100),
  ABISELECT(-1568,-856),
  ABISELECT(-2208,-1208),
  ABISELECT(-2080,-1128),
  ABISELECT(-1952,-1056),
  0,
  (VTBL_ENTRY)&(_ZTI8S7716C11[0]),
  (VTBL_ENTRY)&_ZN8S7716C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7716C11D0Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__8S7716C11__7S7716C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(1952,1056),
  (VTBL_ENTRY)&(_ZTI8S7716C11[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7716C11D1Ev,_ZTv0_n20_N8S7716C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7716C11D0Ev,_ZTv0_n20_N8S7716C11D0Ev)();
extern void _ZN7S7716C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C3__8S7716C11__7S7716C1[] = {
  0,
  ABISELECT(2208,1208),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(2208,1208),
  (VTBL_ENTRY)&(_ZTI8S7716C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7716C11D1Ev,_ZTv0_n20_N8S7716C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7716C11D0Ev,_ZTv0_n20_N8S7716C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C9__8S7716C11__7S7716C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(1568,856),
  (VTBL_ENTRY)&(_ZTI8S7716C11[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7716C11D1Ev,_ZTv0_n28_N8S7716C11D1Ev)();
extern void ABISELECT(_ZThn192_N8S7716C11D1Ev,_ZThn100_N8S7716C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7716C11D0Ev,_ZTv0_n28_N8S7716C11D0Ev)();
extern void ABISELECT(_ZThn192_N8S7716C11D0Ev,_ZThn100_N8S7716C11D0Ev)() __attribute__((weak));
extern void _ZN7S7716C82v5Ev();
extern void _ZN7S7716C22v6Ev();
extern void _ZN7S7716C22v7Ev();
extern void _ZN7S7716C22v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C2__8S7716C11__7S7716C1[] = {
  ABISELECT(416,240),
  ABISELECT(416,240),
  0,
  0,
  0,
  0,
  ABISELECT(-192,-100),
  ABISELECT(-1760,-956),
  ABISELECT(-2400,-1308),
  ABISELECT(-2272,-1228),
  ABISELECT(-2144,-1156),
  ABISELECT(-192,-100),
  (VTBL_ENTRY)&(_ZTI8S7716C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7716C11D1Ev,_ZTv0_n28_N8S7716C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7716C11D0Ev,_ZTv0_n28_N8S7716C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v8Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C67S7716C2__A2__8S7716C11__7S7716C1[] = {
  ABISELECT(-2688,-1468),
  ABISELECT(-608,-340),
  (VTBL_ENTRY)&(_ZTI8S7716C11[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN7S7716C2D1Ev();
extern void _ZN7S7716C2D0Ev();
extern void _ZN7S7716C82v5Ev();
extern void _ZN7S7716C22v6Ev();
extern void _ZN7S7716C22v7Ev();
extern void _ZN7S7716C22v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C2__A1__7S7716C1[] = {
  ABISELECT(-1760,-956),
  ABISELECT(-2400,-1308),
  ABISELECT(-2272,-1228),
  ABISELECT(-2144,-1156),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&_ZN7S7716C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7716C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7716C22v8Ev,
};
extern void _ZN7S7716C8D1Ev();
extern void _ZN7S7716C8D0Ev();
extern void _ZN7S7716C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C87S7716C2__A1__7S7716C1[] = {
  ABISELECT(-1760,-956),
  ABISELECT(-2400,-1308),
  ABISELECT(-2272,-1228),
  ABISELECT(-2144,-1156),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7716C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7716C82v5Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__7S7716C87S7716C2__A1__7S7716C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(2144,1156),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7716C8D1Ev,_ZTv0_n20_N7S7716C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7716C8D0Ev,_ZTv0_n20_N7S7716C8D0Ev)();
extern void _ZN7S7716C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C3__7S7716C87S7716C2__A1__7S7716C1[] = {
  0,
  ABISELECT(2400,1308),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(2400,1308),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C8D1Ev,_ZTv0_n20_N7S7716C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C8D0Ev,_ZTv0_n20_N7S7716C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C9__7S7716C87S7716C2__A1__7S7716C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(1760,956),
  (VTBL_ENTRY)&(_ZTI7S7716C8[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C67S7716C2__A5__7S7716C1[] = {
  ABISELECT(-2688,-1468),
  0,
  (VTBL_ENTRY)&(_ZTI7S7716C6[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7716C2D1Ev,_ZTv0_n20_N7S7716C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7716C2D0Ev,_ZTv0_n20_N7S7716C2D0Ev)();
extern void _ZN7S7716C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C3__7S7716C2__A1__7S7716C1[] = {
  0,
  ABISELECT(2400,1308),
  ABISELECT(256,152),
  ABISELECT(128,80),
  ABISELECT(2400,1308),
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C2D1Ev,_ZTv0_n20_N7S7716C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7716C2D0Ev,_ZTv0_n20_N7S7716C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7716C32v3Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__7S7716C2__A1__7S7716C1[] = {
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(2144,1156),
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
extern void _ZN7S7716C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C9__7S7716C2__A1__7S7716C1[] = {
  0,
  0,
  0,
  ABISELECT(-512,-272),
  ABISELECT(1760,956),
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7716C92v4Ev,
};
extern void _ZN7S7716C62v1Ev();
extern void _ZN7S7716C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7716C6__A__7S7716C2__A1__7S7716C1[] = {
  ABISELECT(-2688,-1468),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI7S7716C2[0]),
  (VTBL_ENTRY)&_ZN7S7716C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7716C62v2Ev,
};
static  VTT_ENTRY vtt_S7716C1[] = {
  {&(_ZTV7S7716C1[8]),  8,100},
  {&(_tg__ZTV7S7716C2__A__7S7716C1[6]),  6,12},
  {&(_tg__ZTV7S7716C87S7716C2__7S7716C1[6]),  6,9},
  {&(_tg__ZTV7S7716C6__7S7716C87S7716C2__7S7716C1[5]),  5,7},
  {&(_tg__ZTV7S7716C3__7S7716C87S7716C2__7S7716C1[6]),  6,9},
  {&(_tg__ZTV7S7716C9__7S7716C87S7716C2__7S7716C1[6]),  6,9},
  {&(_tg__ZTV7S7716C67S7716C2__A2__7S7716C1[3]),  3,5},
  {&(_tg__ZTV7S7716C3__7S7716C2__A__7S7716C1[6]),  6,9},
  {&(_tg__ZTV7S7716C6__7S7716C2__A__7S7716C1[5]),  5,7},
  {&(_tg__ZTV7S7716C9__7S7716C2__A__7S7716C1[6]),  6,9},
  {&(_tg__ZTV7S7716C6__A__7S7716C2__A__7S7716C1[3]),  3,5},
  {&(_tg__ZTV7S7716C9__A__7S7716C1[3]),  3,6},
  {&(_tg__ZTV7S7716C67S7716C9__A3__7S7716C1[3]),  3,5},
  {&(_tg__ZTV7S7716C6__A__7S7716C1[3]),  3,5},
  {&(_tg__ZTV8S7716C12__7S7716C1[6]),  6,11},
  {&(_tg__ZTV7S7716C88S7716C12__A2__7S7716C1[6]),  6,9},
  {&(_tg__ZTV7S7716C6__7S7716C88S7716C12__A2__7S7716C1[5]),  5,7},
  {&(_tg__ZTV7S7716C3__7S7716C88S7716C12__A2__7S7716C1[6]),  6,9},
  {&(_tg__ZTV7S7716C9__7S7716C88S7716C12__A2__7S7716C1[6]),  6,9},
  {&(_tg__ZTV7S7716C6__8S7716C12__7S7716C1[5]),  5,7},
  {&(_tg__ZTV7S7716C3__8S7716C12__7S7716C1[6]),  6,9},
  {&(_tg__ZTV7S7716C9__8S7716C12__7S7716C1[6]),  6,9},
  {&(_ZTV7S7716C1[47]),  47,100},
  {&(_ZTV7S7716C1[55]),  55,100},
  {&(_ZTV7S7716C1[63]),  63,100},
  {&(_ZTV7S7716C1[17]),  17,100},
  {&(_ZTV7S7716C1[22]),  22,100},
  {&(_ZTV7S7716C1[28]),  28,100},
  {&(_ZTV7S7716C1[74]),  74,100},
  {&(_ZTV7S7716C1[89]),  89,100},
  {&(_ZTV7S7716C1[98]),  98,100},
  {&(_ZTV7S7716C1[36]),  36,100},
  {&(_tg__ZTV7S7716C3__7S7716C1[4]),  4,7},
  {&(_tg__ZTV7S7716C6__7S7716C3__7S7716C1[5]),  5,7},
  {&(_tg__ZTV7S7716C6__7S7716C1[3]),  3,5},
  {&(_tg__ZTV7S7716C9__7S7716C1[3]),  3,6},
  {&(_tg__ZTV7S7716C67S7716C9__A1__7S7716C1[3]),  3,5},
  {&(_tg__ZTV8S7716C11__7S7716C1[7]),  7,9},
  {&(_tg__ZTV7S7716C6__8S7716C11__7S7716C1[5]),  5,7},
  {&(_tg__ZTV7S7716C3__8S7716C11__7S7716C1[6]),  6,9},
  {&(_tg__ZTV7S7716C9__8S7716C11__7S7716C1[6]),  6,9},
  {&(_tg__ZTV7S7716C2__8S7716C11__7S7716C1[13]),  13,19},
  {&(_tg__ZTV7S7716C67S7716C2__A2__8S7716C11__7S7716C1[3]),  3,5},
  {&(_tg__ZTV7S7716C2__A1__7S7716C1[6]),  6,12},
  {&(_tg__ZTV7S7716C87S7716C2__A1__7S7716C1[6]),  6,9},
  {&(_tg__ZTV7S7716C6__7S7716C87S7716C2__A1__7S7716C1[5]),  5,7},
  {&(_tg__ZTV7S7716C3__7S7716C87S7716C2__A1__7S7716C1[6]),  6,9},
  {&(_tg__ZTV7S7716C9__7S7716C87S7716C2__A1__7S7716C1[6]),  6,9},
  {&(_tg__ZTV7S7716C67S7716C2__A5__7S7716C1[3]),  3,5},
  {&(_tg__ZTV7S7716C3__7S7716C2__A1__7S7716C1[6]),  6,9},
  {&(_tg__ZTV7S7716C6__7S7716C2__A1__7S7716C1[5]),  5,7},
  {&(_tg__ZTV7S7716C9__7S7716C2__A1__7S7716C1[6]),  6,9},
  {&(_tg__ZTV7S7716C6__A__7S7716C2__A1__7S7716C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7716C1[];
extern  VTBL_ENTRY _ZTV7S7716C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7716C1[];
static VTBL_ENTRY alt_thunk_names62[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7716C11D0Ev,_ZTv0_n28_N8S7716C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S7716C11D0Ev,_ZThn100_N8S7716C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7716C11D1Ev,_ZTv0_n28_N8S7716C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S7716C11D1Ev,_ZThn100_N8S7716C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7716C12D0Ev,_ZTv0_n20_N8S7716C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14368_N8S7716C12D0Ev,_ZThn7820_N8S7716C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7716C12D1Ev,_ZTv0_n20_N8S7716C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14368_N8S7716C12D1Ev,_ZThn7820_N8S7716C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7716C2D0Ev,_ZTv0_n20_N7S7716C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18928_N7S7716C2D0Ev,_ZThn10292_N7S7716C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7716C2D1Ev,_ZTv0_n20_N7S7716C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18928_N7S7716C2D1Ev,_ZThn10292_N7S7716C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7716C8D0Ev,_ZTv0_n20_N7S7716C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14368_N7S7716C8D0Ev,_ZThn7820_N7S7716C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18928_N7S7716C8D0Ev,_ZThn10292_N7S7716C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7716C8D1Ev,_ZTv0_n20_N7S7716C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14368_N7S7716C8D1Ev,_ZThn7820_N7S7716C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18928_N7S7716C8D1Ev,_ZThn10292_N7S7716C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7716C1D0Ev,_ZTv0_n28_N7S7716C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21328_N7S7716C1D0Ev,_ZThn11600_N7S7716C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7716C1D1Ev,_ZTv0_n28_N7S7716C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21328_N7S7716C1D1Ev,_ZThn11600_N7S7716C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7716C1D0Ev,_ZTv0_n32_N7S7716C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N7S7716C1D0Ev,_ZThn11500_N7S7716C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7716C1D1Ev,_ZTv0_n32_N7S7716C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N7S7716C1D1Ev,_ZThn11500_N7S7716C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7716C1D0Ev,_ZTv0_n20_N7S7716C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18928_N7S7716C1D0Ev,_ZThn10292_N7S7716C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7716C1D1Ev,_ZTv0_n20_N7S7716C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18928_N7S7716C1D1Ev,_ZThn10292_N7S7716C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7716C1 = {  "S7716C1", // class name
  bases_S7716C1, 25,
  &(vtc_S7716C1[0]), // expected_vtbl_contents
  &(vtt_S7716C1[0]), // expected_vtt_contents
  ABISELECT(23936,13016), // object size
  NSPAIRA(_ZTI7S7716C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7716C1),100, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7716C1),53, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names62,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19054C4  {
  virtual void  v2(); // _ZN8S19054C42v2Ev
  ~S19054C4(); // tgen
  S19054C4(); // tgen
};
//SIG(-1 S19054C4) C1{ v1}


void  S19054C4 ::v2(){vfunc_called(this, "_ZN8S19054C42v2Ev");}
S19054C4 ::~S19054C4(){ note_dtor("S19054C4", this);} // tgen
S19054C4 ::S19054C4(){ note_ctor("S19054C4", this);} // tgen

static void Test_S19054C4()
{
  extern Class_Descriptor cd_S19054C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19054C4, buf);
    S19054C4 *dp, &lv = *(dp=new (buf) S19054C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19054C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19054C4)");
    test_class_info(&lv, &cd_S19054C4);
    dp->~S19054C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19054C4(Test_S19054C4, "S19054C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19054C4C1Ev();
extern void _ZN8S19054C4D1Ev();
Name_Map name_map_S19054C4[] = {
  NSPAIR(_ZN8S19054C4C1Ev),
  NSPAIR(_ZN8S19054C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19054C4[];
extern void _ZN8S19054C42v2Ev();
static  VTBL_ENTRY vtc_S19054C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19054C4[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S19054C4[];
extern  VTBL_ENTRY _ZTV8S19054C4[];
Class_Descriptor cd_S19054C4 = {  "S19054C4", // class name
  0,0,//no base classes
  &(vtc_S19054C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19054C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19054C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19054C5  : virtual S19054C4 {
  void *s19054c5f0[3];
  ::S2489C12_nt s19054c5f1;
  void *s19054c5f2;
  virtual void  v3(); // _ZN8S19054C52v3Ev
  virtual void  v4(); // _ZN8S19054C52v4Ev
  virtual void  v5(); // _ZN8S19054C52v5Ev
  ~S19054C5(); // tgen
  S19054C5(); // tgen
};
//SIG(-1 S19054C5) C1{ VBC2{ v4} v1 v2 v3 Fp[3] FC3{} Fp}


void  S19054C5 ::v3(){vfunc_called(this, "_ZN8S19054C52v3Ev");}
void  S19054C5 ::v4(){vfunc_called(this, "_ZN8S19054C52v4Ev");}
void  S19054C5 ::v5(){vfunc_called(this, "_ZN8S19054C52v5Ev");}
S19054C5 ::~S19054C5(){ note_dtor("S19054C5", this);} // tgen
S19054C5 ::S19054C5(){ note_ctor("S19054C5", this);} // tgen

static void Test_S19054C5()
{
  extern Class_Descriptor cd_S19054C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S19054C5, buf);
    S19054C5 *dp, &lv = *(dp=new (buf) S19054C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19054C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19054C5)");
    check_base_class_offset(lv, (S19054C4*), 0, "S19054C5");
    check_field_offset(lv, s19054c5f0, ABISELECT(8,4), "S19054C5.s19054c5f0");
    check_field_offset(lv, s19054c5f1, ABISELECT(32,16), "S19054C5.s19054c5f1");
    check_field_offset(lv, s19054c5f2, ABISELECT(40,20), "S19054C5.s19054c5f2");
    test_class_info(&lv, &cd_S19054C5);
    dp->~S19054C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19054C5(Test_S19054C5, "S19054C5", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19054C5C1Ev();
extern void _ZN8S19054C5D1Ev();
Name_Map name_map_S19054C5[] = {
  NSPAIR(_ZN8S19054C5C1Ev),
  NSPAIR(_ZN8S19054C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19054C4;
extern VTBL_ENTRY _ZTI8S19054C4[];
extern  VTBL_ENTRY _ZTV8S19054C4[];
static Base_Class bases_S19054C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19054C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19054C5[];
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C52v3Ev();
extern void _ZN8S19054C52v4Ev();
extern void _ZN8S19054C52v5Ev();
static  VTBL_ENTRY vtc_S19054C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19054C5[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v5Ev,
};
extern VTBL_ENTRY _ZTV8S19054C5[];
static  VTT_ENTRY vtt_S19054C5[] = {
  {&(_ZTV8S19054C5[4]),  4,8},
  {&(_ZTV8S19054C5[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S19054C5[];
extern  VTBL_ENTRY _ZTV8S19054C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19054C5[];
Class_Descriptor cd_S19054C5 = {  "S19054C5", // class name
  bases_S19054C5, 1,
  &(vtc_S19054C5[0]), // expected_vtbl_contents
  &(vtt_S19054C5[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19054C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19054C5),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19054C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19054C3  : S19054C4 {
  char s19054c3f0[5];
  ::S19054C5 s19054c3f1[2];
  int s19054c3f2;
  void *s19054c3f3[7];
  ::S19054C5 s19054c3f4;
  ::S19054C4 s19054c3f5;
  char s19054c3f6;
  int s19054c3f7;
  short s19054c3f8[5];
  int s19054c3f9[8];
  __tsi64 s19054c3f10;
  char s19054c3f11:8;
  ~S19054C3(); // tgen
  S19054C3(); // tgen
};
//SIG(-1 S19054C3) C1{ BC2{ v1} Fc[5] FC3{ VBC2 v2 v3 v4 Fp[3] FC4{} Fp}[2] Fi Fp[7] FC3 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}


S19054C3 ::~S19054C3(){ note_dtor("S19054C3", this);} // tgen
S19054C3 ::S19054C3(){ note_ctor("S19054C3", this);} // tgen

static void Test_S19054C3()
{
  extern Class_Descriptor cd_S19054C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,47)];
    init_test(&cd_S19054C3, buf);
    S19054C3 *dp, &lv = *(dp=new (buf) S19054C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,184), "sizeof(S19054C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19054C3)");
    check_base_class_offset(lv, (S19054C4*), 0, "S19054C3");
    check_field_offset(lv, s19054c3f0, ABISELECT(8,4), "S19054C3.s19054c3f0");
    check_field_offset(lv, s19054c3f1, ABISELECT(16,12), "S19054C3.s19054c3f1");
    check_field_offset(lv, s19054c3f2, ABISELECT(112,60), "S19054C3.s19054c3f2");
    check_field_offset(lv, s19054c3f3, ABISELECT(120,64), "S19054C3.s19054c3f3");
    check_field_offset(lv, s19054c3f4, ABISELECT(176,92), "S19054C3.s19054c3f4");
    check_field_offset(lv, s19054c3f5, ABISELECT(224,116), "S19054C3.s19054c3f5");
    check_field_offset(lv, s19054c3f6, ABISELECT(232,120), "S19054C3.s19054c3f6");
    check_field_offset(lv, s19054c3f7, ABISELECT(236,124), "S19054C3.s19054c3f7");
    check_field_offset(lv, s19054c3f8, ABISELECT(240,128), "S19054C3.s19054c3f8");
    check_field_offset(lv, s19054c3f9, ABISELECT(252,140), "S19054C3.s19054c3f9");
    check_field_offset(lv, s19054c3f10, ABISELECT(288,172), "S19054C3.s19054c3f10");
    set_bf_and_test(lv, s19054c3f11, ABISELECT(296,180), 0, 8, 1, "S19054C3");
    set_bf_and_test(lv, s19054c3f11, ABISELECT(296,180), 0, 8, hide_sll(1LL<<7), "S19054C3");
    test_class_info(&lv, &cd_S19054C3);
    dp->~S19054C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19054C3(Test_S19054C3, "S19054C3", ABISELECT(304,184));

#else // __cplusplus

extern void _ZN8S19054C3C1Ev();
extern void _ZN8S19054C3D1Ev();
Name_Map name_map_S19054C3[] = {
  NSPAIR(_ZN8S19054C3C1Ev),
  NSPAIR(_ZN8S19054C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19054C4;
extern VTBL_ENTRY _ZTI8S19054C4[];
extern  VTBL_ENTRY _ZTV8S19054C4[];
static Base_Class bases_S19054C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19054C4,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19054C3[];
extern void _ZN8S19054C42v2Ev();
static  VTBL_ENTRY vtc_S19054C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19054C3[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S19054C3[];
extern  VTBL_ENTRY _ZTV8S19054C3[];
Class_Descriptor cd_S19054C3 = {  "S19054C3", // class name
  bases_S19054C3, 1,
  &(vtc_S19054C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,184), // object size
  NSPAIRA(_ZTI8S19054C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19054C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19054C2  : S19054C3 , virtual S19054C4 , virtual S19054C5 {
  int s19054c2f0;
  void *s19054c2f1;
  ~S19054C2(); // tgen
  S19054C2(); // tgen
};
//SIG(-1 S19054C2) C1{ BC2{ BC3{ v1} Fc[5] FC4{ VBC3 v2 v3 v4 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC3 VBC4 Fi Fp}


S19054C2 ::~S19054C2(){ note_dtor("S19054C2", this);} // tgen
S19054C2 ::S19054C2(){ note_ctor("S19054C2", this);} // tgen

static void Test_S19054C2()
{
  extern Class_Descriptor cd_S19054C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,55)];
    init_test(&cd_S19054C2, buf);
    S19054C2 *dp, &lv = *(dp=new (buf) S19054C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,216), "sizeof(S19054C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19054C2)");
    check_base_class_offset(lv, (S19054C4*)(S19054C3*), 0, "S19054C2");
    check_base_class_offset(lv, (S19054C3*), 0, "S19054C2");
    /*is_ambiguous_... S19054C2::S19054C4 */ AMB_check_base_class_offset(lv, (S19054C4*), ABISELECT(312,192), "S19054C2");
    check_base_class_offset(lv, (S19054C4*)(S19054C5*), ABISELECT(312,192), "S19054C2");
    check_base_class_offset(lv, (S19054C5*), ABISELECT(312,192), "S19054C2");
    check_field_offset(lv, s19054c2f0, ABISELECT(300,184), "S19054C2.s19054c2f0");
    check_field_offset(lv, s19054c2f1, ABISELECT(304,188), "S19054C2.s19054c2f1");
    test_class_info(&lv, &cd_S19054C2);
    dp->~S19054C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19054C2(Test_S19054C2, "S19054C2", ABISELECT(360,216));

#else // __cplusplus

extern void _ZN8S19054C2C1Ev();
extern void _ZN8S19054C2D1Ev();
Name_Map name_map_S19054C2[] = {
  NSPAIR(_ZN8S19054C2C1Ev),
  NSPAIR(_ZN8S19054C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19054C4;
extern VTBL_ENTRY _ZTI8S19054C4[];
extern  VTBL_ENTRY _ZTV8S19054C4[];
extern Class_Descriptor cd_S19054C3;
extern VTBL_ENTRY _ZTI8S19054C3[];
extern  VTBL_ENTRY _ZTV8S19054C3[];
extern Class_Descriptor cd_S19054C4;
extern VTBL_ENTRY _ZTI8S19054C4[];
extern  VTBL_ENTRY _ZTV8S19054C4[];
extern Class_Descriptor cd_S19054C5;
extern VTBL_ENTRY _ZTI8S19054C5[];
extern  VTBL_ENTRY _ZTV8S19054C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19054C5[];
static Base_Class bases_S19054C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19054C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19054C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19054C4,    ABISELECT(312,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19054C5,    ABISELECT(312,192), //bcp->offset
    5, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19054C2[];
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C52v3Ev();
extern void _ZN8S19054C52v4Ev();
extern void _ZN8S19054C52v5Ev();
static  VTBL_ENTRY vtc_S19054C2[] = {
  ABISELECT(312,192),
  ABISELECT(312,192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19054C2[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-192),
  (VTBL_ENTRY)&(_ZTI8S19054C2[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v5Ev,
};
extern VTBL_ENTRY _ZTV8S19054C2[];
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C52v3Ev();
extern void _ZN8S19054C52v4Ev();
extern void _ZN8S19054C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C5__8S19054C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19054C5[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v5Ev,
};
static  VTT_ENTRY vtt_S19054C2[] = {
  {&(_ZTV8S19054C2[4]),  4,16},
  {&(_ZTV8S19054C2[12]),  12,16},
  {&(_ZTV8S19054C2[12]),  12,16},
  {&(_tg__ZTV8S19054C5__8S19054C2[4]),  4,8},
  {&(_tg__ZTV8S19054C5__8S19054C2[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S19054C2[];
extern  VTBL_ENTRY _ZTV8S19054C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19054C2[];
Class_Descriptor cd_S19054C2 = {  "S19054C2", // class name
  bases_S19054C2, 4,
  &(vtc_S19054C2[0]), // expected_vtbl_contents
  &(vtt_S19054C2[0]), // expected_vtt_contents
  ABISELECT(360,216), // object size
  NSPAIRA(_ZTI8S19054C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19054C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19054C2),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19054C8  : S19054C4 {
  char s19054c8f0;
  __tsi64 s19054c8f1;
  int s19054c8f2[3];
  ::S19054C3 s19054c8f3;
  virtual void  v6(); // _ZN8S19054C82v6Ev
  ~S19054C8(); // tgen
  S19054C8(); // tgen
};
//SIG(-1 S19054C8) C1{ BC2{ v2} v1 Fc FL Fi[3] FC3{ BC2 Fc[5] FC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}}


void  S19054C8 ::v6(){vfunc_called(this, "_ZN8S19054C82v6Ev");}
S19054C8 ::~S19054C8(){ note_dtor("S19054C8", this);} // tgen
S19054C8 ::S19054C8(){ note_ctor("S19054C8", this);} // tgen

static void Test_S19054C8()
{
  extern Class_Descriptor cd_S19054C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,54)];
    init_test(&cd_S19054C8, buf);
    S19054C8 *dp, &lv = *(dp=new (buf) S19054C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,212), "sizeof(S19054C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19054C8)");
    check_base_class_offset(lv, (S19054C4*), 0, "S19054C8");
    check_field_offset(lv, s19054c8f0, ABISELECT(8,4), "S19054C8.s19054c8f0");
    check_field_offset(lv, s19054c8f1, ABISELECT(16,8), "S19054C8.s19054c8f1");
    check_field_offset(lv, s19054c8f2, ABISELECT(24,16), "S19054C8.s19054c8f2");
    check_field_offset(lv, s19054c8f3, ABISELECT(40,28), "S19054C8.s19054c8f3");
    test_class_info(&lv, &cd_S19054C8);
    dp->~S19054C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19054C8(Test_S19054C8, "S19054C8", ABISELECT(344,212));

#else // __cplusplus

extern void _ZN8S19054C8C1Ev();
extern void _ZN8S19054C8D1Ev();
Name_Map name_map_S19054C8[] = {
  NSPAIR(_ZN8S19054C8C1Ev),
  NSPAIR(_ZN8S19054C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19054C4;
extern VTBL_ENTRY _ZTI8S19054C4[];
extern  VTBL_ENTRY _ZTV8S19054C4[];
static Base_Class bases_S19054C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19054C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19054C8[];
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C82v6Ev();
static  VTBL_ENTRY vtc_S19054C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19054C8[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C82v6Ev,
};
extern VTBL_ENTRY _ZTI8S19054C8[];
extern  VTBL_ENTRY _ZTV8S19054C8[];
Class_Descriptor cd_S19054C8 = {  "S19054C8", // class name
  bases_S19054C8, 1,
  &(vtc_S19054C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,212), // object size
  NSPAIRA(_ZTI8S19054C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19054C8),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19054C10  {
  ::S2489C12_nt s19054c10f0;
  int s19054c10f1:3;
  void *s19054c10f2;
  int s19054c10f3;
  virtual void  v7(); // _ZN9S19054C102v7Ev
  ~S19054C10(); // tgen
  S19054C10(); // tgen
};
//SIG(-1 S19054C10) C1{ v1 FC2{} Fi:3 Fp Fi}


void  S19054C10 ::v7(){vfunc_called(this, "_ZN9S19054C102v7Ev");}
S19054C10 ::~S19054C10(){ note_dtor("S19054C10", this);} // tgen
S19054C10 ::S19054C10(){ note_ctor("S19054C10", this);} // tgen

static void Test_S19054C10()
{
  extern Class_Descriptor cd_S19054C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19054C10, buf);
    S19054C10 *dp, &lv = *(dp=new (buf) S19054C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19054C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19054C10)");
    check_field_offset(lv, s19054c10f0, ABISELECT(8,4), "S19054C10.s19054c10f0");
    set_bf_and_test(lv, s19054c10f1, ABISELECT(9,5), 0, 3, 1, "S19054C10");
    set_bf_and_test(lv, s19054c10f1, ABISELECT(9,5), 0, 3, hide_sll(1LL<<2), "S19054C10");
    check_field_offset(lv, s19054c10f2, ABISELECT(16,8), "S19054C10.s19054c10f2");
    check_field_offset(lv, s19054c10f3, ABISELECT(24,12), "S19054C10.s19054c10f3");
    test_class_info(&lv, &cd_S19054C10);
    dp->~S19054C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19054C10(Test_S19054C10, "S19054C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S19054C10C1Ev();
extern void _ZN9S19054C10D1Ev();
Name_Map name_map_S19054C10[] = {
  NSPAIR(_ZN9S19054C10C1Ev),
  NSPAIR(_ZN9S19054C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19054C10[];
extern void _ZN9S19054C102v7Ev();
static  VTBL_ENTRY vtc_S19054C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19054C10[0]),
  (VTBL_ENTRY)&_ZN9S19054C102v7Ev,
};
extern VTBL_ENTRY _ZTI9S19054C10[];
extern  VTBL_ENTRY _ZTV9S19054C10[];
Class_Descriptor cd_S19054C10 = {  "S19054C10", // class name
  0,0,//no base classes
  &(vtc_S19054C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S19054C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19054C10),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19054C9  : virtual S19054C10 , S19054C5 , virtual S19054C3 {
  ::S19277C15 s19054c9f0;
  int s19054c9f1;
  long double s19054c9f2;
  ~S19054C9(); // tgen
  S19054C9(); // tgen
};
//SIG(-1 S19054C9) C1{ VBC2{ v1 FC3{} Fi:3 Fp Fi} BC4{ VBC5{ v2} v3 v4 v5 Fp[3] FC3 Fp} VBC6{ BC5 Fc[5] FC4[2] Fi Fp[7] FC4 FC5 Fc Fi Fs[5] Fi[8] FL Fc:8} FC7{ VBC8{ v7} BC9{ BC10{ VBC8 v8 v9 v10 Fp[3] FC3 Fp} v11 v12 Fp FC11{ BC12{ BC8 Fc[5] FC10[2] Fi Fp[7] FC10 FC8 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC8 VBC10 Fi Fp} Fi Fp Fi[2]} VBC13{ VBC12 v13 Fp FL Fp[6] FC8 FC14{ BC8 v14 Fc FL Fi[3] FC12} Fp Fi} vd v6 Fp[2] Fi[9] FC14 FC8[9] FL FD Fp FL Fl FL} Fi FD}


S19054C9 ::~S19054C9(){ note_dtor("S19054C9", this);} // tgen
S19054C9 ::S19054C9(){ note_ctor("S19054C9", this);} // tgen

static void Test_S19054C9()
{
  extern Class_Descriptor cd_S19054C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(135,322)];
    init_test(&cd_S19054C9, buf);
    S19054C9 *dp, &lv = *(dp=new (buf) S19054C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2144,1284), "sizeof(S19054C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19054C9)");
    check_base_class_offset(lv, (S19054C10*), ABISELECT(1808,1084), "S19054C9");
    check_base_class_offset(lv, (S19054C4*)(S19054C5*), 0, "S19054C9");
    check_base_class_offset(lv, (S19054C5*), 0, "S19054C9");
    check_base_class_offset(lv, (S19054C4*)(S19054C3*), ABISELECT(1840,1100), "S19054C9");
    check_base_class_offset(lv, (S19054C3*), ABISELECT(1840,1100), "S19054C9");
    check_field_offset(lv, s19054c9f0, ABISELECT(48,24), "S19054C9.s19054c9f0");
    check_field_offset(lv, s19054c9f1, ABISELECT(1776,1068), "S19054C9.s19054c9f1");
    check_field_offset(lv, s19054c9f2, ABISELECT(1792,1072), "S19054C9.s19054c9f2");
    test_class_info(&lv, &cd_S19054C9);
    dp->~S19054C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19054C9(Test_S19054C9, "S19054C9", ABISELECT(2144,1284));

#else // __cplusplus

extern void _ZN8S19054C9C1Ev();
extern void _ZN8S19054C9D1Ev();
Name_Map name_map_S19054C9[] = {
  NSPAIR(_ZN8S19054C9C1Ev),
  NSPAIR(_ZN8S19054C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19054C10;
extern VTBL_ENTRY _ZTI9S19054C10[];
extern  VTBL_ENTRY _ZTV9S19054C10[];
extern Class_Descriptor cd_S19054C4;
extern VTBL_ENTRY _ZTI8S19054C4[];
extern  VTBL_ENTRY _ZTV8S19054C4[];
extern Class_Descriptor cd_S19054C5;
extern VTBL_ENTRY _ZTI8S19054C5[];
extern  VTBL_ENTRY _ZTV8S19054C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19054C5[];
extern Class_Descriptor cd_S19054C4;
extern VTBL_ENTRY _ZTI8S19054C4[];
extern  VTBL_ENTRY _ZTV8S19054C4[];
extern Class_Descriptor cd_S19054C3;
extern VTBL_ENTRY _ZTI8S19054C3[];
extern  VTBL_ENTRY _ZTV8S19054C3[];
static Base_Class bases_S19054C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19054C10,    ABISELECT(1808,1084), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19054C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19054C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19054C4,    ABISELECT(1840,1100), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19054C3,    ABISELECT(1840,1100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19054C9[];
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C52v3Ev();
extern void _ZN8S19054C52v4Ev();
extern void _ZN8S19054C52v5Ev();
extern void _ZN9S19054C102v7Ev();
extern void _ZN8S19054C42v2Ev();
static  VTBL_ENTRY vtc_S19054C9[] = {
  ABISELECT(1840,1100),
  ABISELECT(1808,1084),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19054C9[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v5Ev,
  0,
  ABISELECT(-1808,-1084),
  (VTBL_ENTRY)&(_ZTI8S19054C9[0]),
  (VTBL_ENTRY)&_ZN9S19054C102v7Ev,
  0,
  ABISELECT(-1840,-1100),
  (VTBL_ENTRY)&(_ZTI8S19054C9[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S19054C9[];
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C52v3Ev();
extern void _ZN8S19054C52v4Ev();
extern void _ZN8S19054C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C5__8S19054C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19054C5[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v5Ev,
};
static  VTT_ENTRY vtt_S19054C9[] = {
  {&(_ZTV8S19054C9[6]),  6,18},
  {&(_tg__ZTV8S19054C5__8S19054C9[4]),  4,8},
  {&(_tg__ZTV8S19054C5__8S19054C9[4]),  4,8},
  {&(_ZTV8S19054C9[13]),  13,18},
  {&(_ZTV8S19054C9[6]),  6,18},
  {&(_ZTV8S19054C9[17]),  17,18},
};
extern VTBL_ENTRY _ZTI8S19054C9[];
extern  VTBL_ENTRY _ZTV8S19054C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19054C9[];
Class_Descriptor cd_S19054C9 = {  "S19054C9", // class name
  bases_S19054C9, 5,
  &(vtc_S19054C9[0]), // expected_vtbl_contents
  &(vtt_S19054C9[0]), // expected_vtt_contents
  ABISELECT(2144,1284), // object size
  NSPAIRA(_ZTI8S19054C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19054C9),18, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19054C9),6, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19054C13  : virtual S19054C3 {
  void *s19054c13f0;
  __tsi64 s19054c13f1;
  void *s19054c13f2[6];
  ::S19054C4 s19054c13f3;
  ::S19054C8 s19054c13f4;
  void *s19054c13f5;
  int s19054c13f6;
  virtual void  v8(); // _ZN9S19054C132v8Ev
  ~S19054C13(); // tgen
  S19054C13(); // tgen
};
//SIG(-1 S19054C13) C1{ VBC2{ BC3{ v2} Fc[5] FC4{ VBC3 v4 v5 v6 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v1 Fp FL Fp[6] FC3 FC6{ BC3 v3 Fc FL Fi[3] FC2} Fp Fi}


void  S19054C13 ::v8(){vfunc_called(this, "_ZN9S19054C132v8Ev");}
S19054C13 ::~S19054C13(){ note_dtor("S19054C13", this);} // tgen
S19054C13 ::S19054C13(){ note_ctor("S19054C13", this);} // tgen

static void Test_S19054C13()
{
  extern Class_Descriptor cd_S19054C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(94,113)];
    init_test(&cd_S19054C13, buf);
    S19054C13 *dp, &lv = *(dp=new (buf) S19054C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(744,448), "sizeof(S19054C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19054C13)");
    check_base_class_offset(lv, (S19054C4*)(S19054C3*), ABISELECT(440,264), "S19054C13");
    check_base_class_offset(lv, (S19054C3*), ABISELECT(440,264), "S19054C13");
    check_field_offset(lv, s19054c13f0, ABISELECT(8,4), "S19054C13.s19054c13f0");
    check_field_offset(lv, s19054c13f1, ABISELECT(16,8), "S19054C13.s19054c13f1");
    check_field_offset(lv, s19054c13f2, ABISELECT(24,16), "S19054C13.s19054c13f2");
    check_field_offset(lv, s19054c13f3, ABISELECT(72,40), "S19054C13.s19054c13f3");
    check_field_offset(lv, s19054c13f4, ABISELECT(80,44), "S19054C13.s19054c13f4");
    check_field_offset(lv, s19054c13f5, ABISELECT(424,256), "S19054C13.s19054c13f5");
    check_field_offset(lv, s19054c13f6, ABISELECT(432,260), "S19054C13.s19054c13f6");
    test_class_info(&lv, &cd_S19054C13);
    dp->~S19054C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19054C13(Test_S19054C13, "S19054C13", ABISELECT(744,448));

#else // __cplusplus

extern void _ZN9S19054C13C1Ev();
extern void _ZN9S19054C13D1Ev();
Name_Map name_map_S19054C13[] = {
  NSPAIR(_ZN9S19054C13C1Ev),
  NSPAIR(_ZN9S19054C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19054C4;
extern VTBL_ENTRY _ZTI8S19054C4[];
extern  VTBL_ENTRY _ZTV8S19054C4[];
extern Class_Descriptor cd_S19054C3;
extern VTBL_ENTRY _ZTI8S19054C3[];
extern  VTBL_ENTRY _ZTV8S19054C3[];
static Base_Class bases_S19054C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19054C4,    ABISELECT(440,264), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19054C3,    ABISELECT(440,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19054C13[];
extern void _ZN9S19054C132v8Ev();
extern void _ZN8S19054C42v2Ev();
static  VTBL_ENTRY vtc_S19054C13[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19054C13[0]),
  (VTBL_ENTRY)&_ZN9S19054C132v8Ev,
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19054C13[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
};
extern VTBL_ENTRY _ZTV9S19054C13[];
static  VTT_ENTRY vtt_S19054C13[] = {
  {&(_ZTV9S19054C13[3]),  3,8},
  {&(_ZTV9S19054C13[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S19054C13[];
extern  VTBL_ENTRY _ZTV9S19054C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19054C13[];
Class_Descriptor cd_S19054C13 = {  "S19054C13", // class name
  bases_S19054C13, 2,
  &(vtc_S19054C13[0]), // expected_vtbl_contents
  &(vtt_S19054C13[0]), // expected_vtt_contents
  ABISELECT(744,448), // object size
  NSPAIRA(_ZTI9S19054C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19054C13),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19054C13),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19054C14  : virtual S19054C5 , S19054C13 {
  void *s19054c14f0;
  ::S19054C4 s19054c14f1;
  __tsi64 s19054c14f2[8];
  ::S19054C5 s19054c14f3;
  void *s19054c14f4;
  virtual void  v9(); // _ZN9S19054C142v9Ev
  ~S19054C14(); // tgen
  S19054C14(); // tgen
};
//SIG(-1 S19054C14) C1{ VBC2{ VBC3{ v2} v3 v4 v5 Fp[3] FC4{} Fp} BC5{ VBC6{ BC3 Fc[5] FC2[2] Fi Fp[7] FC2 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v6 Fp FL Fp[6] FC3 FC7{ BC3 v7 Fc FL Fi[3] FC6} Fp Fi} v1 Fp FC3 FL[8] FC2 Fp}


void  S19054C14 ::v9(){vfunc_called(this, "_ZN9S19054C142v9Ev");}
S19054C14 ::~S19054C14(){ note_dtor("S19054C14", this);} // tgen
S19054C14 ::S19054C14(){ note_ctor("S19054C14", this);} // tgen

static void Test_S19054C14()
{
  extern Class_Descriptor cd_S19054C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(117,144)];
    init_test(&cd_S19054C14, buf);
    S19054C14 *dp, &lv = *(dp=new (buf) S19054C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(928,572), "sizeof(S19054C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19054C14)");
    check_base_class_offset(lv, (S19054C4*)(S19054C5*), ABISELECT(576,364), "S19054C14");
    check_base_class_offset(lv, (S19054C5*), ABISELECT(576,364), "S19054C14");
    check_base_class_offset(lv, (S19054C4*)(S19054C3*), ABISELECT(624,388), "S19054C14");
    check_base_class_offset(lv, (S19054C3*)(S19054C13*), ABISELECT(624,388), "S19054C14");
    check_base_class_offset(lv, (S19054C13*), 0, "S19054C14");
    check_field_offset(lv, s19054c14f0, ABISELECT(440,264), "S19054C14.s19054c14f0");
    check_field_offset(lv, s19054c14f1, ABISELECT(448,268), "S19054C14.s19054c14f1");
    check_field_offset(lv, s19054c14f2, ABISELECT(456,272), "S19054C14.s19054c14f2");
    check_field_offset(lv, s19054c14f3, ABISELECT(520,336), "S19054C14.s19054c14f3");
    check_field_offset(lv, s19054c14f4, ABISELECT(568,360), "S19054C14.s19054c14f4");
    test_class_info(&lv, &cd_S19054C14);
    dp->~S19054C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19054C14(Test_S19054C14, "S19054C14", ABISELECT(928,572));

#else // __cplusplus

extern void _ZN9S19054C14C1Ev();
extern void _ZN9S19054C14D1Ev();
Name_Map name_map_S19054C14[] = {
  NSPAIR(_ZN9S19054C14C1Ev),
  NSPAIR(_ZN9S19054C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19054C4;
extern VTBL_ENTRY _ZTI8S19054C4[];
extern  VTBL_ENTRY _ZTV8S19054C4[];
extern Class_Descriptor cd_S19054C5;
extern VTBL_ENTRY _ZTI8S19054C5[];
extern  VTBL_ENTRY _ZTV8S19054C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19054C5[];
extern Class_Descriptor cd_S19054C4;
extern VTBL_ENTRY _ZTI8S19054C4[];
extern  VTBL_ENTRY _ZTV8S19054C4[];
extern Class_Descriptor cd_S19054C3;
extern VTBL_ENTRY _ZTI8S19054C3[];
extern  VTBL_ENTRY _ZTV8S19054C3[];
extern Class_Descriptor cd_S19054C13;
extern VTBL_ENTRY _ZTI9S19054C13[];
extern  VTBL_ENTRY _ZTV9S19054C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19054C13[];
static Base_Class bases_S19054C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19054C4,    ABISELECT(576,364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19054C5,    ABISELECT(576,364), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19054C4,    ABISELECT(624,388), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19054C3,    ABISELECT(624,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19054C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19054C14[];
extern void _ZN9S19054C132v8Ev();
extern void _ZN9S19054C142v9Ev();
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C52v3Ev();
extern void _ZN8S19054C52v4Ev();
extern void _ZN8S19054C52v5Ev();
extern void _ZN8S19054C42v2Ev();
static  VTBL_ENTRY vtc_S19054C14[] = {
  ABISELECT(576,364),
  ABISELECT(576,364),
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI9S19054C14[0]),
  (VTBL_ENTRY)&_ZN9S19054C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19054C142v9Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-576,-364),
  (VTBL_ENTRY)&(_ZTI9S19054C14[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v5Ev,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI9S19054C14[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
};
extern VTBL_ENTRY _ZTV9S19054C14[];
extern void _ZN9S19054C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19054C13__9S19054C14[] = {
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI9S19054C13[0]),
  (VTBL_ENTRY)&_ZN9S19054C132v8Ev,
};
extern void _ZN8S19054C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C48S19054C3__9S19054C13__9S19054C14[] = {
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI9S19054C13[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
};
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C52v3Ev();
extern void _ZN8S19054C52v4Ev();
extern void _ZN8S19054C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C5__9S19054C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19054C5[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v5Ev,
};
static  VTT_ENTRY vtt_S19054C14[] = {
  {&(_ZTV9S19054C14[5]),  5,22},
  {&(_tg__ZTV9S19054C13__9S19054C14[3]),  3,4},
  {&(_tg__ZTV8S19054C48S19054C3__9S19054C13__9S19054C14[3]),  3,4},
  {&(_ZTV9S19054C14[14]),  14,22},
  {&(_ZTV9S19054C14[14]),  14,22},
  {&(_ZTV9S19054C14[21]),  21,22},
  {&(_tg__ZTV8S19054C5__9S19054C14[4]),  4,8},
  {&(_tg__ZTV8S19054C5__9S19054C14[4]),  4,8},
};
extern VTBL_ENTRY _ZTI9S19054C14[];
extern  VTBL_ENTRY _ZTV9S19054C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19054C14[];
Class_Descriptor cd_S19054C14 = {  "S19054C14", // class name
  bases_S19054C14, 5,
  &(vtc_S19054C14[0]), // expected_vtbl_contents
  &(vtt_S19054C14[0]), // expected_vtt_contents
  ABISELECT(928,572), // object size
  NSPAIRA(_ZTI9S19054C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19054C14),22, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19054C14),8, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19054C16  {
  void *s19054c16f0[2];
  int s19054c16f1[2];
  void *s19054c16f2[15];
  int s19054c16f3;
  ::S19054C13 s19054c16f4;
  virtual void  v10(); // _ZN9S19054C163v10Ev
  virtual void  v11(); // _ZN9S19054C163v11Ev
  ~S19054C16(); // tgen
  S19054C16(); // tgen
};
//SIG(-1 S19054C16) C1{ v1 v2 Fp[2] Fi[2] Fp[15] Fi FC2{ VBC3{ BC4{ v4} Fc[5] FC5{ VBC4 v6 v7 v8 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v3 Fp FL Fp[6] FC4 FC7{ BC4 v5 Fc FL Fi[3] FC3} Fp Fi}}


void  S19054C16 ::v10(){vfunc_called(this, "_ZN9S19054C163v10Ev");}
void  S19054C16 ::v11(){vfunc_called(this, "_ZN9S19054C163v11Ev");}
S19054C16 ::~S19054C16(){ note_dtor("S19054C16", this);} // tgen
S19054C16 ::S19054C16(){ note_ctor("S19054C16", this);} // tgen

static void Test_S19054C16()
{
  extern Class_Descriptor cd_S19054C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(114,134)];
    init_test(&cd_S19054C16, buf);
    S19054C16 *dp, &lv = *(dp=new (buf) S19054C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(904,532), "sizeof(S19054C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19054C16)");
    check_field_offset(lv, s19054c16f0, ABISELECT(8,4), "S19054C16.s19054c16f0");
    check_field_offset(lv, s19054c16f1, ABISELECT(24,12), "S19054C16.s19054c16f1");
    check_field_offset(lv, s19054c16f2, ABISELECT(32,20), "S19054C16.s19054c16f2");
    check_field_offset(lv, s19054c16f3, ABISELECT(152,80), "S19054C16.s19054c16f3");
    check_field_offset(lv, s19054c16f4, ABISELECT(160,84), "S19054C16.s19054c16f4");
    test_class_info(&lv, &cd_S19054C16);
    dp->~S19054C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19054C16(Test_S19054C16, "S19054C16", ABISELECT(904,532));

#else // __cplusplus

extern void _ZN9S19054C16C1Ev();
extern void _ZN9S19054C16D1Ev();
Name_Map name_map_S19054C16[] = {
  NSPAIR(_ZN9S19054C16C1Ev),
  NSPAIR(_ZN9S19054C16D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19054C16[];
extern void _ZN9S19054C163v10Ev();
extern void _ZN9S19054C163v11Ev();
static  VTBL_ENTRY vtc_S19054C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19054C16[0]),
  (VTBL_ENTRY)&_ZN9S19054C163v10Ev,
  (VTBL_ENTRY)&_ZN9S19054C163v11Ev,
};
extern VTBL_ENTRY _ZTI9S19054C16[];
extern  VTBL_ENTRY _ZTV9S19054C16[];
Class_Descriptor cd_S19054C16 = {  "S19054C16", // class name
  0,0,//no base classes
  &(vtc_S19054C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(904,532), // object size
  NSPAIRA(_ZTI9S19054C16),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19054C16),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19054C15  : virtual S19054C10 , S19054C16 , virtual S19054C8 {
  int s19054c15f0;
  short s19054c15f1;
  __tsi64 s19054c15f2[7];
  char s19054c15f3[5];
  void *s19054c15f4;
  virtual  ~S19054C15(); // _ZN9S19054C15D2Ev
  virtual void  v12(); // _ZN9S19054C153v12Ev
  virtual void  v13(); // _ZN9S19054C153v13Ev
  virtual void  v14(); // _ZN9S19054C153v14Ev
  S19054C15(); // tgen
};
//SIG(-1 S19054C15) C1{ VBC2{ v4 FC3{} Fi:3 Fp Fi} BC4{ v5 v6 Fp[2] Fi[2] Fp[15] Fi FC5{ VBC6{ BC7{ v7} Fc[5] FC8{ VBC7 v10 v11 v12 Fp[3] FC3 Fp}[2] Fi Fp[7] FC8 FC7 Fc Fi Fs[5] Fi[8] FL Fc:8} v9 Fp FL Fp[6] FC7 FC9{ BC7 v8 Fc FL Fi[3] FC6} Fp Fi}} VBC9 vd v1 v2 v3 Fi Fs FL[7] Fc[5] Fp}


 S19054C15 ::~S19054C15(){ note_dtor("S19054C15", this);}
void  S19054C15 ::v12(){vfunc_called(this, "_ZN9S19054C153v12Ev");}
void  S19054C15 ::v13(){vfunc_called(this, "_ZN9S19054C153v13Ev");}
void  S19054C15 ::v14(){vfunc_called(this, "_ZN9S19054C153v14Ev");}
S19054C15 ::S19054C15(){ note_ctor("S19054C15", this);} // tgen

static void Test_S19054C15()
{
  extern Class_Descriptor cd_S19054C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(171,210)];
    init_test(&cd_S19054C15, buf);
    S19054C15 *dp, &lv = *(dp=new (buf) S19054C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1360,836), "sizeof(S19054C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19054C15)");
    check_base_class_offset(lv, (S19054C10*), ABISELECT(984,608), "S19054C15");
    check_base_class_offset(lv, (S19054C16*), 0, "S19054C15");
    check_base_class_offset(lv, (S19054C4*)(S19054C8*), ABISELECT(1016,624), "S19054C15");
    check_base_class_offset(lv, (S19054C8*), ABISELECT(1016,624), "S19054C15");
    check_field_offset(lv, s19054c15f0, ABISELECT(904,532), "S19054C15.s19054c15f0");
    check_field_offset(lv, s19054c15f1, ABISELECT(908,536), "S19054C15.s19054c15f1");
    check_field_offset(lv, s19054c15f2, ABISELECT(912,540), "S19054C15.s19054c15f2");
    check_field_offset(lv, s19054c15f3, ABISELECT(968,596), "S19054C15.s19054c15f3");
    check_field_offset(lv, s19054c15f4, ABISELECT(976,604), "S19054C15.s19054c15f4");
    test_class_info(&lv, &cd_S19054C15);
    dp->~S19054C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19054C15(Test_S19054C15, "S19054C15", ABISELECT(1360,836));

#else // __cplusplus

extern void _ZN9S19054C15C1Ev();
extern void _ZN9S19054C15D2Ev();
Name_Map name_map_S19054C15[] = {
  NSPAIR(_ZN9S19054C15C1Ev),
  NSPAIR(_ZN9S19054C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19054C10;
extern VTBL_ENTRY _ZTI9S19054C10[];
extern  VTBL_ENTRY _ZTV9S19054C10[];
extern Class_Descriptor cd_S19054C16;
extern VTBL_ENTRY _ZTI9S19054C16[];
extern  VTBL_ENTRY _ZTV9S19054C16[];
extern Class_Descriptor cd_S19054C4;
extern VTBL_ENTRY _ZTI8S19054C4[];
extern  VTBL_ENTRY _ZTV8S19054C4[];
extern Class_Descriptor cd_S19054C8;
extern VTBL_ENTRY _ZTI8S19054C8[];
extern  VTBL_ENTRY _ZTV8S19054C8[];
static Base_Class bases_S19054C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19054C10,    ABISELECT(984,608), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19054C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19054C4,    ABISELECT(1016,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19054C8,    ABISELECT(1016,624), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19054C15[];
extern void _ZN9S19054C163v10Ev();
extern void _ZN9S19054C163v11Ev();
extern void _ZN9S19054C15D1Ev();
extern void _ZN9S19054C15D0Ev();
extern void _ZN9S19054C153v12Ev();
extern void _ZN9S19054C153v13Ev();
extern void _ZN9S19054C153v14Ev();
extern void _ZN9S19054C102v7Ev();
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C82v6Ev();
static  VTBL_ENTRY vtc_S19054C15[] = {
  ABISELECT(1016,624),
  ABISELECT(984,608),
  0,
  (VTBL_ENTRY)&(_ZTI9S19054C15[0]),
  (VTBL_ENTRY)&_ZN9S19054C163v10Ev,
  (VTBL_ENTRY)&_ZN9S19054C163v11Ev,
  (VTBL_ENTRY)&_ZN9S19054C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19054C15D0Ev,
  (VTBL_ENTRY)&_ZN9S19054C153v12Ev,
  (VTBL_ENTRY)&_ZN9S19054C153v13Ev,
  (VTBL_ENTRY)&_ZN9S19054C153v14Ev,
  0,
  ABISELECT(-984,-608),
  (VTBL_ENTRY)&(_ZTI9S19054C15[0]),
  (VTBL_ENTRY)&_ZN9S19054C102v7Ev,
  0,
  0,
  ABISELECT(-1016,-624),
  (VTBL_ENTRY)&(_ZTI9S19054C15[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C82v6Ev,
};
extern VTBL_ENTRY _ZTV9S19054C15[];
static  VTT_ENTRY vtt_S19054C15[] = {
  {&(_ZTV9S19054C15[4]),  4,21},
  {&(_ZTV9S19054C15[14]),  14,21},
  {&(_ZTV9S19054C15[19]),  19,21},
};
extern VTBL_ENTRY _ZTI9S19054C15[];
extern  VTBL_ENTRY _ZTV9S19054C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19054C15[];
Class_Descriptor cd_S19054C15 = {  "S19054C15", // class name
  bases_S19054C15, 4,
  &(vtc_S19054C15[0]), // expected_vtbl_contents
  &(vtt_S19054C15[0]), // expected_vtt_contents
  ABISELECT(1360,836), // object size
  NSPAIRA(_ZTI9S19054C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19054C15),21, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19054C15),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19054C7  : S19054C8 , S19054C2 , virtual S19054C9 , virtual S19054C14 , S19054C15 {
  short s19054c7f0;
  char s19054c7f1;
  long double s19054c7f2;
  ::S19277C20 s19054c7f3;
  ::S19277C12_nt s19054c7f4;
  __tsi64 s19054c7f5:28;
  ::S19277C12_nt s19054c7f6;
  void *s19054c7f7;
  void *s19054c7f8;
  virtual  ~S19054C7(); // _ZN8S19054C7D2Ev
  S19054C7(); // tgen
};
//SIG(-1 S19054C7) C1{ BC2{ BC3{ v1} v2 Fc FL Fi[3] FC4{ BC3 Fc[5] FC5{ VBC3 v3 v4 v5 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8}} BC7{ BC4 VBC3 VBC5 Fi Fp} VBC8{ VBC9{ v6 FC6 Fi:3 Fp Fi} BC5 VBC4 FC10{ VBC11{ v16} BC12{ BC13{ VBC11 v17 v18 v19 Fp[3] FC6 Fp} v20 v21 Fp FC14{ BC15{ BC11 Fc[5] FC13[2] Fi Fp[7] FC13 FC11 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC11 VBC13 Fi Fp} Fi Fp Fi[2]} VBC16{ VBC15 v22 Fp FL Fp[6] FC11 FC17{ BC11 v23 Fc FL Fi[3] FC15} Fp Fi} vd v15 Fp[2] Fi[9] FC17 FC11[9] FL FD Fp FL Fl FL} Fi FD} VBC18{ VBC5 BC19{ VBC4 v7 Fp FL Fp[6] FC3 FC2 Fp Fi} v8 Fp FC3 FL[8] FC5 Fp} BC20{ VBC9 BC21{ v9 v10 Fp[2] Fi[2] Fp[15] Fi FC19} VBC2 vd v11 v12 v13 Fi Fs FL[7] Fc[5] Fp} vd Fs Fc FD FU22{ m Fp FL FL Fi:27 Fs:16 Fs Fp} FC23{ vd v14 Fi} FL:28 FC23 Fp Fp}


 S19054C7 ::~S19054C7(){ note_dtor("S19054C7", this);}
S19054C7 ::S19054C7(){ note_ctor("S19054C7", this);} // tgen

static void Test_S19054C7()
{
  extern Class_Descriptor cd_S19054C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(304,738)];
    init_test(&cd_S19054C7, buf);
    S19054C7 *dp, &lv = *(dp=new (buf) S19054C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4848,2948), "sizeof(S19054C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19054C7)");
    /*is_ambiguous_... S19054C7::S19054C8 */ AMB_check_base_class_offset(lv, (S19054C4*)(S19054C8*), 0, "S19054C7");
    /*is_ambiguous_... S19054C7::S19054C8 */ AMB_check_base_class_offset(lv, (S19054C8*), 0, "S19054C7");
    check_base_class_offset(lv, (S19054C4*)(S19054C3*)(S19054C2*), ABISELECT(344,212), "S19054C7");
    check_base_class_offset(lv, (S19054C3*)(S19054C2*), ABISELECT(344,212), "S19054C7");
    /*is_ambiguous_... S19054C2::S19054C4 */ AMB_check_base_class_offset(lv, (S19054C4*)(S19054C2*), ABISELECT(1728,1064), "S19054C7");
    /*is_ambiguous_... S19054C7::S19054C5 */ AMB_check_base_class_offset(lv, (S19054C4*)(S19054C5*), ABISELECT(1728,1064), "S19054C7");
    check_base_class_offset(lv, (S19054C4*)(S19054C5*)(S19054C9*), ABISELECT(1728,1064), "S19054C7");
    check_base_class_offset(lv, (S19054C5*)(S19054C2*), ABISELECT(1728,1064), "S19054C7");
    check_base_class_offset(lv, (S19054C5*)(S19054C14*), ABISELECT(1728,1064), "S19054C7");
    check_base_class_offset(lv, (S19054C2*), ABISELECT(344,212), "S19054C7");
    check_base_class_offset(lv, (S19054C10*)(S19054C9*), ABISELECT(3584,2172), "S19054C7");
    check_base_class_offset(lv, (S19054C10*)(S19054C15*), ABISELECT(3584,2172), "S19054C7");
    check_base_class_offset(lv, (S19054C5*)(S19054C9*), ABISELECT(1776,1088), "S19054C7");
    /*is_ambiguous_... S19054C7::S19054C3 */ AMB_check_base_class_offset(lv, (S19054C4*)(S19054C3*), ABISELECT(3616,2188), "S19054C7");
    check_base_class_offset(lv, (S19054C3*)(S19054C9*), ABISELECT(3616,2188), "S19054C7");
    check_base_class_offset(lv, (S19054C3*)(S19054C13*)(S19054C14*), ABISELECT(3616,2188), "S19054C7");
    check_base_class_offset(lv, (S19054C9*), ABISELECT(1776,1088), "S19054C7");
    check_base_class_offset(lv, (S19054C13*)(S19054C14*), ABISELECT(3920,2372), "S19054C7");
    check_base_class_offset(lv, (S19054C14*), ABISELECT(3920,2372), "S19054C7");
    check_base_class_offset(lv, (S19054C16*)(S19054C15*), ABISELECT(656,404), "S19054C7");
    /*is_ambiguous_... S19054C7::S19054C8 */ AMB_check_base_class_offset(lv, (S19054C4*)(S19054C8*), ABISELECT(4496,2736), "S19054C7");
    check_base_class_offset(lv, (S19054C8*)(S19054C15*), ABISELECT(4496,2736), "S19054C7");
    check_base_class_offset(lv, (S19054C15*), ABISELECT(656,404), "S19054C7");
    check_field_offset(lv, s19054c7f0, ABISELECT(1640,1012), "S19054C7.s19054c7f0");
    check_field_offset(lv, s19054c7f1, ABISELECT(1642,1014), "S19054C7.s19054c7f1");
    check_field_offset(lv, s19054c7f2, ABISELECT(1648,1016), "S19054C7.s19054c7f2");
    check_field_offset(lv, s19054c7f3, ABISELECT(1664,1028), "S19054C7.s19054c7f3");
    check_field_offset(lv, s19054c7f4, ABISELECT(1672,1036), "S19054C7.s19054c7f4");
    set_bf_and_test(lv, s19054c7f5, ABISELECT(1688,1044), 0, 28, 1, "S19054C7");
    set_bf_and_test(lv, s19054c7f5, ABISELECT(1688,1044), 0, 28, hide_sll(1LL<<27), "S19054C7");
    check_field_offset(lv, s19054c7f6, ABISELECT(1696,1048), "S19054C7.s19054c7f6");
    check_field_offset(lv, s19054c7f7, ABISELECT(1712,1056), "S19054C7.s19054c7f7");
    check_field_offset(lv, s19054c7f8, ABISELECT(1720,1060), "S19054C7.s19054c7f8");
    test_class_info(&lv, &cd_S19054C7);
    dp->~S19054C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19054C7(Test_S19054C7, "S19054C7", ABISELECT(4848,2948));

#else // __cplusplus

extern void _ZN8S19054C7C1Ev();
extern void _ZN8S19054C7D2Ev();
Name_Map name_map_S19054C7[] = {
  NSPAIR(_ZN8S19054C7C1Ev),
  NSPAIR(_ZN8S19054C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19054C4;
extern VTBL_ENTRY _ZTI8S19054C4[];
extern  VTBL_ENTRY _ZTV8S19054C4[];
extern Class_Descriptor cd_S19054C8;
extern VTBL_ENTRY _ZTI8S19054C8[];
extern  VTBL_ENTRY _ZTV8S19054C8[];
extern Class_Descriptor cd_S19054C4;
extern VTBL_ENTRY _ZTI8S19054C4[];
extern  VTBL_ENTRY _ZTV8S19054C4[];
extern Class_Descriptor cd_S19054C3;
extern VTBL_ENTRY _ZTI8S19054C3[];
extern  VTBL_ENTRY _ZTV8S19054C3[];
extern Class_Descriptor cd_S19054C4;
extern VTBL_ENTRY _ZTI8S19054C4[];
extern  VTBL_ENTRY _ZTV8S19054C4[];
extern Class_Descriptor cd_S19054C5;
extern VTBL_ENTRY _ZTI8S19054C5[];
extern  VTBL_ENTRY _ZTV8S19054C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19054C5[];
extern Class_Descriptor cd_S19054C2;
extern VTBL_ENTRY _ZTI8S19054C2[];
extern  VTBL_ENTRY _ZTV8S19054C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19054C2[];
extern Class_Descriptor cd_S19054C10;
extern VTBL_ENTRY _ZTI9S19054C10[];
extern  VTBL_ENTRY _ZTV9S19054C10[];
extern Class_Descriptor cd_S19054C5;
extern VTBL_ENTRY _ZTI8S19054C5[];
extern  VTBL_ENTRY _ZTV8S19054C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19054C5[];
extern Class_Descriptor cd_S19054C4;
extern VTBL_ENTRY _ZTI8S19054C4[];
extern  VTBL_ENTRY _ZTV8S19054C4[];
extern Class_Descriptor cd_S19054C3;
extern VTBL_ENTRY _ZTI8S19054C3[];
extern  VTBL_ENTRY _ZTV8S19054C3[];
extern Class_Descriptor cd_S19054C9;
extern VTBL_ENTRY _ZTI8S19054C9[];
extern  VTBL_ENTRY _ZTV8S19054C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19054C9[];
extern Class_Descriptor cd_S19054C13;
extern VTBL_ENTRY _ZTI9S19054C13[];
extern  VTBL_ENTRY _ZTV9S19054C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19054C13[];
extern Class_Descriptor cd_S19054C14;
extern VTBL_ENTRY _ZTI9S19054C14[];
extern  VTBL_ENTRY _ZTV9S19054C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19054C14[];
extern Class_Descriptor cd_S19054C16;
extern VTBL_ENTRY _ZTI9S19054C16[];
extern  VTBL_ENTRY _ZTV9S19054C16[];
extern Class_Descriptor cd_S19054C4;
extern VTBL_ENTRY _ZTI8S19054C4[];
extern  VTBL_ENTRY _ZTV8S19054C4[];
extern Class_Descriptor cd_S19054C8;
extern VTBL_ENTRY _ZTI8S19054C8[];
extern  VTBL_ENTRY _ZTV8S19054C8[];
extern Class_Descriptor cd_S19054C15;
extern VTBL_ENTRY _ZTI9S19054C15[];
extern  VTBL_ENTRY _ZTV9S19054C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19054C15[];
static Base_Class bases_S19054C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19054C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19054C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19054C4,    ABISELECT(344,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19054C3,    ABISELECT(344,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19054C4,    ABISELECT(1728,1064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19054C5,    ABISELECT(1728,1064), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19054C2,    ABISELECT(344,212), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19054C10,    ABISELECT(3584,2172), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19054C5,    ABISELECT(1776,1088), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19054C4,    ABISELECT(3616,2188), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19054C3,    ABISELECT(3616,2188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19054C9,    ABISELECT(1776,1088), //bcp->offset
    40, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19054C13,    ABISELECT(3920,2372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19054C14,    ABISELECT(3920,2372), //bcp->offset
    61, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19054C16,    ABISELECT(656,404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19054C4,    ABISELECT(4496,2736), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19054C8,    ABISELECT(4496,2736), //bcp->offset
    70, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19054C15,    ABISELECT(656,404), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19054C7[];
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C82v6Ev();
extern void _ZN8S19054C7D1Ev();
extern void _ZN8S19054C7D0Ev();
extern void _ZN8S19054C42v2Ev();
extern void _ZN9S19054C163v10Ev();
extern void _ZN9S19054C163v11Ev();
extern void ABISELECT(_ZThn656_N8S19054C7D1Ev,_ZThn404_N8S19054C7D1Ev)();
extern void ABISELECT(_ZThn656_N8S19054C7D0Ev,_ZThn404_N8S19054C7D0Ev)();
extern void _ZN9S19054C153v12Ev();
extern void _ZN9S19054C153v13Ev();
extern void _ZN9S19054C153v14Ev();
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C52v3Ev();
extern void _ZN8S19054C52v4Ev();
extern void _ZN8S19054C52v5Ev();
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C52v3Ev();
extern void _ZN8S19054C52v4Ev();
extern void _ZN8S19054C52v5Ev();
extern void _ZN9S19054C102v7Ev();
extern void _ZN8S19054C42v2Ev();
extern void _ZN9S19054C132v8Ev();
extern void _ZN9S19054C142v9Ev();
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C82v6Ev();
static  VTBL_ENTRY vtc_S19054C7[] = {
  ABISELECT(4496,2736),
  ABISELECT(3920,2372),
  ABISELECT(3616,2188),
  ABISELECT(3584,2172),
  ABISELECT(1776,1088),
  ABISELECT(1728,1064),
  ABISELECT(1728,1064),
  0,
  (VTBL_ENTRY)&(_ZTI8S19054C7[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C82v6Ev,
  (VTBL_ENTRY)&_ZN8S19054C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19054C7D0Ev,
  ABISELECT(1384,852),
  ABISELECT(1384,852),
  ABISELECT(-344,-212),
  (VTBL_ENTRY)&(_ZTI8S19054C7[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  ABISELECT(3840,2332),
  ABISELECT(2928,1768),
  ABISELECT(-656,-404),
  (VTBL_ENTRY)&(_ZTI8S19054C7[0]),
  (VTBL_ENTRY)&_ZN9S19054C163v10Ev,
  (VTBL_ENTRY)&_ZN9S19054C163v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn656_N8S19054C7D1Ev,_ZThn404_N8S19054C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn656_N8S19054C7D0Ev,_ZThn404_N8S19054C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19054C153v12Ev,
  (VTBL_ENTRY)&_ZN9S19054C153v13Ev,
  (VTBL_ENTRY)&_ZN9S19054C153v14Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1728,-1064),
  (VTBL_ENTRY)&(_ZTI8S19054C7[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v5Ev,
  0,
  0,
  0,
  ABISELECT(1840,1100),
  ABISELECT(1808,1084),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-1776,-1088),
  (VTBL_ENTRY)&(_ZTI8S19054C7[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v5Ev,
  0,
  ABISELECT(-3584,-2172),
  (VTBL_ENTRY)&(_ZTI8S19054C7[0]),
  (VTBL_ENTRY)&_ZN9S19054C102v7Ev,
  0,
  ABISELECT(-3616,-2188),
  (VTBL_ENTRY)&(_ZTI8S19054C7[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  0,
  0,
  ABISELECT(-2192,-1308),
  ABISELECT(-2192,-1308),
  ABISELECT(-304,-184),
  ABISELECT(-3920,-2372),
  (VTBL_ENTRY)&(_ZTI8S19054C7[0]),
  (VTBL_ENTRY)&_ZN9S19054C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19054C142v9Ev,
  0,
  0,
  ABISELECT(-4496,-2736),
  (VTBL_ENTRY)&(_ZTI8S19054C7[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C82v6Ev,
};
extern VTBL_ENTRY _ZTV8S19054C7[];
extern void _ZN8S19054C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C2__8S19054C7[] = {
  ABISELECT(1384,852),
  ABISELECT(1384,852),
  0,
  (VTBL_ENTRY)&(_ZTI8S19054C2[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
};
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C52v3Ev();
extern void _ZN8S19054C52v4Ev();
extern void _ZN8S19054C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C5__8S19054C2__8S19054C7[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1384,-852),
  (VTBL_ENTRY)&(_ZTI8S19054C2[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v5Ev,
};
extern void _ZN9S19054C163v10Ev();
extern void _ZN9S19054C163v11Ev();
extern void _ZN9S19054C15D1Ev();
extern void _ZN9S19054C15D0Ev();
extern void _ZN9S19054C153v12Ev();
extern void _ZN9S19054C153v13Ev();
extern void _ZN9S19054C153v14Ev();
static  VTBL_ENTRY _tg__ZTV9S19054C15__8S19054C7[] = {
  ABISELECT(3840,2332),
  ABISELECT(2928,1768),
  0,
  (VTBL_ENTRY)&(_ZTI9S19054C15[0]),
  (VTBL_ENTRY)&_ZN9S19054C163v10Ev,
  (VTBL_ENTRY)&_ZN9S19054C163v11Ev,
  (VTBL_ENTRY)&_ZN9S19054C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19054C15D0Ev,
  (VTBL_ENTRY)&_ZN9S19054C153v12Ev,
  (VTBL_ENTRY)&_ZN9S19054C153v13Ev,
  (VTBL_ENTRY)&_ZN9S19054C153v14Ev,
};
extern void _ZN9S19054C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19054C10__9S19054C15__8S19054C7[] = {
  0,
  ABISELECT(-2928,-1768),
  (VTBL_ENTRY)&(_ZTI9S19054C15[0]),
  (VTBL_ENTRY)&_ZN9S19054C102v7Ev,
};
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C8__9S19054C15__8S19054C7[] = {
  0,
  0,
  ABISELECT(-3840,-2332),
  (VTBL_ENTRY)&(_ZTI9S19054C15[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C82v6Ev,
};
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C52v3Ev();
extern void _ZN8S19054C52v4Ev();
extern void _ZN8S19054C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C5__8S19054C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19054C5[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v5Ev,
};
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C52v3Ev();
extern void _ZN8S19054C52v4Ev();
extern void _ZN8S19054C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C9__8S19054C7[] = {
  ABISELECT(1840,1100),
  ABISELECT(1808,1084),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19054C9[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v5Ev,
};
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C52v3Ev();
extern void _ZN8S19054C52v4Ev();
extern void _ZN8S19054C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C58S19054C9__A1__8S19054C7[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19054C5[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v5Ev,
};
extern void _ZN8S19054C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C4__8S19054C58S19054C9__A1__8S19054C7[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19054C5[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
};
extern void _ZN9S19054C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19054C10__8S19054C9__8S19054C7[] = {
  0,
  ABISELECT(-1808,-1084),
  (VTBL_ENTRY)&(_ZTI8S19054C9[0]),
  (VTBL_ENTRY)&_ZN9S19054C102v7Ev,
};
extern void _ZN8S19054C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C4__8S19054C9__8S19054C7[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19054C9[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
};
extern void _ZN8S19054C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C48S19054C3__A1__8S19054C9__8S19054C7[] = {
  0,
  ABISELECT(-1840,-1100),
  (VTBL_ENTRY)&(_ZTI8S19054C9[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
};
extern void _ZN9S19054C132v8Ev();
extern void _ZN9S19054C142v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19054C14__8S19054C7[] = {
  ABISELECT(-2192,-1308),
  ABISELECT(-2192,-1308),
  ABISELECT(-304,-184),
  0,
  (VTBL_ENTRY)&(_ZTI9S19054C14[0]),
  (VTBL_ENTRY)&_ZN9S19054C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19054C142v9Ev,
};
extern void _ZN9S19054C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19054C139S19054C14__8S19054C7[] = {
  ABISELECT(-304,-184),
  0,
  (VTBL_ENTRY)&(_ZTI9S19054C13[0]),
  (VTBL_ENTRY)&_ZN9S19054C132v8Ev,
};
extern void _ZN8S19054C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C48S19054C3__9S19054C139S19054C14__8S19054C7[] = {
  0,
  ABISELECT(304,184),
  (VTBL_ENTRY)&(_ZTI9S19054C13[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
};
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C52v3Ev();
extern void _ZN8S19054C52v4Ev();
extern void _ZN8S19054C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C5__9S19054C14__8S19054C7[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(2192,1308),
  (VTBL_ENTRY)&(_ZTI9S19054C14[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v5Ev,
};
extern void _ZN8S19054C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C48S19054C3__A1__9S19054C14__8S19054C7[] = {
  0,
  ABISELECT(304,184),
  (VTBL_ENTRY)&(_ZTI9S19054C14[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
};
static  VTT_ENTRY vtt_S19054C7[] = {
  {&(_ZTV8S19054C7[9]),  9,76},
  {&(_tg__ZTV8S19054C2__8S19054C7[4]),  4,5},
  {&(_tg__ZTV8S19054C5__8S19054C2__8S19054C7[7]),  7,11},
  {&(_tg__ZTV8S19054C5__8S19054C2__8S19054C7[7]),  7,11},
  {&(_tg__ZTV9S19054C15__8S19054C7[4]),  4,11},
  {&(_tg__ZTV9S19054C10__9S19054C15__8S19054C7[3]),  3,4},
  {&(_tg__ZTV8S19054C8__9S19054C15__8S19054C7[4]),  4,6},
  {&(_ZTV8S19054C7[17]),  17,76},
  {&(_ZTV8S19054C7[36]),  36,76},
  {&(_ZTV8S19054C7[36]),  36,76},
  {&(_ZTV8S19054C7[49]),  49,76},
  {&(_ZTV8S19054C7[56]),  56,76},
  {&(_ZTV8S19054C7[60]),  60,76},
  {&(_ZTV8S19054C7[68]),  68,76},
  {&(_ZTV8S19054C7[22]),  22,76},
  {&(_ZTV8S19054C7[74]),  74,76},
  {&(_tg__ZTV8S19054C5__8S19054C7[4]),  4,8},
  {&(_tg__ZTV8S19054C5__8S19054C7[4]),  4,8},
  {&(_tg__ZTV8S19054C9__8S19054C7[6]),  6,10},
  {&(_tg__ZTV8S19054C58S19054C9__A1__8S19054C7[4]),  4,8},
  {&(_tg__ZTV8S19054C4__8S19054C58S19054C9__A1__8S19054C7[3]),  3,4},
  {&(_tg__ZTV9S19054C10__8S19054C9__8S19054C7[3]),  3,4},
  {&(_tg__ZTV8S19054C4__8S19054C9__8S19054C7[3]),  3,4},
  {&(_tg__ZTV8S19054C48S19054C3__A1__8S19054C9__8S19054C7[3]),  3,4},
  {&(_tg__ZTV9S19054C14__8S19054C7[5]),  5,7},
  {&(_tg__ZTV9S19054C139S19054C14__8S19054C7[3]),  3,4},
  {&(_tg__ZTV8S19054C48S19054C3__9S19054C139S19054C14__8S19054C7[3]),  3,4},
  {&(_tg__ZTV8S19054C5__9S19054C14__8S19054C7[7]),  7,11},
  {&(_tg__ZTV8S19054C5__9S19054C14__8S19054C7[7]),  7,11},
  {&(_tg__ZTV8S19054C48S19054C3__A1__9S19054C14__8S19054C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19054C7[];
extern  VTBL_ENTRY _ZTV8S19054C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19054C7[];
Class_Descriptor cd_S19054C7 = {  "S19054C7", // class name
  bases_S19054C7, 18,
  &(vtc_S19054C7[0]), // expected_vtbl_contents
  &(vtt_S19054C7[0]), // expected_vtt_contents
  ABISELECT(4848,2948), // object size
  NSPAIRA(_ZTI8S19054C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19054C7),76, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19054C7),30, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19054C1  : virtual S19054C2 {
  char s19054c1f0;
  __tsi64 s19054c1f1[4];
  short s19054c1f2;
  ::S19054C7 s19054c1f3;
  ::S19277C15 s19054c1f4;
  long double s19054c1f5;
  int s19054c1f6;
  ::S19277C20 s19054c1f7;
  void *s19054c1f8;
  virtual  ~S19054C1(); // _ZN8S19054C1D2Ev
  virtual void  v1(); // _ZN8S19054C12v1Ev
  S19054C1(); // tgen
};
//SIG(1 S19054C1) C1{ VBC2{ BC3{ BC4{ v2} Fc[5] FC5{ VBC4 v3 v4 v5 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC4 VBC5 Fi Fp} vd v1 Fc FL[4] Fs FC7{ BC8{ BC4 v6 Fc FL Fi[3] FC3} BC2 VBC9{ VBC10{ v7 FC6 Fi:3 Fp Fi} BC5 VBC3 FC11{ VBC12{ v17} BC13{ BC14{ VBC12 v18 v19 v20 Fp[3] FC6 Fp} v21 v22 Fp FC15{ BC16{ BC12 Fc[5] FC14[2] Fi Fp[7] FC14 FC12 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC12 VBC14 Fi Fp} Fi Fp Fi[2]} VBC17{ VBC16 v23 Fp FL Fp[6] FC12 FC18{ BC12 v24 Fc FL Fi[3] FC16} Fp Fi} vd v16 Fp[2] Fi[9] FC18 FC12[9] FL FD Fp FL Fl FL} Fi FD} VBC19{ VBC5 BC20{ VBC3 v8 Fp FL Fp[6] FC4 FC8 Fp Fi} v9 Fp FC4 FL[8] FC5 Fp} BC21{ VBC10 BC22{ v10 v11 Fp[2] Fi[2] Fp[15] Fi FC20} VBC8 vd v12 v13 v14 Fi Fs FL[7] Fc[5] Fp} vd Fs Fc FD FU23{ m Fp FL FL Fi:27 Fs:16 Fs Fp} FC24{ vd v15 Fi} FL:28 FC24 Fp Fp} FC11 FD Fi FU23 Fp}


 S19054C1 ::~S19054C1(){ note_dtor("S19054C1", this);}
void  S19054C1 ::v1(){vfunc_called(this, "_ZN8S19054C12v1Ev");}
S19054C1 ::S19054C1(){ note_ctor("S19054C1", this);} // tgen

static void Test_S19054C1()
{
  extern Class_Descriptor cd_S19054C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(441,1071)];
    init_test(&cd_S19054C1, buf);
    S19054C1 *dp, &lv = *(dp=new (buf) S19054C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7040,4280), "sizeof(S19054C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19054C1)");
    check_base_class_offset(lv, (S19054C4*)(S19054C3*)(S19054C2*), ABISELECT(6680,4064), "S19054C1");
    check_base_class_offset(lv, (S19054C3*)(S19054C2*), ABISELECT(6680,4064), "S19054C1");
    /*is_ambiguous_... S19054C2::S19054C4 */ AMB_check_base_class_offset(lv, (S19054C4*)(S19054C2*), 0, "S19054C1");
    check_base_class_offset(lv, (S19054C4*)(S19054C5*), 0, "S19054C1");
    check_base_class_offset(lv, (S19054C5*)(S19054C2*), ABISELECT(6992,4256), "S19054C1");
    check_base_class_offset(lv, (S19054C2*), ABISELECT(6680,4064), "S19054C1");
    check_field_offset(lv, s19054c1f0, ABISELECT(8,4), "S19054C1.s19054c1f0");
    check_field_offset(lv, s19054c1f1, ABISELECT(16,8), "S19054C1.s19054c1f1");
    check_field_offset(lv, s19054c1f2, ABISELECT(48,40), "S19054C1.s19054c1f2");
    check_field_offset(lv, s19054c1f3, ABISELECT(64,44), "S19054C1.s19054c1f3");
    check_field_offset(lv, s19054c1f4, ABISELECT(4912,2992), "S19054C1.s19054c1f4");
    check_field_offset(lv, s19054c1f5, ABISELECT(6640,4036), "S19054C1.s19054c1f5");
    check_field_offset(lv, s19054c1f6, ABISELECT(6656,4048), "S19054C1.s19054c1f6");
    check_field_offset(lv, s19054c1f7, ABISELECT(6664,4052), "S19054C1.s19054c1f7");
    check_field_offset(lv, s19054c1f8, ABISELECT(6672,4060), "S19054C1.s19054c1f8");
    test_class_info(&lv, &cd_S19054C1);
    dp->~S19054C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19054C1(Test_S19054C1, "S19054C1", ABISELECT(7040,4280));

#else // __cplusplus

extern void _ZN8S19054C1C1Ev();
extern void _ZN8S19054C1D2Ev();
Name_Map name_map_S19054C1[] = {
  NSPAIR(_ZN8S19054C1C1Ev),
  NSPAIR(_ZN8S19054C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19054C4;
extern VTBL_ENTRY _ZTI8S19054C4[];
extern  VTBL_ENTRY _ZTV8S19054C4[];
extern Class_Descriptor cd_S19054C3;
extern VTBL_ENTRY _ZTI8S19054C3[];
extern  VTBL_ENTRY _ZTV8S19054C3[];
extern Class_Descriptor cd_S19054C4;
extern VTBL_ENTRY _ZTI8S19054C4[];
extern  VTBL_ENTRY _ZTV8S19054C4[];
extern Class_Descriptor cd_S19054C5;
extern VTBL_ENTRY _ZTI8S19054C5[];
extern  VTBL_ENTRY _ZTV8S19054C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19054C5[];
extern Class_Descriptor cd_S19054C2;
extern VTBL_ENTRY _ZTI8S19054C2[];
extern  VTBL_ENTRY _ZTV8S19054C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19054C2[];
static Base_Class bases_S19054C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19054C4,    ABISELECT(6680,4064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19054C3,    ABISELECT(6680,4064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19054C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19054C5,    ABISELECT(6992,4256), //bcp->offset
    16, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19054C2,    ABISELECT(6680,4064), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19054C1[];
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C1D1Ev();
extern void _ZN8S19054C1D0Ev();
extern void _ZN8S19054C12v1Ev();
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C52v3Ev();
extern void _ZN8S19054C52v4Ev();
extern void _ZN8S19054C52v5Ev();
static  VTBL_ENTRY vtc_S19054C1[] = {
  ABISELECT(6992,4256),
  0,
  ABISELECT(6680,4064),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19054C1[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19054C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19054C12v1Ev,
  0,
  ABISELECT(312,192),
  ABISELECT(-6680,-4064),
  ABISELECT(-6680,-4064),
  (VTBL_ENTRY)&(_ZTI8S19054C1[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  0,
  0,
  0,
  ABISELECT(-6992,-4256),
  ABISELECT(-6992,-4256),
  ABISELECT(-6992,-4256),
  (VTBL_ENTRY)&(_ZTI8S19054C1[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v5Ev,
};
extern VTBL_ENTRY _ZTV8S19054C1[];
extern void _ZN8S19054C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C2__8S19054C1[] = {
  ABISELECT(312,192),
  ABISELECT(-6680,-4064),
  0,
  (VTBL_ENTRY)&(_ZTI8S19054C2[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
};
extern void _ZN8S19054C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C4__A1__8S19054C2__8S19054C1[] = {
  0,
  ABISELECT(6680,4064),
  (VTBL_ENTRY)&(_ZTI8S19054C2[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
};
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C52v3Ev();
extern void _ZN8S19054C52v4Ev();
extern void _ZN8S19054C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C5__8S19054C2__8S19054C1[] = {
  0,
  0,
  0,
  ABISELECT(-6992,-4256),
  ABISELECT(-6992,-4256),
  ABISELECT(-312,-192),
  (VTBL_ENTRY)&(_ZTI8S19054C2[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v5Ev,
};
extern void _ZN8S19054C42v2Ev();
extern void _ZN8S19054C52v3Ev();
extern void _ZN8S19054C52v4Ev();
extern void _ZN8S19054C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C5__8S19054C1[] = {
  ABISELECT(-6992,-4256),
  ABISELECT(-6992,-4256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19054C5[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19054C52v5Ev,
};
extern void _ZN8S19054C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19054C4__8S19054C5__8S19054C1[] = {
  0,
  ABISELECT(6992,4256),
  (VTBL_ENTRY)&(_ZTI8S19054C5[0]),
  (VTBL_ENTRY)&_ZN8S19054C42v2Ev,
};
static  VTT_ENTRY vtt_S19054C1[] = {
  {&(_ZTV8S19054C1[6]),  6,27},
  {&(_ZTV8S19054C1[15]),  15,27},
  {&(_ZTV8S19054C1[6]),  6,27},
  {&(_ZTV8S19054C1[23]),  23,27},
  {&(_tg__ZTV8S19054C2__8S19054C1[4]),  4,5},
  {&(_tg__ZTV8S19054C4__A1__8S19054C2__8S19054C1[3]),  3,4},
  {&(_tg__ZTV8S19054C5__8S19054C2__8S19054C1[7]),  7,11},
  {&(_tg__ZTV8S19054C5__8S19054C1[4]),  4,8},
  {&(_tg__ZTV8S19054C4__8S19054C5__8S19054C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19054C1[];
extern  VTBL_ENTRY _ZTV8S19054C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19054C1[];
Class_Descriptor cd_S19054C1 = {  "S19054C1", // class name
  bases_S19054C1, 5,
  &(vtc_S19054C1[0]), // expected_vtbl_contents
  &(vtt_S19054C1[0]), // expected_vtt_contents
  ABISELECT(7040,4280), // object size
  NSPAIRA(_ZTI8S19054C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19054C1),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19054C1),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19053C4  {
  virtual void  v2(); // _ZN8S19053C42v2Ev
  ~S19053C4(); // tgen
  S19053C4(); // tgen
};
//SIG(-1 S19053C4) C1{ v1}


void  S19053C4 ::v2(){vfunc_called(this, "_ZN8S19053C42v2Ev");}
S19053C4 ::~S19053C4(){ note_dtor("S19053C4", this);} // tgen
S19053C4 ::S19053C4(){ note_ctor("S19053C4", this);} // tgen

static void Test_S19053C4()
{
  extern Class_Descriptor cd_S19053C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19053C4, buf);
    S19053C4 *dp, &lv = *(dp=new (buf) S19053C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19053C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19053C4)");
    test_class_info(&lv, &cd_S19053C4);
    dp->~S19053C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19053C4(Test_S19053C4, "S19053C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19053C4C1Ev();
extern void _ZN8S19053C4D1Ev();
Name_Map name_map_S19053C4[] = {
  NSPAIR(_ZN8S19053C4C1Ev),
  NSPAIR(_ZN8S19053C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19053C4[];
extern void _ZN8S19053C42v2Ev();
static  VTBL_ENTRY vtc_S19053C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19053C4[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S19053C4[];
extern  VTBL_ENTRY _ZTV8S19053C4[];
Class_Descriptor cd_S19053C4 = {  "S19053C4", // class name
  0,0,//no base classes
  &(vtc_S19053C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19053C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19053C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19053C5  : virtual S19053C4 {
  void *s19053c5f0[3];
  ::S2489C12_nt s19053c5f1;
  void *s19053c5f2;
  virtual void  v3(); // _ZN8S19053C52v3Ev
  virtual void  v4(); // _ZN8S19053C52v4Ev
  virtual void  v5(); // _ZN8S19053C52v5Ev
  ~S19053C5(); // tgen
  S19053C5(); // tgen
};
//SIG(-1 S19053C5) C1{ VBC2{ v4} v1 v2 v3 Fp[3] FC3{} Fp}


void  S19053C5 ::v3(){vfunc_called(this, "_ZN8S19053C52v3Ev");}
void  S19053C5 ::v4(){vfunc_called(this, "_ZN8S19053C52v4Ev");}
void  S19053C5 ::v5(){vfunc_called(this, "_ZN8S19053C52v5Ev");}
S19053C5 ::~S19053C5(){ note_dtor("S19053C5", this);} // tgen
S19053C5 ::S19053C5(){ note_ctor("S19053C5", this);} // tgen

static void Test_S19053C5()
{
  extern Class_Descriptor cd_S19053C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S19053C5, buf);
    S19053C5 *dp, &lv = *(dp=new (buf) S19053C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19053C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19053C5)");
    check_base_class_offset(lv, (S19053C4*), 0, "S19053C5");
    check_field_offset(lv, s19053c5f0, ABISELECT(8,4), "S19053C5.s19053c5f0");
    check_field_offset(lv, s19053c5f1, ABISELECT(32,16), "S19053C5.s19053c5f1");
    check_field_offset(lv, s19053c5f2, ABISELECT(40,20), "S19053C5.s19053c5f2");
    test_class_info(&lv, &cd_S19053C5);
    dp->~S19053C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19053C5(Test_S19053C5, "S19053C5", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19053C5C1Ev();
extern void _ZN8S19053C5D1Ev();
Name_Map name_map_S19053C5[] = {
  NSPAIR(_ZN8S19053C5C1Ev),
  NSPAIR(_ZN8S19053C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19053C4;
extern VTBL_ENTRY _ZTI8S19053C4[];
extern  VTBL_ENTRY _ZTV8S19053C4[];
static Base_Class bases_S19053C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19053C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19053C5[];
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C52v3Ev();
extern void _ZN8S19053C52v4Ev();
extern void _ZN8S19053C52v5Ev();
static  VTBL_ENTRY vtc_S19053C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19053C5[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v5Ev,
};
extern VTBL_ENTRY _ZTV8S19053C5[];
static  VTT_ENTRY vtt_S19053C5[] = {
  {&(_ZTV8S19053C5[4]),  4,8},
  {&(_ZTV8S19053C5[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S19053C5[];
extern  VTBL_ENTRY _ZTV8S19053C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19053C5[];
Class_Descriptor cd_S19053C5 = {  "S19053C5", // class name
  bases_S19053C5, 1,
  &(vtc_S19053C5[0]), // expected_vtbl_contents
  &(vtt_S19053C5[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19053C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19053C5),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19053C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19053C3  : S19053C4 {
  char s19053c3f0[5];
  ::S19053C5 s19053c3f1[2];
  int s19053c3f2;
  void *s19053c3f3[7];
  ::S19053C5 s19053c3f4;
  ::S19053C4 s19053c3f5;
  char s19053c3f6;
  int s19053c3f7;
  short s19053c3f8[5];
  int s19053c3f9[8];
  __tsi64 s19053c3f10;
  char s19053c3f11:8;
  ~S19053C3(); // tgen
  S19053C3(); // tgen
};
//SIG(-1 S19053C3) C1{ BC2{ v1} Fc[5] FC3{ VBC2 v2 v3 v4 Fp[3] FC4{} Fp}[2] Fi Fp[7] FC3 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}


S19053C3 ::~S19053C3(){ note_dtor("S19053C3", this);} // tgen
S19053C3 ::S19053C3(){ note_ctor("S19053C3", this);} // tgen

static void Test_S19053C3()
{
  extern Class_Descriptor cd_S19053C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,47)];
    init_test(&cd_S19053C3, buf);
    S19053C3 *dp, &lv = *(dp=new (buf) S19053C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,184), "sizeof(S19053C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19053C3)");
    check_base_class_offset(lv, (S19053C4*), 0, "S19053C3");
    check_field_offset(lv, s19053c3f0, ABISELECT(8,4), "S19053C3.s19053c3f0");
    check_field_offset(lv, s19053c3f1, ABISELECT(16,12), "S19053C3.s19053c3f1");
    check_field_offset(lv, s19053c3f2, ABISELECT(112,60), "S19053C3.s19053c3f2");
    check_field_offset(lv, s19053c3f3, ABISELECT(120,64), "S19053C3.s19053c3f3");
    check_field_offset(lv, s19053c3f4, ABISELECT(176,92), "S19053C3.s19053c3f4");
    check_field_offset(lv, s19053c3f5, ABISELECT(224,116), "S19053C3.s19053c3f5");
    check_field_offset(lv, s19053c3f6, ABISELECT(232,120), "S19053C3.s19053c3f6");
    check_field_offset(lv, s19053c3f7, ABISELECT(236,124), "S19053C3.s19053c3f7");
    check_field_offset(lv, s19053c3f8, ABISELECT(240,128), "S19053C3.s19053c3f8");
    check_field_offset(lv, s19053c3f9, ABISELECT(252,140), "S19053C3.s19053c3f9");
    check_field_offset(lv, s19053c3f10, ABISELECT(288,172), "S19053C3.s19053c3f10");
    set_bf_and_test(lv, s19053c3f11, ABISELECT(296,180), 0, 8, 1, "S19053C3");
    set_bf_and_test(lv, s19053c3f11, ABISELECT(296,180), 0, 8, hide_sll(1LL<<7), "S19053C3");
    test_class_info(&lv, &cd_S19053C3);
    dp->~S19053C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19053C3(Test_S19053C3, "S19053C3", ABISELECT(304,184));

#else // __cplusplus

extern void _ZN8S19053C3C1Ev();
extern void _ZN8S19053C3D1Ev();
Name_Map name_map_S19053C3[] = {
  NSPAIR(_ZN8S19053C3C1Ev),
  NSPAIR(_ZN8S19053C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19053C4;
extern VTBL_ENTRY _ZTI8S19053C4[];
extern  VTBL_ENTRY _ZTV8S19053C4[];
static Base_Class bases_S19053C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19053C4,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19053C3[];
extern void _ZN8S19053C42v2Ev();
static  VTBL_ENTRY vtc_S19053C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19053C3[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S19053C3[];
extern  VTBL_ENTRY _ZTV8S19053C3[];
Class_Descriptor cd_S19053C3 = {  "S19053C3", // class name
  bases_S19053C3, 1,
  &(vtc_S19053C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,184), // object size
  NSPAIRA(_ZTI8S19053C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19053C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19053C2  : S19053C3 , virtual S19053C4 , virtual S19053C5 {
  int s19053c2f0;
  void *s19053c2f1;
  ~S19053C2(); // tgen
  S19053C2(); // tgen
};
//SIG(-1 S19053C2) C1{ BC2{ BC3{ v1} Fc[5] FC4{ VBC3 v2 v3 v4 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC3 VBC4 Fi Fp}


S19053C2 ::~S19053C2(){ note_dtor("S19053C2", this);} // tgen
S19053C2 ::S19053C2(){ note_ctor("S19053C2", this);} // tgen

static void Test_S19053C2()
{
  extern Class_Descriptor cd_S19053C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,55)];
    init_test(&cd_S19053C2, buf);
    S19053C2 *dp, &lv = *(dp=new (buf) S19053C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,216), "sizeof(S19053C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19053C2)");
    check_base_class_offset(lv, (S19053C4*)(S19053C3*), 0, "S19053C2");
    check_base_class_offset(lv, (S19053C3*), 0, "S19053C2");
    /*is_ambiguous_... S19053C2::S19053C4 */ AMB_check_base_class_offset(lv, (S19053C4*), ABISELECT(312,192), "S19053C2");
    check_base_class_offset(lv, (S19053C4*)(S19053C5*), ABISELECT(312,192), "S19053C2");
    check_base_class_offset(lv, (S19053C5*), ABISELECT(312,192), "S19053C2");
    check_field_offset(lv, s19053c2f0, ABISELECT(300,184), "S19053C2.s19053c2f0");
    check_field_offset(lv, s19053c2f1, ABISELECT(304,188), "S19053C2.s19053c2f1");
    test_class_info(&lv, &cd_S19053C2);
    dp->~S19053C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19053C2(Test_S19053C2, "S19053C2", ABISELECT(360,216));

#else // __cplusplus

extern void _ZN8S19053C2C1Ev();
extern void _ZN8S19053C2D1Ev();
Name_Map name_map_S19053C2[] = {
  NSPAIR(_ZN8S19053C2C1Ev),
  NSPAIR(_ZN8S19053C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19053C4;
extern VTBL_ENTRY _ZTI8S19053C4[];
extern  VTBL_ENTRY _ZTV8S19053C4[];
extern Class_Descriptor cd_S19053C3;
extern VTBL_ENTRY _ZTI8S19053C3[];
extern  VTBL_ENTRY _ZTV8S19053C3[];
extern Class_Descriptor cd_S19053C4;
extern VTBL_ENTRY _ZTI8S19053C4[];
extern  VTBL_ENTRY _ZTV8S19053C4[];
extern Class_Descriptor cd_S19053C5;
extern VTBL_ENTRY _ZTI8S19053C5[];
extern  VTBL_ENTRY _ZTV8S19053C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19053C5[];
static Base_Class bases_S19053C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19053C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19053C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19053C4,    ABISELECT(312,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19053C5,    ABISELECT(312,192), //bcp->offset
    5, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19053C2[];
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C52v3Ev();
extern void _ZN8S19053C52v4Ev();
extern void _ZN8S19053C52v5Ev();
static  VTBL_ENTRY vtc_S19053C2[] = {
  ABISELECT(312,192),
  ABISELECT(312,192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19053C2[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-192),
  (VTBL_ENTRY)&(_ZTI8S19053C2[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v5Ev,
};
extern VTBL_ENTRY _ZTV8S19053C2[];
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C52v3Ev();
extern void _ZN8S19053C52v4Ev();
extern void _ZN8S19053C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C5__8S19053C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19053C5[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v5Ev,
};
static  VTT_ENTRY vtt_S19053C2[] = {
  {&(_ZTV8S19053C2[4]),  4,16},
  {&(_ZTV8S19053C2[12]),  12,16},
  {&(_ZTV8S19053C2[12]),  12,16},
  {&(_tg__ZTV8S19053C5__8S19053C2[4]),  4,8},
  {&(_tg__ZTV8S19053C5__8S19053C2[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S19053C2[];
extern  VTBL_ENTRY _ZTV8S19053C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19053C2[];
Class_Descriptor cd_S19053C2 = {  "S19053C2", // class name
  bases_S19053C2, 4,
  &(vtc_S19053C2[0]), // expected_vtbl_contents
  &(vtt_S19053C2[0]), // expected_vtt_contents
  ABISELECT(360,216), // object size
  NSPAIRA(_ZTI8S19053C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19053C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19053C2),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19053C8  : S19053C4 {
  char s19053c8f0;
  __tsi64 s19053c8f1;
  int s19053c8f2[3];
  ::S19053C3 s19053c8f3;
  virtual void  v6(); // _ZN8S19053C82v6Ev
  ~S19053C8(); // tgen
  S19053C8(); // tgen
};
//SIG(-1 S19053C8) C1{ BC2{ v2} v1 Fc FL Fi[3] FC3{ BC2 Fc[5] FC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}}


void  S19053C8 ::v6(){vfunc_called(this, "_ZN8S19053C82v6Ev");}
S19053C8 ::~S19053C8(){ note_dtor("S19053C8", this);} // tgen
S19053C8 ::S19053C8(){ note_ctor("S19053C8", this);} // tgen

static void Test_S19053C8()
{
  extern Class_Descriptor cd_S19053C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,54)];
    init_test(&cd_S19053C8, buf);
    S19053C8 *dp, &lv = *(dp=new (buf) S19053C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,212), "sizeof(S19053C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19053C8)");
    check_base_class_offset(lv, (S19053C4*), 0, "S19053C8");
    check_field_offset(lv, s19053c8f0, ABISELECT(8,4), "S19053C8.s19053c8f0");
    check_field_offset(lv, s19053c8f1, ABISELECT(16,8), "S19053C8.s19053c8f1");
    check_field_offset(lv, s19053c8f2, ABISELECT(24,16), "S19053C8.s19053c8f2");
    check_field_offset(lv, s19053c8f3, ABISELECT(40,28), "S19053C8.s19053c8f3");
    test_class_info(&lv, &cd_S19053C8);
    dp->~S19053C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19053C8(Test_S19053C8, "S19053C8", ABISELECT(344,212));

#else // __cplusplus

extern void _ZN8S19053C8C1Ev();
extern void _ZN8S19053C8D1Ev();
Name_Map name_map_S19053C8[] = {
  NSPAIR(_ZN8S19053C8C1Ev),
  NSPAIR(_ZN8S19053C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19053C4;
extern VTBL_ENTRY _ZTI8S19053C4[];
extern  VTBL_ENTRY _ZTV8S19053C4[];
static Base_Class bases_S19053C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19053C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19053C8[];
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C82v6Ev();
static  VTBL_ENTRY vtc_S19053C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19053C8[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C82v6Ev,
};
extern VTBL_ENTRY _ZTI8S19053C8[];
extern  VTBL_ENTRY _ZTV8S19053C8[];
Class_Descriptor cd_S19053C8 = {  "S19053C8", // class name
  bases_S19053C8, 1,
  &(vtc_S19053C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,212), // object size
  NSPAIRA(_ZTI8S19053C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19053C8),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19053C10  {
  ::S2489C12_nt s19053c10f0;
  int s19053c10f1:3;
  void *s19053c10f2;
  int s19053c10f3;
  virtual void  v7(); // _ZN9S19053C102v7Ev
  ~S19053C10(); // tgen
  S19053C10(); // tgen
};
//SIG(-1 S19053C10) C1{ v1 FC2{} Fi:3 Fp Fi}


void  S19053C10 ::v7(){vfunc_called(this, "_ZN9S19053C102v7Ev");}
S19053C10 ::~S19053C10(){ note_dtor("S19053C10", this);} // tgen
S19053C10 ::S19053C10(){ note_ctor("S19053C10", this);} // tgen

static void Test_S19053C10()
{
  extern Class_Descriptor cd_S19053C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19053C10, buf);
    S19053C10 *dp, &lv = *(dp=new (buf) S19053C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19053C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19053C10)");
    check_field_offset(lv, s19053c10f0, ABISELECT(8,4), "S19053C10.s19053c10f0");
    set_bf_and_test(lv, s19053c10f1, ABISELECT(9,5), 0, 3, 1, "S19053C10");
    set_bf_and_test(lv, s19053c10f1, ABISELECT(9,5), 0, 3, hide_sll(1LL<<2), "S19053C10");
    check_field_offset(lv, s19053c10f2, ABISELECT(16,8), "S19053C10.s19053c10f2");
    check_field_offset(lv, s19053c10f3, ABISELECT(24,12), "S19053C10.s19053c10f3");
    test_class_info(&lv, &cd_S19053C10);
    dp->~S19053C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19053C10(Test_S19053C10, "S19053C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S19053C10C1Ev();
extern void _ZN9S19053C10D1Ev();
Name_Map name_map_S19053C10[] = {
  NSPAIR(_ZN9S19053C10C1Ev),
  NSPAIR(_ZN9S19053C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19053C10[];
extern void _ZN9S19053C102v7Ev();
static  VTBL_ENTRY vtc_S19053C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19053C10[0]),
  (VTBL_ENTRY)&_ZN9S19053C102v7Ev,
};
extern VTBL_ENTRY _ZTI9S19053C10[];
extern  VTBL_ENTRY _ZTV9S19053C10[];
Class_Descriptor cd_S19053C10 = {  "S19053C10", // class name
  0,0,//no base classes
  &(vtc_S19053C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S19053C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19053C10),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19053C9  : virtual S19053C10 , S19053C5 , virtual S19053C3 {
  ::S19277C15 s19053c9f0;
  int s19053c9f1;
  long double s19053c9f2;
  ~S19053C9(); // tgen
  S19053C9(); // tgen
};
//SIG(-1 S19053C9) C1{ VBC2{ v1 FC3{} Fi:3 Fp Fi} BC4{ VBC5{ v2} v3 v4 v5 Fp[3] FC3 Fp} VBC6{ BC5 Fc[5] FC4[2] Fi Fp[7] FC4 FC5 Fc Fi Fs[5] Fi[8] FL Fc:8} FC7{ VBC8{ v7} BC9{ BC10{ VBC8 v8 v9 v10 Fp[3] FC3 Fp} v11 v12 Fp FC11{ BC12{ BC8 Fc[5] FC10[2] Fi Fp[7] FC10 FC8 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC8 VBC10 Fi Fp} Fi Fp Fi[2]} VBC13{ VBC12 v13 Fp FL Fp[6] FC8 FC14{ BC8 v14 Fc FL Fi[3] FC12} Fp Fi} vd v6 Fp[2] Fi[9] FC14 FC8[9] FL FD Fp FL Fl FL} Fi FD}


S19053C9 ::~S19053C9(){ note_dtor("S19053C9", this);} // tgen
S19053C9 ::S19053C9(){ note_ctor("S19053C9", this);} // tgen

static void Test_S19053C9()
{
  extern Class_Descriptor cd_S19053C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(135,322)];
    init_test(&cd_S19053C9, buf);
    S19053C9 *dp, &lv = *(dp=new (buf) S19053C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2144,1284), "sizeof(S19053C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19053C9)");
    check_base_class_offset(lv, (S19053C10*), ABISELECT(1808,1084), "S19053C9");
    check_base_class_offset(lv, (S19053C4*)(S19053C5*), 0, "S19053C9");
    check_base_class_offset(lv, (S19053C5*), 0, "S19053C9");
    check_base_class_offset(lv, (S19053C4*)(S19053C3*), ABISELECT(1840,1100), "S19053C9");
    check_base_class_offset(lv, (S19053C3*), ABISELECT(1840,1100), "S19053C9");
    check_field_offset(lv, s19053c9f0, ABISELECT(48,24), "S19053C9.s19053c9f0");
    check_field_offset(lv, s19053c9f1, ABISELECT(1776,1068), "S19053C9.s19053c9f1");
    check_field_offset(lv, s19053c9f2, ABISELECT(1792,1072), "S19053C9.s19053c9f2");
    test_class_info(&lv, &cd_S19053C9);
    dp->~S19053C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19053C9(Test_S19053C9, "S19053C9", ABISELECT(2144,1284));

#else // __cplusplus

extern void _ZN8S19053C9C1Ev();
extern void _ZN8S19053C9D1Ev();
Name_Map name_map_S19053C9[] = {
  NSPAIR(_ZN8S19053C9C1Ev),
  NSPAIR(_ZN8S19053C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19053C10;
extern VTBL_ENTRY _ZTI9S19053C10[];
extern  VTBL_ENTRY _ZTV9S19053C10[];
extern Class_Descriptor cd_S19053C4;
extern VTBL_ENTRY _ZTI8S19053C4[];
extern  VTBL_ENTRY _ZTV8S19053C4[];
extern Class_Descriptor cd_S19053C5;
extern VTBL_ENTRY _ZTI8S19053C5[];
extern  VTBL_ENTRY _ZTV8S19053C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19053C5[];
extern Class_Descriptor cd_S19053C4;
extern VTBL_ENTRY _ZTI8S19053C4[];
extern  VTBL_ENTRY _ZTV8S19053C4[];
extern Class_Descriptor cd_S19053C3;
extern VTBL_ENTRY _ZTI8S19053C3[];
extern  VTBL_ENTRY _ZTV8S19053C3[];
static Base_Class bases_S19053C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19053C10,    ABISELECT(1808,1084), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19053C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19053C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19053C4,    ABISELECT(1840,1100), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19053C3,    ABISELECT(1840,1100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19053C9[];
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C52v3Ev();
extern void _ZN8S19053C52v4Ev();
extern void _ZN8S19053C52v5Ev();
extern void _ZN9S19053C102v7Ev();
extern void _ZN8S19053C42v2Ev();
static  VTBL_ENTRY vtc_S19053C9[] = {
  ABISELECT(1840,1100),
  ABISELECT(1808,1084),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19053C9[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v5Ev,
  0,
  ABISELECT(-1808,-1084),
  (VTBL_ENTRY)&(_ZTI8S19053C9[0]),
  (VTBL_ENTRY)&_ZN9S19053C102v7Ev,
  0,
  ABISELECT(-1840,-1100),
  (VTBL_ENTRY)&(_ZTI8S19053C9[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S19053C9[];
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C52v3Ev();
extern void _ZN8S19053C52v4Ev();
extern void _ZN8S19053C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C5__8S19053C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19053C5[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v5Ev,
};
static  VTT_ENTRY vtt_S19053C9[] = {
  {&(_ZTV8S19053C9[6]),  6,18},
  {&(_tg__ZTV8S19053C5__8S19053C9[4]),  4,8},
  {&(_tg__ZTV8S19053C5__8S19053C9[4]),  4,8},
  {&(_ZTV8S19053C9[13]),  13,18},
  {&(_ZTV8S19053C9[6]),  6,18},
  {&(_ZTV8S19053C9[17]),  17,18},
};
extern VTBL_ENTRY _ZTI8S19053C9[];
extern  VTBL_ENTRY _ZTV8S19053C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19053C9[];
Class_Descriptor cd_S19053C9 = {  "S19053C9", // class name
  bases_S19053C9, 5,
  &(vtc_S19053C9[0]), // expected_vtbl_contents
  &(vtt_S19053C9[0]), // expected_vtt_contents
  ABISELECT(2144,1284), // object size
  NSPAIRA(_ZTI8S19053C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19053C9),18, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19053C9),6, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19053C13  : virtual S19053C3 {
  void *s19053c13f0;
  __tsi64 s19053c13f1;
  void *s19053c13f2[6];
  ::S19053C4 s19053c13f3;
  ::S19053C8 s19053c13f4;
  void *s19053c13f5;
  int s19053c13f6;
  virtual void  v8(); // _ZN9S19053C132v8Ev
  ~S19053C13(); // tgen
  S19053C13(); // tgen
};
//SIG(-1 S19053C13) C1{ VBC2{ BC3{ v2} Fc[5] FC4{ VBC3 v4 v5 v6 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v1 Fp FL Fp[6] FC3 FC6{ BC3 v3 Fc FL Fi[3] FC2} Fp Fi}


void  S19053C13 ::v8(){vfunc_called(this, "_ZN9S19053C132v8Ev");}
S19053C13 ::~S19053C13(){ note_dtor("S19053C13", this);} // tgen
S19053C13 ::S19053C13(){ note_ctor("S19053C13", this);} // tgen

static void Test_S19053C13()
{
  extern Class_Descriptor cd_S19053C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(94,113)];
    init_test(&cd_S19053C13, buf);
    S19053C13 *dp, &lv = *(dp=new (buf) S19053C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(744,448), "sizeof(S19053C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19053C13)");
    check_base_class_offset(lv, (S19053C4*)(S19053C3*), ABISELECT(440,264), "S19053C13");
    check_base_class_offset(lv, (S19053C3*), ABISELECT(440,264), "S19053C13");
    check_field_offset(lv, s19053c13f0, ABISELECT(8,4), "S19053C13.s19053c13f0");
    check_field_offset(lv, s19053c13f1, ABISELECT(16,8), "S19053C13.s19053c13f1");
    check_field_offset(lv, s19053c13f2, ABISELECT(24,16), "S19053C13.s19053c13f2");
    check_field_offset(lv, s19053c13f3, ABISELECT(72,40), "S19053C13.s19053c13f3");
    check_field_offset(lv, s19053c13f4, ABISELECT(80,44), "S19053C13.s19053c13f4");
    check_field_offset(lv, s19053c13f5, ABISELECT(424,256), "S19053C13.s19053c13f5");
    check_field_offset(lv, s19053c13f6, ABISELECT(432,260), "S19053C13.s19053c13f6");
    test_class_info(&lv, &cd_S19053C13);
    dp->~S19053C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19053C13(Test_S19053C13, "S19053C13", ABISELECT(744,448));

#else // __cplusplus

extern void _ZN9S19053C13C1Ev();
extern void _ZN9S19053C13D1Ev();
Name_Map name_map_S19053C13[] = {
  NSPAIR(_ZN9S19053C13C1Ev),
  NSPAIR(_ZN9S19053C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19053C4;
extern VTBL_ENTRY _ZTI8S19053C4[];
extern  VTBL_ENTRY _ZTV8S19053C4[];
extern Class_Descriptor cd_S19053C3;
extern VTBL_ENTRY _ZTI8S19053C3[];
extern  VTBL_ENTRY _ZTV8S19053C3[];
static Base_Class bases_S19053C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19053C4,    ABISELECT(440,264), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19053C3,    ABISELECT(440,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19053C13[];
extern void _ZN9S19053C132v8Ev();
extern void _ZN8S19053C42v2Ev();
static  VTBL_ENTRY vtc_S19053C13[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19053C13[0]),
  (VTBL_ENTRY)&_ZN9S19053C132v8Ev,
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19053C13[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
};
extern VTBL_ENTRY _ZTV9S19053C13[];
static  VTT_ENTRY vtt_S19053C13[] = {
  {&(_ZTV9S19053C13[3]),  3,8},
  {&(_ZTV9S19053C13[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S19053C13[];
extern  VTBL_ENTRY _ZTV9S19053C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19053C13[];
Class_Descriptor cd_S19053C13 = {  "S19053C13", // class name
  bases_S19053C13, 2,
  &(vtc_S19053C13[0]), // expected_vtbl_contents
  &(vtt_S19053C13[0]), // expected_vtt_contents
  ABISELECT(744,448), // object size
  NSPAIRA(_ZTI9S19053C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19053C13),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19053C13),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19053C14  : virtual S19053C5 , S19053C13 {
  void *s19053c14f0;
  ::S19053C4 s19053c14f1;
  __tsi64 s19053c14f2[8];
  ::S19053C5 s19053c14f3;
  void *s19053c14f4;
  virtual void  v9(); // _ZN9S19053C142v9Ev
  ~S19053C14(); // tgen
  S19053C14(); // tgen
};
//SIG(-1 S19053C14) C1{ VBC2{ VBC3{ v2} v3 v4 v5 Fp[3] FC4{} Fp} BC5{ VBC6{ BC3 Fc[5] FC2[2] Fi Fp[7] FC2 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v6 Fp FL Fp[6] FC3 FC7{ BC3 v7 Fc FL Fi[3] FC6} Fp Fi} v1 Fp FC3 FL[8] FC2 Fp}


void  S19053C14 ::v9(){vfunc_called(this, "_ZN9S19053C142v9Ev");}
S19053C14 ::~S19053C14(){ note_dtor("S19053C14", this);} // tgen
S19053C14 ::S19053C14(){ note_ctor("S19053C14", this);} // tgen

static void Test_S19053C14()
{
  extern Class_Descriptor cd_S19053C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(117,144)];
    init_test(&cd_S19053C14, buf);
    S19053C14 *dp, &lv = *(dp=new (buf) S19053C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(928,572), "sizeof(S19053C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19053C14)");
    check_base_class_offset(lv, (S19053C4*)(S19053C5*), ABISELECT(576,364), "S19053C14");
    check_base_class_offset(lv, (S19053C5*), ABISELECT(576,364), "S19053C14");
    check_base_class_offset(lv, (S19053C4*)(S19053C3*), ABISELECT(624,388), "S19053C14");
    check_base_class_offset(lv, (S19053C3*)(S19053C13*), ABISELECT(624,388), "S19053C14");
    check_base_class_offset(lv, (S19053C13*), 0, "S19053C14");
    check_field_offset(lv, s19053c14f0, ABISELECT(440,264), "S19053C14.s19053c14f0");
    check_field_offset(lv, s19053c14f1, ABISELECT(448,268), "S19053C14.s19053c14f1");
    check_field_offset(lv, s19053c14f2, ABISELECT(456,272), "S19053C14.s19053c14f2");
    check_field_offset(lv, s19053c14f3, ABISELECT(520,336), "S19053C14.s19053c14f3");
    check_field_offset(lv, s19053c14f4, ABISELECT(568,360), "S19053C14.s19053c14f4");
    test_class_info(&lv, &cd_S19053C14);
    dp->~S19053C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19053C14(Test_S19053C14, "S19053C14", ABISELECT(928,572));

#else // __cplusplus

extern void _ZN9S19053C14C1Ev();
extern void _ZN9S19053C14D1Ev();
Name_Map name_map_S19053C14[] = {
  NSPAIR(_ZN9S19053C14C1Ev),
  NSPAIR(_ZN9S19053C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19053C4;
extern VTBL_ENTRY _ZTI8S19053C4[];
extern  VTBL_ENTRY _ZTV8S19053C4[];
extern Class_Descriptor cd_S19053C5;
extern VTBL_ENTRY _ZTI8S19053C5[];
extern  VTBL_ENTRY _ZTV8S19053C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19053C5[];
extern Class_Descriptor cd_S19053C4;
extern VTBL_ENTRY _ZTI8S19053C4[];
extern  VTBL_ENTRY _ZTV8S19053C4[];
extern Class_Descriptor cd_S19053C3;
extern VTBL_ENTRY _ZTI8S19053C3[];
extern  VTBL_ENTRY _ZTV8S19053C3[];
extern Class_Descriptor cd_S19053C13;
extern VTBL_ENTRY _ZTI9S19053C13[];
extern  VTBL_ENTRY _ZTV9S19053C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19053C13[];
static Base_Class bases_S19053C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19053C4,    ABISELECT(576,364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19053C5,    ABISELECT(576,364), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19053C4,    ABISELECT(624,388), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19053C3,    ABISELECT(624,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19053C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19053C14[];
extern void _ZN9S19053C132v8Ev();
extern void _ZN9S19053C142v9Ev();
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C52v3Ev();
extern void _ZN8S19053C52v4Ev();
extern void _ZN8S19053C52v5Ev();
extern void _ZN8S19053C42v2Ev();
static  VTBL_ENTRY vtc_S19053C14[] = {
  ABISELECT(576,364),
  ABISELECT(576,364),
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI9S19053C14[0]),
  (VTBL_ENTRY)&_ZN9S19053C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19053C142v9Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-576,-364),
  (VTBL_ENTRY)&(_ZTI9S19053C14[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v5Ev,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI9S19053C14[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
};
extern VTBL_ENTRY _ZTV9S19053C14[];
extern void _ZN9S19053C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19053C13__9S19053C14[] = {
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI9S19053C13[0]),
  (VTBL_ENTRY)&_ZN9S19053C132v8Ev,
};
extern void _ZN8S19053C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C48S19053C3__9S19053C13__9S19053C14[] = {
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI9S19053C13[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
};
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C52v3Ev();
extern void _ZN8S19053C52v4Ev();
extern void _ZN8S19053C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C5__9S19053C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19053C5[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v5Ev,
};
static  VTT_ENTRY vtt_S19053C14[] = {
  {&(_ZTV9S19053C14[5]),  5,22},
  {&(_tg__ZTV9S19053C13__9S19053C14[3]),  3,4},
  {&(_tg__ZTV8S19053C48S19053C3__9S19053C13__9S19053C14[3]),  3,4},
  {&(_ZTV9S19053C14[14]),  14,22},
  {&(_ZTV9S19053C14[14]),  14,22},
  {&(_ZTV9S19053C14[21]),  21,22},
  {&(_tg__ZTV8S19053C5__9S19053C14[4]),  4,8},
  {&(_tg__ZTV8S19053C5__9S19053C14[4]),  4,8},
};
extern VTBL_ENTRY _ZTI9S19053C14[];
extern  VTBL_ENTRY _ZTV9S19053C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19053C14[];
Class_Descriptor cd_S19053C14 = {  "S19053C14", // class name
  bases_S19053C14, 5,
  &(vtc_S19053C14[0]), // expected_vtbl_contents
  &(vtt_S19053C14[0]), // expected_vtt_contents
  ABISELECT(928,572), // object size
  NSPAIRA(_ZTI9S19053C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19053C14),22, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19053C14),8, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19053C16  {
  void *s19053c16f0[2];
  int s19053c16f1[2];
  void *s19053c16f2[15];
  int s19053c16f3;
  ::S19053C13 s19053c16f4;
  virtual void  v10(); // _ZN9S19053C163v10Ev
  virtual void  v11(); // _ZN9S19053C163v11Ev
  ~S19053C16(); // tgen
  S19053C16(); // tgen
};
//SIG(-1 S19053C16) C1{ v1 v2 Fp[2] Fi[2] Fp[15] Fi FC2{ VBC3{ BC4{ v4} Fc[5] FC5{ VBC4 v6 v7 v8 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v3 Fp FL Fp[6] FC4 FC7{ BC4 v5 Fc FL Fi[3] FC3} Fp Fi}}


void  S19053C16 ::v10(){vfunc_called(this, "_ZN9S19053C163v10Ev");}
void  S19053C16 ::v11(){vfunc_called(this, "_ZN9S19053C163v11Ev");}
S19053C16 ::~S19053C16(){ note_dtor("S19053C16", this);} // tgen
S19053C16 ::S19053C16(){ note_ctor("S19053C16", this);} // tgen

static void Test_S19053C16()
{
  extern Class_Descriptor cd_S19053C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(114,134)];
    init_test(&cd_S19053C16, buf);
    S19053C16 *dp, &lv = *(dp=new (buf) S19053C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(904,532), "sizeof(S19053C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19053C16)");
    check_field_offset(lv, s19053c16f0, ABISELECT(8,4), "S19053C16.s19053c16f0");
    check_field_offset(lv, s19053c16f1, ABISELECT(24,12), "S19053C16.s19053c16f1");
    check_field_offset(lv, s19053c16f2, ABISELECT(32,20), "S19053C16.s19053c16f2");
    check_field_offset(lv, s19053c16f3, ABISELECT(152,80), "S19053C16.s19053c16f3");
    check_field_offset(lv, s19053c16f4, ABISELECT(160,84), "S19053C16.s19053c16f4");
    test_class_info(&lv, &cd_S19053C16);
    dp->~S19053C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19053C16(Test_S19053C16, "S19053C16", ABISELECT(904,532));

#else // __cplusplus

extern void _ZN9S19053C16C1Ev();
extern void _ZN9S19053C16D1Ev();
Name_Map name_map_S19053C16[] = {
  NSPAIR(_ZN9S19053C16C1Ev),
  NSPAIR(_ZN9S19053C16D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19053C16[];
extern void _ZN9S19053C163v10Ev();
extern void _ZN9S19053C163v11Ev();
static  VTBL_ENTRY vtc_S19053C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19053C16[0]),
  (VTBL_ENTRY)&_ZN9S19053C163v10Ev,
  (VTBL_ENTRY)&_ZN9S19053C163v11Ev,
};
extern VTBL_ENTRY _ZTI9S19053C16[];
extern  VTBL_ENTRY _ZTV9S19053C16[];
Class_Descriptor cd_S19053C16 = {  "S19053C16", // class name
  0,0,//no base classes
  &(vtc_S19053C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(904,532), // object size
  NSPAIRA(_ZTI9S19053C16),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19053C16),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19053C15  : virtual S19053C10 , S19053C16 , virtual S19053C8 {
  int s19053c15f0;
  short s19053c15f1;
  __tsi64 s19053c15f2[7];
  char s19053c15f3[5];
  void *s19053c15f4;
  virtual  ~S19053C15(); // _ZN9S19053C15D2Ev
  virtual void  v12(); // _ZN9S19053C153v12Ev
  virtual void  v13(); // _ZN9S19053C153v13Ev
  virtual void  v14(); // _ZN9S19053C153v14Ev
  S19053C15(); // tgen
};
//SIG(-1 S19053C15) C1{ VBC2{ v4 FC3{} Fi:3 Fp Fi} BC4{ v5 v6 Fp[2] Fi[2] Fp[15] Fi FC5{ VBC6{ BC7{ v7} Fc[5] FC8{ VBC7 v10 v11 v12 Fp[3] FC3 Fp}[2] Fi Fp[7] FC8 FC7 Fc Fi Fs[5] Fi[8] FL Fc:8} v9 Fp FL Fp[6] FC7 FC9{ BC7 v8 Fc FL Fi[3] FC6} Fp Fi}} VBC9 vd v1 v2 v3 Fi Fs FL[7] Fc[5] Fp}


 S19053C15 ::~S19053C15(){ note_dtor("S19053C15", this);}
void  S19053C15 ::v12(){vfunc_called(this, "_ZN9S19053C153v12Ev");}
void  S19053C15 ::v13(){vfunc_called(this, "_ZN9S19053C153v13Ev");}
void  S19053C15 ::v14(){vfunc_called(this, "_ZN9S19053C153v14Ev");}
S19053C15 ::S19053C15(){ note_ctor("S19053C15", this);} // tgen

static void Test_S19053C15()
{
  extern Class_Descriptor cd_S19053C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(171,210)];
    init_test(&cd_S19053C15, buf);
    S19053C15 *dp, &lv = *(dp=new (buf) S19053C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1360,836), "sizeof(S19053C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19053C15)");
    check_base_class_offset(lv, (S19053C10*), ABISELECT(984,608), "S19053C15");
    check_base_class_offset(lv, (S19053C16*), 0, "S19053C15");
    check_base_class_offset(lv, (S19053C4*)(S19053C8*), ABISELECT(1016,624), "S19053C15");
    check_base_class_offset(lv, (S19053C8*), ABISELECT(1016,624), "S19053C15");
    check_field_offset(lv, s19053c15f0, ABISELECT(904,532), "S19053C15.s19053c15f0");
    check_field_offset(lv, s19053c15f1, ABISELECT(908,536), "S19053C15.s19053c15f1");
    check_field_offset(lv, s19053c15f2, ABISELECT(912,540), "S19053C15.s19053c15f2");
    check_field_offset(lv, s19053c15f3, ABISELECT(968,596), "S19053C15.s19053c15f3");
    check_field_offset(lv, s19053c15f4, ABISELECT(976,604), "S19053C15.s19053c15f4");
    test_class_info(&lv, &cd_S19053C15);
    dp->~S19053C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19053C15(Test_S19053C15, "S19053C15", ABISELECT(1360,836));

#else // __cplusplus

extern void _ZN9S19053C15C1Ev();
extern void _ZN9S19053C15D2Ev();
Name_Map name_map_S19053C15[] = {
  NSPAIR(_ZN9S19053C15C1Ev),
  NSPAIR(_ZN9S19053C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19053C10;
extern VTBL_ENTRY _ZTI9S19053C10[];
extern  VTBL_ENTRY _ZTV9S19053C10[];
extern Class_Descriptor cd_S19053C16;
extern VTBL_ENTRY _ZTI9S19053C16[];
extern  VTBL_ENTRY _ZTV9S19053C16[];
extern Class_Descriptor cd_S19053C4;
extern VTBL_ENTRY _ZTI8S19053C4[];
extern  VTBL_ENTRY _ZTV8S19053C4[];
extern Class_Descriptor cd_S19053C8;
extern VTBL_ENTRY _ZTI8S19053C8[];
extern  VTBL_ENTRY _ZTV8S19053C8[];
static Base_Class bases_S19053C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19053C10,    ABISELECT(984,608), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19053C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19053C4,    ABISELECT(1016,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19053C8,    ABISELECT(1016,624), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19053C15[];
extern void _ZN9S19053C163v10Ev();
extern void _ZN9S19053C163v11Ev();
extern void _ZN9S19053C15D1Ev();
extern void _ZN9S19053C15D0Ev();
extern void _ZN9S19053C153v12Ev();
extern void _ZN9S19053C153v13Ev();
extern void _ZN9S19053C153v14Ev();
extern void _ZN9S19053C102v7Ev();
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C82v6Ev();
static  VTBL_ENTRY vtc_S19053C15[] = {
  ABISELECT(1016,624),
  ABISELECT(984,608),
  0,
  (VTBL_ENTRY)&(_ZTI9S19053C15[0]),
  (VTBL_ENTRY)&_ZN9S19053C163v10Ev,
  (VTBL_ENTRY)&_ZN9S19053C163v11Ev,
  (VTBL_ENTRY)&_ZN9S19053C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19053C15D0Ev,
  (VTBL_ENTRY)&_ZN9S19053C153v12Ev,
  (VTBL_ENTRY)&_ZN9S19053C153v13Ev,
  (VTBL_ENTRY)&_ZN9S19053C153v14Ev,
  0,
  ABISELECT(-984,-608),
  (VTBL_ENTRY)&(_ZTI9S19053C15[0]),
  (VTBL_ENTRY)&_ZN9S19053C102v7Ev,
  0,
  0,
  ABISELECT(-1016,-624),
  (VTBL_ENTRY)&(_ZTI9S19053C15[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C82v6Ev,
};
extern VTBL_ENTRY _ZTV9S19053C15[];
static  VTT_ENTRY vtt_S19053C15[] = {
  {&(_ZTV9S19053C15[4]),  4,21},
  {&(_ZTV9S19053C15[14]),  14,21},
  {&(_ZTV9S19053C15[19]),  19,21},
};
extern VTBL_ENTRY _ZTI9S19053C15[];
extern  VTBL_ENTRY _ZTV9S19053C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19053C15[];
Class_Descriptor cd_S19053C15 = {  "S19053C15", // class name
  bases_S19053C15, 4,
  &(vtc_S19053C15[0]), // expected_vtbl_contents
  &(vtt_S19053C15[0]), // expected_vtt_contents
  ABISELECT(1360,836), // object size
  NSPAIRA(_ZTI9S19053C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19053C15),21, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19053C15),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19053C7  : S19053C8 , S19053C2 , virtual S19053C9 , virtual S19053C14 , S19053C15 {
  short s19053c7f0;
  char s19053c7f1;
  long double s19053c7f2;
  ::S19277C20 s19053c7f3;
  ::S19277C12_nt s19053c7f4;
  int s19053c7f5:28;
  ::S19277C12_nt s19053c7f6;
  void *s19053c7f7;
  void *s19053c7f8;
  virtual  ~S19053C7(); // _ZN8S19053C7D2Ev
  S19053C7(); // tgen
};
//SIG(-1 S19053C7) C1{ BC2{ BC3{ v1} v2 Fc FL Fi[3] FC4{ BC3 Fc[5] FC5{ VBC3 v3 v4 v5 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8}} BC7{ BC4 VBC3 VBC5 Fi Fp} VBC8{ VBC9{ v6 FC6 Fi:3 Fp Fi} BC5 VBC4 FC10{ VBC11{ v16} BC12{ BC13{ VBC11 v17 v18 v19 Fp[3] FC6 Fp} v20 v21 Fp FC14{ BC15{ BC11 Fc[5] FC13[2] Fi Fp[7] FC13 FC11 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC11 VBC13 Fi Fp} Fi Fp Fi[2]} VBC16{ VBC15 v22 Fp FL Fp[6] FC11 FC17{ BC11 v23 Fc FL Fi[3] FC15} Fp Fi} vd v15 Fp[2] Fi[9] FC17 FC11[9] FL FD Fp FL Fl FL} Fi FD} VBC18{ VBC5 BC19{ VBC4 v7 Fp FL Fp[6] FC3 FC2 Fp Fi} v8 Fp FC3 FL[8] FC5 Fp} BC20{ VBC9 BC21{ v9 v10 Fp[2] Fi[2] Fp[15] Fi FC19} VBC2 vd v11 v12 v13 Fi Fs FL[7] Fc[5] Fp} vd Fs Fc FD FU22{ m Fp FL FL Fi:27 Fs:16 Fs Fp} FC23{ vd v14 Fi} Fi:28 FC23 Fp Fp}


 S19053C7 ::~S19053C7(){ note_dtor("S19053C7", this);}
S19053C7 ::S19053C7(){ note_ctor("S19053C7", this);} // tgen

static void Test_S19053C7()
{
  extern Class_Descriptor cd_S19053C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(304,738)];
    init_test(&cd_S19053C7, buf);
    S19053C7 *dp, &lv = *(dp=new (buf) S19053C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4848,2948), "sizeof(S19053C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19053C7)");
    /*is_ambiguous_... S19053C7::S19053C8 */ AMB_check_base_class_offset(lv, (S19053C4*)(S19053C8*), 0, "S19053C7");
    /*is_ambiguous_... S19053C7::S19053C8 */ AMB_check_base_class_offset(lv, (S19053C8*), 0, "S19053C7");
    check_base_class_offset(lv, (S19053C4*)(S19053C3*)(S19053C2*), ABISELECT(344,212), "S19053C7");
    check_base_class_offset(lv, (S19053C3*)(S19053C2*), ABISELECT(344,212), "S19053C7");
    /*is_ambiguous_... S19053C2::S19053C4 */ AMB_check_base_class_offset(lv, (S19053C4*)(S19053C2*), ABISELECT(1728,1064), "S19053C7");
    /*is_ambiguous_... S19053C7::S19053C5 */ AMB_check_base_class_offset(lv, (S19053C4*)(S19053C5*), ABISELECT(1728,1064), "S19053C7");
    check_base_class_offset(lv, (S19053C4*)(S19053C5*)(S19053C9*), ABISELECT(1728,1064), "S19053C7");
    check_base_class_offset(lv, (S19053C5*)(S19053C2*), ABISELECT(1728,1064), "S19053C7");
    check_base_class_offset(lv, (S19053C5*)(S19053C14*), ABISELECT(1728,1064), "S19053C7");
    check_base_class_offset(lv, (S19053C2*), ABISELECT(344,212), "S19053C7");
    check_base_class_offset(lv, (S19053C10*)(S19053C9*), ABISELECT(3584,2172), "S19053C7");
    check_base_class_offset(lv, (S19053C10*)(S19053C15*), ABISELECT(3584,2172), "S19053C7");
    check_base_class_offset(lv, (S19053C5*)(S19053C9*), ABISELECT(1776,1088), "S19053C7");
    /*is_ambiguous_... S19053C7::S19053C3 */ AMB_check_base_class_offset(lv, (S19053C4*)(S19053C3*), ABISELECT(3616,2188), "S19053C7");
    check_base_class_offset(lv, (S19053C3*)(S19053C9*), ABISELECT(3616,2188), "S19053C7");
    check_base_class_offset(lv, (S19053C3*)(S19053C13*)(S19053C14*), ABISELECT(3616,2188), "S19053C7");
    check_base_class_offset(lv, (S19053C9*), ABISELECT(1776,1088), "S19053C7");
    check_base_class_offset(lv, (S19053C13*)(S19053C14*), ABISELECT(3920,2372), "S19053C7");
    check_base_class_offset(lv, (S19053C14*), ABISELECT(3920,2372), "S19053C7");
    check_base_class_offset(lv, (S19053C16*)(S19053C15*), ABISELECT(656,404), "S19053C7");
    /*is_ambiguous_... S19053C7::S19053C8 */ AMB_check_base_class_offset(lv, (S19053C4*)(S19053C8*), ABISELECT(4496,2736), "S19053C7");
    check_base_class_offset(lv, (S19053C8*)(S19053C15*), ABISELECT(4496,2736), "S19053C7");
    check_base_class_offset(lv, (S19053C15*), ABISELECT(656,404), "S19053C7");
    check_field_offset(lv, s19053c7f0, ABISELECT(1640,1012), "S19053C7.s19053c7f0");
    check_field_offset(lv, s19053c7f1, ABISELECT(1642,1014), "S19053C7.s19053c7f1");
    check_field_offset(lv, s19053c7f2, ABISELECT(1648,1016), "S19053C7.s19053c7f2");
    check_field_offset(lv, s19053c7f3, ABISELECT(1664,1028), "S19053C7.s19053c7f3");
    check_field_offset(lv, s19053c7f4, ABISELECT(1672,1036), "S19053C7.s19053c7f4");
    set_bf_and_test(lv, s19053c7f5, ABISELECT(1688,1044), 0, 28, 1, "S19053C7");
    set_bf_and_test(lv, s19053c7f5, ABISELECT(1688,1044), 0, 28, hide_sll(1LL<<27), "S19053C7");
    check_field_offset(lv, s19053c7f6, ABISELECT(1696,1048), "S19053C7.s19053c7f6");
    check_field_offset(lv, s19053c7f7, ABISELECT(1712,1056), "S19053C7.s19053c7f7");
    check_field_offset(lv, s19053c7f8, ABISELECT(1720,1060), "S19053C7.s19053c7f8");
    test_class_info(&lv, &cd_S19053C7);
    dp->~S19053C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19053C7(Test_S19053C7, "S19053C7", ABISELECT(4848,2948));

#else // __cplusplus

extern void _ZN8S19053C7C1Ev();
extern void _ZN8S19053C7D2Ev();
Name_Map name_map_S19053C7[] = {
  NSPAIR(_ZN8S19053C7C1Ev),
  NSPAIR(_ZN8S19053C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19053C4;
extern VTBL_ENTRY _ZTI8S19053C4[];
extern  VTBL_ENTRY _ZTV8S19053C4[];
extern Class_Descriptor cd_S19053C8;
extern VTBL_ENTRY _ZTI8S19053C8[];
extern  VTBL_ENTRY _ZTV8S19053C8[];
extern Class_Descriptor cd_S19053C4;
extern VTBL_ENTRY _ZTI8S19053C4[];
extern  VTBL_ENTRY _ZTV8S19053C4[];
extern Class_Descriptor cd_S19053C3;
extern VTBL_ENTRY _ZTI8S19053C3[];
extern  VTBL_ENTRY _ZTV8S19053C3[];
extern Class_Descriptor cd_S19053C4;
extern VTBL_ENTRY _ZTI8S19053C4[];
extern  VTBL_ENTRY _ZTV8S19053C4[];
extern Class_Descriptor cd_S19053C5;
extern VTBL_ENTRY _ZTI8S19053C5[];
extern  VTBL_ENTRY _ZTV8S19053C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19053C5[];
extern Class_Descriptor cd_S19053C2;
extern VTBL_ENTRY _ZTI8S19053C2[];
extern  VTBL_ENTRY _ZTV8S19053C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19053C2[];
extern Class_Descriptor cd_S19053C10;
extern VTBL_ENTRY _ZTI9S19053C10[];
extern  VTBL_ENTRY _ZTV9S19053C10[];
extern Class_Descriptor cd_S19053C5;
extern VTBL_ENTRY _ZTI8S19053C5[];
extern  VTBL_ENTRY _ZTV8S19053C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19053C5[];
extern Class_Descriptor cd_S19053C4;
extern VTBL_ENTRY _ZTI8S19053C4[];
extern  VTBL_ENTRY _ZTV8S19053C4[];
extern Class_Descriptor cd_S19053C3;
extern VTBL_ENTRY _ZTI8S19053C3[];
extern  VTBL_ENTRY _ZTV8S19053C3[];
extern Class_Descriptor cd_S19053C9;
extern VTBL_ENTRY _ZTI8S19053C9[];
extern  VTBL_ENTRY _ZTV8S19053C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19053C9[];
extern Class_Descriptor cd_S19053C13;
extern VTBL_ENTRY _ZTI9S19053C13[];
extern  VTBL_ENTRY _ZTV9S19053C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19053C13[];
extern Class_Descriptor cd_S19053C14;
extern VTBL_ENTRY _ZTI9S19053C14[];
extern  VTBL_ENTRY _ZTV9S19053C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19053C14[];
extern Class_Descriptor cd_S19053C16;
extern VTBL_ENTRY _ZTI9S19053C16[];
extern  VTBL_ENTRY _ZTV9S19053C16[];
extern Class_Descriptor cd_S19053C4;
extern VTBL_ENTRY _ZTI8S19053C4[];
extern  VTBL_ENTRY _ZTV8S19053C4[];
extern Class_Descriptor cd_S19053C8;
extern VTBL_ENTRY _ZTI8S19053C8[];
extern  VTBL_ENTRY _ZTV8S19053C8[];
extern Class_Descriptor cd_S19053C15;
extern VTBL_ENTRY _ZTI9S19053C15[];
extern  VTBL_ENTRY _ZTV9S19053C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19053C15[];
static Base_Class bases_S19053C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19053C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19053C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19053C4,    ABISELECT(344,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19053C3,    ABISELECT(344,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19053C4,    ABISELECT(1728,1064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19053C5,    ABISELECT(1728,1064), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19053C2,    ABISELECT(344,212), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19053C10,    ABISELECT(3584,2172), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19053C5,    ABISELECT(1776,1088), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19053C4,    ABISELECT(3616,2188), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19053C3,    ABISELECT(3616,2188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19053C9,    ABISELECT(1776,1088), //bcp->offset
    40, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19053C13,    ABISELECT(3920,2372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19053C14,    ABISELECT(3920,2372), //bcp->offset
    61, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19053C16,    ABISELECT(656,404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19053C4,    ABISELECT(4496,2736), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19053C8,    ABISELECT(4496,2736), //bcp->offset
    70, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19053C15,    ABISELECT(656,404), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19053C7[];
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C82v6Ev();
extern void _ZN8S19053C7D1Ev();
extern void _ZN8S19053C7D0Ev();
extern void _ZN8S19053C42v2Ev();
extern void _ZN9S19053C163v10Ev();
extern void _ZN9S19053C163v11Ev();
extern void ABISELECT(_ZThn656_N8S19053C7D1Ev,_ZThn404_N8S19053C7D1Ev)();
extern void ABISELECT(_ZThn656_N8S19053C7D0Ev,_ZThn404_N8S19053C7D0Ev)();
extern void _ZN9S19053C153v12Ev();
extern void _ZN9S19053C153v13Ev();
extern void _ZN9S19053C153v14Ev();
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C52v3Ev();
extern void _ZN8S19053C52v4Ev();
extern void _ZN8S19053C52v5Ev();
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C52v3Ev();
extern void _ZN8S19053C52v4Ev();
extern void _ZN8S19053C52v5Ev();
extern void _ZN9S19053C102v7Ev();
extern void _ZN8S19053C42v2Ev();
extern void _ZN9S19053C132v8Ev();
extern void _ZN9S19053C142v9Ev();
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C82v6Ev();
static  VTBL_ENTRY vtc_S19053C7[] = {
  ABISELECT(4496,2736),
  ABISELECT(3920,2372),
  ABISELECT(3616,2188),
  ABISELECT(3584,2172),
  ABISELECT(1776,1088),
  ABISELECT(1728,1064),
  ABISELECT(1728,1064),
  0,
  (VTBL_ENTRY)&(_ZTI8S19053C7[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C82v6Ev,
  (VTBL_ENTRY)&_ZN8S19053C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19053C7D0Ev,
  ABISELECT(1384,852),
  ABISELECT(1384,852),
  ABISELECT(-344,-212),
  (VTBL_ENTRY)&(_ZTI8S19053C7[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  ABISELECT(3840,2332),
  ABISELECT(2928,1768),
  ABISELECT(-656,-404),
  (VTBL_ENTRY)&(_ZTI8S19053C7[0]),
  (VTBL_ENTRY)&_ZN9S19053C163v10Ev,
  (VTBL_ENTRY)&_ZN9S19053C163v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn656_N8S19053C7D1Ev,_ZThn404_N8S19053C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn656_N8S19053C7D0Ev,_ZThn404_N8S19053C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19053C153v12Ev,
  (VTBL_ENTRY)&_ZN9S19053C153v13Ev,
  (VTBL_ENTRY)&_ZN9S19053C153v14Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1728,-1064),
  (VTBL_ENTRY)&(_ZTI8S19053C7[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v5Ev,
  0,
  0,
  0,
  ABISELECT(1840,1100),
  ABISELECT(1808,1084),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-1776,-1088),
  (VTBL_ENTRY)&(_ZTI8S19053C7[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v5Ev,
  0,
  ABISELECT(-3584,-2172),
  (VTBL_ENTRY)&(_ZTI8S19053C7[0]),
  (VTBL_ENTRY)&_ZN9S19053C102v7Ev,
  0,
  ABISELECT(-3616,-2188),
  (VTBL_ENTRY)&(_ZTI8S19053C7[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  0,
  0,
  ABISELECT(-2192,-1308),
  ABISELECT(-2192,-1308),
  ABISELECT(-304,-184),
  ABISELECT(-3920,-2372),
  (VTBL_ENTRY)&(_ZTI8S19053C7[0]),
  (VTBL_ENTRY)&_ZN9S19053C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19053C142v9Ev,
  0,
  0,
  ABISELECT(-4496,-2736),
  (VTBL_ENTRY)&(_ZTI8S19053C7[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C82v6Ev,
};
extern VTBL_ENTRY _ZTV8S19053C7[];
extern void _ZN8S19053C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C2__8S19053C7[] = {
  ABISELECT(1384,852),
  ABISELECT(1384,852),
  0,
  (VTBL_ENTRY)&(_ZTI8S19053C2[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
};
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C52v3Ev();
extern void _ZN8S19053C52v4Ev();
extern void _ZN8S19053C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C5__8S19053C2__8S19053C7[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1384,-852),
  (VTBL_ENTRY)&(_ZTI8S19053C2[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v5Ev,
};
extern void _ZN9S19053C163v10Ev();
extern void _ZN9S19053C163v11Ev();
extern void _ZN9S19053C15D1Ev();
extern void _ZN9S19053C15D0Ev();
extern void _ZN9S19053C153v12Ev();
extern void _ZN9S19053C153v13Ev();
extern void _ZN9S19053C153v14Ev();
static  VTBL_ENTRY _tg__ZTV9S19053C15__8S19053C7[] = {
  ABISELECT(3840,2332),
  ABISELECT(2928,1768),
  0,
  (VTBL_ENTRY)&(_ZTI9S19053C15[0]),
  (VTBL_ENTRY)&_ZN9S19053C163v10Ev,
  (VTBL_ENTRY)&_ZN9S19053C163v11Ev,
  (VTBL_ENTRY)&_ZN9S19053C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19053C15D0Ev,
  (VTBL_ENTRY)&_ZN9S19053C153v12Ev,
  (VTBL_ENTRY)&_ZN9S19053C153v13Ev,
  (VTBL_ENTRY)&_ZN9S19053C153v14Ev,
};
extern void _ZN9S19053C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19053C10__9S19053C15__8S19053C7[] = {
  0,
  ABISELECT(-2928,-1768),
  (VTBL_ENTRY)&(_ZTI9S19053C15[0]),
  (VTBL_ENTRY)&_ZN9S19053C102v7Ev,
};
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C8__9S19053C15__8S19053C7[] = {
  0,
  0,
  ABISELECT(-3840,-2332),
  (VTBL_ENTRY)&(_ZTI9S19053C15[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C82v6Ev,
};
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C52v3Ev();
extern void _ZN8S19053C52v4Ev();
extern void _ZN8S19053C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C5__8S19053C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19053C5[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v5Ev,
};
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C52v3Ev();
extern void _ZN8S19053C52v4Ev();
extern void _ZN8S19053C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C9__8S19053C7[] = {
  ABISELECT(1840,1100),
  ABISELECT(1808,1084),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19053C9[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v5Ev,
};
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C52v3Ev();
extern void _ZN8S19053C52v4Ev();
extern void _ZN8S19053C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C58S19053C9__A1__8S19053C7[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19053C5[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v5Ev,
};
extern void _ZN8S19053C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C4__8S19053C58S19053C9__A1__8S19053C7[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19053C5[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
};
extern void _ZN9S19053C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19053C10__8S19053C9__8S19053C7[] = {
  0,
  ABISELECT(-1808,-1084),
  (VTBL_ENTRY)&(_ZTI8S19053C9[0]),
  (VTBL_ENTRY)&_ZN9S19053C102v7Ev,
};
extern void _ZN8S19053C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C4__8S19053C9__8S19053C7[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19053C9[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
};
extern void _ZN8S19053C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C48S19053C3__A1__8S19053C9__8S19053C7[] = {
  0,
  ABISELECT(-1840,-1100),
  (VTBL_ENTRY)&(_ZTI8S19053C9[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
};
extern void _ZN9S19053C132v8Ev();
extern void _ZN9S19053C142v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19053C14__8S19053C7[] = {
  ABISELECT(-2192,-1308),
  ABISELECT(-2192,-1308),
  ABISELECT(-304,-184),
  0,
  (VTBL_ENTRY)&(_ZTI9S19053C14[0]),
  (VTBL_ENTRY)&_ZN9S19053C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19053C142v9Ev,
};
extern void _ZN9S19053C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19053C139S19053C14__8S19053C7[] = {
  ABISELECT(-304,-184),
  0,
  (VTBL_ENTRY)&(_ZTI9S19053C13[0]),
  (VTBL_ENTRY)&_ZN9S19053C132v8Ev,
};
extern void _ZN8S19053C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C48S19053C3__9S19053C139S19053C14__8S19053C7[] = {
  0,
  ABISELECT(304,184),
  (VTBL_ENTRY)&(_ZTI9S19053C13[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
};
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C52v3Ev();
extern void _ZN8S19053C52v4Ev();
extern void _ZN8S19053C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C5__9S19053C14__8S19053C7[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(2192,1308),
  (VTBL_ENTRY)&(_ZTI9S19053C14[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v5Ev,
};
extern void _ZN8S19053C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C48S19053C3__A1__9S19053C14__8S19053C7[] = {
  0,
  ABISELECT(304,184),
  (VTBL_ENTRY)&(_ZTI9S19053C14[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
};
static  VTT_ENTRY vtt_S19053C7[] = {
  {&(_ZTV8S19053C7[9]),  9,76},
  {&(_tg__ZTV8S19053C2__8S19053C7[4]),  4,5},
  {&(_tg__ZTV8S19053C5__8S19053C2__8S19053C7[7]),  7,11},
  {&(_tg__ZTV8S19053C5__8S19053C2__8S19053C7[7]),  7,11},
  {&(_tg__ZTV9S19053C15__8S19053C7[4]),  4,11},
  {&(_tg__ZTV9S19053C10__9S19053C15__8S19053C7[3]),  3,4},
  {&(_tg__ZTV8S19053C8__9S19053C15__8S19053C7[4]),  4,6},
  {&(_ZTV8S19053C7[17]),  17,76},
  {&(_ZTV8S19053C7[36]),  36,76},
  {&(_ZTV8S19053C7[36]),  36,76},
  {&(_ZTV8S19053C7[49]),  49,76},
  {&(_ZTV8S19053C7[56]),  56,76},
  {&(_ZTV8S19053C7[60]),  60,76},
  {&(_ZTV8S19053C7[68]),  68,76},
  {&(_ZTV8S19053C7[22]),  22,76},
  {&(_ZTV8S19053C7[74]),  74,76},
  {&(_tg__ZTV8S19053C5__8S19053C7[4]),  4,8},
  {&(_tg__ZTV8S19053C5__8S19053C7[4]),  4,8},
  {&(_tg__ZTV8S19053C9__8S19053C7[6]),  6,10},
  {&(_tg__ZTV8S19053C58S19053C9__A1__8S19053C7[4]),  4,8},
  {&(_tg__ZTV8S19053C4__8S19053C58S19053C9__A1__8S19053C7[3]),  3,4},
  {&(_tg__ZTV9S19053C10__8S19053C9__8S19053C7[3]),  3,4},
  {&(_tg__ZTV8S19053C4__8S19053C9__8S19053C7[3]),  3,4},
  {&(_tg__ZTV8S19053C48S19053C3__A1__8S19053C9__8S19053C7[3]),  3,4},
  {&(_tg__ZTV9S19053C14__8S19053C7[5]),  5,7},
  {&(_tg__ZTV9S19053C139S19053C14__8S19053C7[3]),  3,4},
  {&(_tg__ZTV8S19053C48S19053C3__9S19053C139S19053C14__8S19053C7[3]),  3,4},
  {&(_tg__ZTV8S19053C5__9S19053C14__8S19053C7[7]),  7,11},
  {&(_tg__ZTV8S19053C5__9S19053C14__8S19053C7[7]),  7,11},
  {&(_tg__ZTV8S19053C48S19053C3__A1__9S19053C14__8S19053C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19053C7[];
extern  VTBL_ENTRY _ZTV8S19053C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19053C7[];
Class_Descriptor cd_S19053C7 = {  "S19053C7", // class name
  bases_S19053C7, 18,
  &(vtc_S19053C7[0]), // expected_vtbl_contents
  &(vtt_S19053C7[0]), // expected_vtt_contents
  ABISELECT(4848,2948), // object size
  NSPAIRA(_ZTI8S19053C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19053C7),76, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19053C7),30, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19053C1  : virtual S19053C2 {
  char s19053c1f0;
  __tsi64 s19053c1f1[4];
  short s19053c1f2;
  ::S19053C7 s19053c1f3;
  ::S19277C15 s19053c1f4;
  long double s19053c1f5;
  int s19053c1f6;
  ::S19277C20 s19053c1f7;
  void *s19053c1f8;
  virtual  ~S19053C1(); // _ZN8S19053C1D2Ev
  virtual void  v1(); // _ZN8S19053C12v1Ev
  S19053C1(); // tgen
};
//SIG(1 S19053C1) C1{ VBC2{ BC3{ BC4{ v2} Fc[5] FC5{ VBC4 v3 v4 v5 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC4 VBC5 Fi Fp} vd v1 Fc FL[4] Fs FC7{ BC8{ BC4 v6 Fc FL Fi[3] FC3} BC2 VBC9{ VBC10{ v7 FC6 Fi:3 Fp Fi} BC5 VBC3 FC11{ VBC12{ v17} BC13{ BC14{ VBC12 v18 v19 v20 Fp[3] FC6 Fp} v21 v22 Fp FC15{ BC16{ BC12 Fc[5] FC14[2] Fi Fp[7] FC14 FC12 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC12 VBC14 Fi Fp} Fi Fp Fi[2]} VBC17{ VBC16 v23 Fp FL Fp[6] FC12 FC18{ BC12 v24 Fc FL Fi[3] FC16} Fp Fi} vd v16 Fp[2] Fi[9] FC18 FC12[9] FL FD Fp FL Fl FL} Fi FD} VBC19{ VBC5 BC20{ VBC3 v8 Fp FL Fp[6] FC4 FC8 Fp Fi} v9 Fp FC4 FL[8] FC5 Fp} BC21{ VBC10 BC22{ v10 v11 Fp[2] Fi[2] Fp[15] Fi FC20} VBC8 vd v12 v13 v14 Fi Fs FL[7] Fc[5] Fp} vd Fs Fc FD FU23{ m Fp FL FL Fi:27 Fs:16 Fs Fp} FC24{ vd v15 Fi} Fi:28 FC24 Fp Fp} FC11 FD Fi FU23 Fp}


 S19053C1 ::~S19053C1(){ note_dtor("S19053C1", this);}
void  S19053C1 ::v1(){vfunc_called(this, "_ZN8S19053C12v1Ev");}
S19053C1 ::S19053C1(){ note_ctor("S19053C1", this);} // tgen

static void Test_S19053C1()
{
  extern Class_Descriptor cd_S19053C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(441,1071)];
    init_test(&cd_S19053C1, buf);
    S19053C1 *dp, &lv = *(dp=new (buf) S19053C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7040,4280), "sizeof(S19053C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19053C1)");
    check_base_class_offset(lv, (S19053C4*)(S19053C3*)(S19053C2*), ABISELECT(6680,4064), "S19053C1");
    check_base_class_offset(lv, (S19053C3*)(S19053C2*), ABISELECT(6680,4064), "S19053C1");
    /*is_ambiguous_... S19053C2::S19053C4 */ AMB_check_base_class_offset(lv, (S19053C4*)(S19053C2*), 0, "S19053C1");
    check_base_class_offset(lv, (S19053C4*)(S19053C5*), 0, "S19053C1");
    check_base_class_offset(lv, (S19053C5*)(S19053C2*), ABISELECT(6992,4256), "S19053C1");
    check_base_class_offset(lv, (S19053C2*), ABISELECT(6680,4064), "S19053C1");
    check_field_offset(lv, s19053c1f0, ABISELECT(8,4), "S19053C1.s19053c1f0");
    check_field_offset(lv, s19053c1f1, ABISELECT(16,8), "S19053C1.s19053c1f1");
    check_field_offset(lv, s19053c1f2, ABISELECT(48,40), "S19053C1.s19053c1f2");
    check_field_offset(lv, s19053c1f3, ABISELECT(64,44), "S19053C1.s19053c1f3");
    check_field_offset(lv, s19053c1f4, ABISELECT(4912,2992), "S19053C1.s19053c1f4");
    check_field_offset(lv, s19053c1f5, ABISELECT(6640,4036), "S19053C1.s19053c1f5");
    check_field_offset(lv, s19053c1f6, ABISELECT(6656,4048), "S19053C1.s19053c1f6");
    check_field_offset(lv, s19053c1f7, ABISELECT(6664,4052), "S19053C1.s19053c1f7");
    check_field_offset(lv, s19053c1f8, ABISELECT(6672,4060), "S19053C1.s19053c1f8");
    test_class_info(&lv, &cd_S19053C1);
    dp->~S19053C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19053C1(Test_S19053C1, "S19053C1", ABISELECT(7040,4280));

#else // __cplusplus

extern void _ZN8S19053C1C1Ev();
extern void _ZN8S19053C1D2Ev();
Name_Map name_map_S19053C1[] = {
  NSPAIR(_ZN8S19053C1C1Ev),
  NSPAIR(_ZN8S19053C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19053C4;
extern VTBL_ENTRY _ZTI8S19053C4[];
extern  VTBL_ENTRY _ZTV8S19053C4[];
extern Class_Descriptor cd_S19053C3;
extern VTBL_ENTRY _ZTI8S19053C3[];
extern  VTBL_ENTRY _ZTV8S19053C3[];
extern Class_Descriptor cd_S19053C4;
extern VTBL_ENTRY _ZTI8S19053C4[];
extern  VTBL_ENTRY _ZTV8S19053C4[];
extern Class_Descriptor cd_S19053C5;
extern VTBL_ENTRY _ZTI8S19053C5[];
extern  VTBL_ENTRY _ZTV8S19053C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19053C5[];
extern Class_Descriptor cd_S19053C2;
extern VTBL_ENTRY _ZTI8S19053C2[];
extern  VTBL_ENTRY _ZTV8S19053C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19053C2[];
static Base_Class bases_S19053C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19053C4,    ABISELECT(6680,4064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19053C3,    ABISELECT(6680,4064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19053C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19053C5,    ABISELECT(6992,4256), //bcp->offset
    16, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19053C2,    ABISELECT(6680,4064), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19053C1[];
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C1D1Ev();
extern void _ZN8S19053C1D0Ev();
extern void _ZN8S19053C12v1Ev();
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C52v3Ev();
extern void _ZN8S19053C52v4Ev();
extern void _ZN8S19053C52v5Ev();
static  VTBL_ENTRY vtc_S19053C1[] = {
  ABISELECT(6992,4256),
  0,
  ABISELECT(6680,4064),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19053C1[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19053C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19053C12v1Ev,
  0,
  ABISELECT(312,192),
  ABISELECT(-6680,-4064),
  ABISELECT(-6680,-4064),
  (VTBL_ENTRY)&(_ZTI8S19053C1[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  0,
  0,
  0,
  ABISELECT(-6992,-4256),
  ABISELECT(-6992,-4256),
  ABISELECT(-6992,-4256),
  (VTBL_ENTRY)&(_ZTI8S19053C1[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v5Ev,
};
extern VTBL_ENTRY _ZTV8S19053C1[];
extern void _ZN8S19053C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C2__8S19053C1[] = {
  ABISELECT(312,192),
  ABISELECT(-6680,-4064),
  0,
  (VTBL_ENTRY)&(_ZTI8S19053C2[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
};
extern void _ZN8S19053C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C4__A1__8S19053C2__8S19053C1[] = {
  0,
  ABISELECT(6680,4064),
  (VTBL_ENTRY)&(_ZTI8S19053C2[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
};
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C52v3Ev();
extern void _ZN8S19053C52v4Ev();
extern void _ZN8S19053C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C5__8S19053C2__8S19053C1[] = {
  0,
  0,
  0,
  ABISELECT(-6992,-4256),
  ABISELECT(-6992,-4256),
  ABISELECT(-312,-192),
  (VTBL_ENTRY)&(_ZTI8S19053C2[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v5Ev,
};
extern void _ZN8S19053C42v2Ev();
extern void _ZN8S19053C52v3Ev();
extern void _ZN8S19053C52v4Ev();
extern void _ZN8S19053C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C5__8S19053C1[] = {
  ABISELECT(-6992,-4256),
  ABISELECT(-6992,-4256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19053C5[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19053C52v5Ev,
};
extern void _ZN8S19053C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19053C4__8S19053C5__8S19053C1[] = {
  0,
  ABISELECT(6992,4256),
  (VTBL_ENTRY)&(_ZTI8S19053C5[0]),
  (VTBL_ENTRY)&_ZN8S19053C42v2Ev,
};
static  VTT_ENTRY vtt_S19053C1[] = {
  {&(_ZTV8S19053C1[6]),  6,27},
  {&(_ZTV8S19053C1[15]),  15,27},
  {&(_ZTV8S19053C1[6]),  6,27},
  {&(_ZTV8S19053C1[23]),  23,27},
  {&(_tg__ZTV8S19053C2__8S19053C1[4]),  4,5},
  {&(_tg__ZTV8S19053C4__A1__8S19053C2__8S19053C1[3]),  3,4},
  {&(_tg__ZTV8S19053C5__8S19053C2__8S19053C1[7]),  7,11},
  {&(_tg__ZTV8S19053C5__8S19053C1[4]),  4,8},
  {&(_tg__ZTV8S19053C4__8S19053C5__8S19053C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19053C1[];
extern  VTBL_ENTRY _ZTV8S19053C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19053C1[];
Class_Descriptor cd_S19053C1 = {  "S19053C1", // class name
  bases_S19053C1, 5,
  &(vtc_S19053C1[0]), // expected_vtbl_contents
  &(vtt_S19053C1[0]), // expected_vtt_contents
  ABISELECT(7040,4280), // object size
  NSPAIRA(_ZTI8S19053C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19053C1),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19053C1),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7525C3  {
  virtual void  v1(); // _ZN7S7525C32v1Ev
  ~S7525C3(); // tgen
  S7525C3(); // tgen
};
//SIG(-1 S7525C3) C1{ v1}


void  S7525C3 ::v1(){vfunc_called(this, "_ZN7S7525C32v1Ev");}
S7525C3 ::~S7525C3(){ note_dtor("S7525C3", this);} // tgen
S7525C3 ::S7525C3(){ note_ctor("S7525C3", this);} // tgen

static void Test_S7525C3()
{
  extern Class_Descriptor cd_S7525C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7525C3, buf);
    S7525C3 *dp, &lv = *(dp=new (buf) S7525C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7525C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7525C3)");
    test_class_info(&lv, &cd_S7525C3);
    dp->~S7525C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7525C3(Test_S7525C3, "S7525C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7525C3C1Ev();
extern void _ZN7S7525C3D1Ev();
Name_Map name_map_S7525C3[] = {
  NSPAIR(_ZN7S7525C3C1Ev),
  NSPAIR(_ZN7S7525C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7525C3[];
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY vtc_S7525C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C3[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
Class_Descriptor cd_S7525C3 = {  "S7525C3", // class name
  0,0,//no base classes
  &(vtc_S7525C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7525C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7525C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7525C2  : virtual S7525C3 {
  void *s7525c2f0[3];
  ::S2489C12_nt s7525c2f1;
  void *s7525c2f2;
  virtual void  v2(); // _ZN7S7525C22v2Ev
  virtual void  v3(); // _ZN7S7525C22v3Ev
  virtual void  v4(); // _ZN7S7525C22v4Ev
  ~S7525C2(); // tgen
  S7525C2(); // tgen
};
//SIG(-1 S7525C2) C1{ VBC2{ v4} v1 v2 v3 Fp[3] FC3{} Fp}


void  S7525C2 ::v2(){vfunc_called(this, "_ZN7S7525C22v2Ev");}
void  S7525C2 ::v3(){vfunc_called(this, "_ZN7S7525C22v3Ev");}
void  S7525C2 ::v4(){vfunc_called(this, "_ZN7S7525C22v4Ev");}
S7525C2 ::~S7525C2(){ note_dtor("S7525C2", this);} // tgen
S7525C2 ::S7525C2(){ note_ctor("S7525C2", this);} // tgen

static void Test_S7525C2()
{
  extern Class_Descriptor cd_S7525C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7525C2, buf);
    S7525C2 *dp, &lv = *(dp=new (buf) S7525C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7525C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7525C2)");
    check_base_class_offset(lv, (S7525C3*), 0, "S7525C2");
    check_field_offset(lv, s7525c2f0, ABISELECT(8,4), "S7525C2.s7525c2f0");
    check_field_offset(lv, s7525c2f1, ABISELECT(32,16), "S7525C2.s7525c2f1");
    check_field_offset(lv, s7525c2f2, ABISELECT(40,20), "S7525C2.s7525c2f2");
    test_class_info(&lv, &cd_S7525C2);
    dp->~S7525C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7525C2(Test_S7525C2, "S7525C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7525C2C1Ev();
extern void _ZN7S7525C2D1Ev();
Name_Map name_map_S7525C2[] = {
  NSPAIR(_ZN7S7525C2C1Ev),
  NSPAIR(_ZN7S7525C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
static Base_Class bases_S7525C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7525C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7525C2[];
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY vtc_S7525C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern VTBL_ENTRY _ZTV7S7525C2[];
static  VTT_ENTRY vtt_S7525C2[] = {
  {&(_ZTV7S7525C2[4]),  4,8},
  {&(_ZTV7S7525C2[4]),  4,8},
};
extern VTBL_ENTRY _ZTI7S7525C2[];
extern  VTBL_ENTRY _ZTV7S7525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C2[];
Class_Descriptor cd_S7525C2 = {  "S7525C2", // class name
  bases_S7525C2, 1,
  &(vtc_S7525C2[0]), // expected_vtbl_contents
  &(vtt_S7525C2[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7525C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7525C2),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7525C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7525C8  : S7525C3 {
  char s7525c8f0[5];
  ::S7525C2 s7525c8f1[2];
  int s7525c8f2;
  void *s7525c8f3[7];
  ::S7525C2 s7525c8f4;
  ::S7525C3 s7525c8f5;
  char s7525c8f6;
  int s7525c8f7;
  short s7525c8f8[5];
  int s7525c8f9[8];
  __tsi64 s7525c8f10;
  char s7525c8f11:8;
  ~S7525C8(); // tgen
  S7525C8(); // tgen
};
//SIG(-1 S7525C8) C1{ BC2{ v1} Fc[5] FC3{ VBC2 v2 v3 v4 Fp[3] FC4{} Fp}[2] Fi Fp[7] FC3 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}


S7525C8 ::~S7525C8(){ note_dtor("S7525C8", this);} // tgen
S7525C8 ::S7525C8(){ note_ctor("S7525C8", this);} // tgen

static void Test_S7525C8()
{
  extern Class_Descriptor cd_S7525C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,47)];
    init_test(&cd_S7525C8, buf);
    S7525C8 *dp, &lv = *(dp=new (buf) S7525C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,184), "sizeof(S7525C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7525C8)");
    check_base_class_offset(lv, (S7525C3*), 0, "S7525C8");
    check_field_offset(lv, s7525c8f0, ABISELECT(8,4), "S7525C8.s7525c8f0");
    check_field_offset(lv, s7525c8f1, ABISELECT(16,12), "S7525C8.s7525c8f1");
    check_field_offset(lv, s7525c8f2, ABISELECT(112,60), "S7525C8.s7525c8f2");
    check_field_offset(lv, s7525c8f3, ABISELECT(120,64), "S7525C8.s7525c8f3");
    check_field_offset(lv, s7525c8f4, ABISELECT(176,92), "S7525C8.s7525c8f4");
    check_field_offset(lv, s7525c8f5, ABISELECT(224,116), "S7525C8.s7525c8f5");
    check_field_offset(lv, s7525c8f6, ABISELECT(232,120), "S7525C8.s7525c8f6");
    check_field_offset(lv, s7525c8f7, ABISELECT(236,124), "S7525C8.s7525c8f7");
    check_field_offset(lv, s7525c8f8, ABISELECT(240,128), "S7525C8.s7525c8f8");
    check_field_offset(lv, s7525c8f9, ABISELECT(252,140), "S7525C8.s7525c8f9");
    check_field_offset(lv, s7525c8f10, ABISELECT(288,172), "S7525C8.s7525c8f10");
    set_bf_and_test(lv, s7525c8f11, ABISELECT(296,180), 0, 8, 1, "S7525C8");
    set_bf_and_test(lv, s7525c8f11, ABISELECT(296,180), 0, 8, hide_sll(1LL<<7), "S7525C8");
    test_class_info(&lv, &cd_S7525C8);
    dp->~S7525C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7525C8(Test_S7525C8, "S7525C8", ABISELECT(304,184));

#else // __cplusplus

extern void _ZN7S7525C8C1Ev();
extern void _ZN7S7525C8D1Ev();
Name_Map name_map_S7525C8[] = {
  NSPAIR(_ZN7S7525C8C1Ev),
  NSPAIR(_ZN7S7525C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
static Base_Class bases_S7525C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7525C3,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7525C8[];
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY vtc_S7525C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C8[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S7525C8[];
extern  VTBL_ENTRY _ZTV7S7525C8[];
Class_Descriptor cd_S7525C8 = {  "S7525C8", // class name
  bases_S7525C8, 1,
  &(vtc_S7525C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,184), // object size
  NSPAIRA(_ZTI7S7525C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7525C8),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7525C9  : S7525C3 {
  char s7525c9f0;
  __tsi64 s7525c9f1;
  int s7525c9f2[3];
  ::S7525C8 s7525c9f3;
  virtual void  v12(); // _ZN7S7525C93v12Ev
  ~S7525C9(); // tgen
  S7525C9(); // tgen
};
//SIG(-1 S7525C9) C1{ BC2{ v2} v1 Fc FL Fi[3] FC3{ BC2 Fc[5] FC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}}


void  S7525C9 ::v12(){vfunc_called(this, "_ZN7S7525C93v12Ev");}
S7525C9 ::~S7525C9(){ note_dtor("S7525C9", this);} // tgen
S7525C9 ::S7525C9(){ note_ctor("S7525C9", this);} // tgen

static void Test_S7525C9()
{
  extern Class_Descriptor cd_S7525C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,54)];
    init_test(&cd_S7525C9, buf);
    S7525C9 *dp, &lv = *(dp=new (buf) S7525C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,212), "sizeof(S7525C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7525C9)");
    check_base_class_offset(lv, (S7525C3*), 0, "S7525C9");
    check_field_offset(lv, s7525c9f0, ABISELECT(8,4), "S7525C9.s7525c9f0");
    check_field_offset(lv, s7525c9f1, ABISELECT(16,8), "S7525C9.s7525c9f1");
    check_field_offset(lv, s7525c9f2, ABISELECT(24,16), "S7525C9.s7525c9f2");
    check_field_offset(lv, s7525c9f3, ABISELECT(40,28), "S7525C9.s7525c9f3");
    test_class_info(&lv, &cd_S7525C9);
    dp->~S7525C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7525C9(Test_S7525C9, "S7525C9", ABISELECT(344,212));

#else // __cplusplus

extern void _ZN7S7525C9C1Ev();
extern void _ZN7S7525C9D1Ev();
Name_Map name_map_S7525C9[] = {
  NSPAIR(_ZN7S7525C9C1Ev),
  NSPAIR(_ZN7S7525C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
static Base_Class bases_S7525C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7525C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7525C9[];
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C93v12Ev();
static  VTBL_ENTRY vtc_S7525C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C9[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C93v12Ev,
};
extern VTBL_ENTRY _ZTI7S7525C9[];
extern  VTBL_ENTRY _ZTV7S7525C9[];
Class_Descriptor cd_S7525C9 = {  "S7525C9", // class name
  bases_S7525C9, 1,
  &(vtc_S7525C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,212), // object size
  NSPAIRA(_ZTI7S7525C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7525C9),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7525C7  : virtual S7525C8 {
  void *s7525c7f0;
  __tsi64 s7525c7f1;
  void *s7525c7f2[6];
  ::S7525C3 s7525c7f3;
  ::S7525C9 s7525c7f4;
  void *s7525c7f5;
  int s7525c7f6;
  virtual void  v5(); // _ZN7S7525C72v5Ev
  ~S7525C7(); // tgen
  S7525C7(); // tgen
};
//SIG(-1 S7525C7) C1{ VBC2{ BC3{ v2} Fc[5] FC4{ VBC3 v4 v5 v6 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v1 Fp FL Fp[6] FC3 FC6{ BC3 v3 Fc FL Fi[3] FC2} Fp Fi}


void  S7525C7 ::v5(){vfunc_called(this, "_ZN7S7525C72v5Ev");}
S7525C7 ::~S7525C7(){ note_dtor("S7525C7", this);} // tgen
S7525C7 ::S7525C7(){ note_ctor("S7525C7", this);} // tgen

static void Test_S7525C7()
{
  extern Class_Descriptor cd_S7525C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(94,113)];
    init_test(&cd_S7525C7, buf);
    S7525C7 *dp, &lv = *(dp=new (buf) S7525C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(744,448), "sizeof(S7525C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7525C7)");
    check_base_class_offset(lv, (S7525C3*)(S7525C8*), ABISELECT(440,264), "S7525C7");
    check_base_class_offset(lv, (S7525C8*), ABISELECT(440,264), "S7525C7");
    check_field_offset(lv, s7525c7f0, ABISELECT(8,4), "S7525C7.s7525c7f0");
    check_field_offset(lv, s7525c7f1, ABISELECT(16,8), "S7525C7.s7525c7f1");
    check_field_offset(lv, s7525c7f2, ABISELECT(24,16), "S7525C7.s7525c7f2");
    check_field_offset(lv, s7525c7f3, ABISELECT(72,40), "S7525C7.s7525c7f3");
    check_field_offset(lv, s7525c7f4, ABISELECT(80,44), "S7525C7.s7525c7f4");
    check_field_offset(lv, s7525c7f5, ABISELECT(424,256), "S7525C7.s7525c7f5");
    check_field_offset(lv, s7525c7f6, ABISELECT(432,260), "S7525C7.s7525c7f6");
    test_class_info(&lv, &cd_S7525C7);
    dp->~S7525C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7525C7(Test_S7525C7, "S7525C7", ABISELECT(744,448));

#else // __cplusplus

extern void _ZN7S7525C7C1Ev();
extern void _ZN7S7525C7D1Ev();
Name_Map name_map_S7525C7[] = {
  NSPAIR(_ZN7S7525C7C1Ev),
  NSPAIR(_ZN7S7525C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C8;
extern VTBL_ENTRY _ZTI7S7525C8[];
extern  VTBL_ENTRY _ZTV7S7525C8[];
static Base_Class bases_S7525C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7525C3,    ABISELECT(440,264), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7525C8,    ABISELECT(440,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7525C7[];
extern void _ZN7S7525C72v5Ev();
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY vtc_S7525C7[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern VTBL_ENTRY _ZTV7S7525C7[];
static  VTT_ENTRY vtt_S7525C7[] = {
  {&(_ZTV7S7525C7[3]),  3,8},
  {&(_ZTV7S7525C7[7]),  7,8},
};
extern VTBL_ENTRY _ZTI7S7525C7[];
extern  VTBL_ENTRY _ZTV7S7525C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C7[];
Class_Descriptor cd_S7525C7 = {  "S7525C7", // class name
  bases_S7525C7, 2,
  &(vtc_S7525C7[0]), // expected_vtbl_contents
  &(vtt_S7525C7[0]), // expected_vtt_contents
  ABISELECT(744,448), // object size
  NSPAIRA(_ZTI7S7525C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7525C7),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7525C7),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7525C11  : virtual S7525C2 , S7525C7 {
  void *s7525c11f0;
  ::S7525C3 s7525c11f1;
  __tsi64 s7525c11f2[8];
  ::S7525C2 s7525c11f3;
  void *s7525c11f4;
  virtual void  v6(); // _ZN8S7525C112v6Ev
  ~S7525C11(); // tgen
  S7525C11(); // tgen
};
//SIG(-1 S7525C11) C1{ VBC2{ VBC3{ v2} v3 v4 v5 Fp[3] FC4{} Fp} BC5{ VBC6{ BC3 Fc[5] FC2[2] Fi Fp[7] FC2 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v6 Fp FL Fp[6] FC3 FC7{ BC3 v7 Fc FL Fi[3] FC6} Fp Fi} v1 Fp FC3 FL[8] FC2 Fp}


void  S7525C11 ::v6(){vfunc_called(this, "_ZN8S7525C112v6Ev");}
S7525C11 ::~S7525C11(){ note_dtor("S7525C11", this);} // tgen
S7525C11 ::S7525C11(){ note_ctor("S7525C11", this);} // tgen

static void Test_S7525C11()
{
  extern Class_Descriptor cd_S7525C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(117,144)];
    init_test(&cd_S7525C11, buf);
    S7525C11 *dp, &lv = *(dp=new (buf) S7525C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(928,572), "sizeof(S7525C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7525C11)");
    check_base_class_offset(lv, (S7525C3*)(S7525C2*), ABISELECT(576,364), "S7525C11");
    check_base_class_offset(lv, (S7525C2*), ABISELECT(576,364), "S7525C11");
    check_base_class_offset(lv, (S7525C3*)(S7525C8*), ABISELECT(624,388), "S7525C11");
    check_base_class_offset(lv, (S7525C8*)(S7525C7*), ABISELECT(624,388), "S7525C11");
    check_base_class_offset(lv, (S7525C7*), 0, "S7525C11");
    check_field_offset(lv, s7525c11f0, ABISELECT(440,264), "S7525C11.s7525c11f0");
    check_field_offset(lv, s7525c11f1, ABISELECT(448,268), "S7525C11.s7525c11f1");
    check_field_offset(lv, s7525c11f2, ABISELECT(456,272), "S7525C11.s7525c11f2");
    check_field_offset(lv, s7525c11f3, ABISELECT(520,336), "S7525C11.s7525c11f3");
    check_field_offset(lv, s7525c11f4, ABISELECT(568,360), "S7525C11.s7525c11f4");
    test_class_info(&lv, &cd_S7525C11);
    dp->~S7525C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7525C11(Test_S7525C11, "S7525C11", ABISELECT(928,572));

#else // __cplusplus

extern void _ZN8S7525C11C1Ev();
extern void _ZN8S7525C11D1Ev();
Name_Map name_map_S7525C11[] = {
  NSPAIR(_ZN8S7525C11C1Ev),
  NSPAIR(_ZN8S7525C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C2;
extern VTBL_ENTRY _ZTI7S7525C2[];
extern  VTBL_ENTRY _ZTV7S7525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C2[];
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C8;
extern VTBL_ENTRY _ZTI7S7525C8[];
extern  VTBL_ENTRY _ZTV7S7525C8[];
extern Class_Descriptor cd_S7525C7;
extern VTBL_ENTRY _ZTI7S7525C7[];
extern  VTBL_ENTRY _ZTV7S7525C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C7[];
static Base_Class bases_S7525C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7525C3,    ABISELECT(576,364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7525C2,    ABISELECT(576,364), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7525C3,    ABISELECT(624,388), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7525C8,    ABISELECT(624,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7525C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7525C11[];
extern void _ZN7S7525C72v5Ev();
extern void _ZN8S7525C112v6Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY vtc_S7525C11[] = {
  ABISELECT(576,364),
  ABISELECT(576,364),
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C11[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7525C112v6Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-576,-364),
  (VTBL_ENTRY)&(_ZTI8S7525C11[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI8S7525C11[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern VTBL_ENTRY _ZTV8S7525C11[];
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C7__8S7525C11[] = {
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__7S7525C7__8S7525C11[] = {
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C2__8S7525C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
static  VTT_ENTRY vtt_S7525C11[] = {
  {&(_ZTV8S7525C11[5]),  5,22},
  {&(_tg__ZTV7S7525C7__8S7525C11[3]),  3,4},
  {&(_tg__ZTV7S7525C37S7525C8__7S7525C7__8S7525C11[3]),  3,4},
  {&(_ZTV8S7525C11[14]),  14,22},
  {&(_ZTV8S7525C11[14]),  14,22},
  {&(_ZTV8S7525C11[21]),  21,22},
  {&(_tg__ZTV7S7525C2__8S7525C11[4]),  4,8},
  {&(_tg__ZTV7S7525C2__8S7525C11[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S7525C11[];
extern  VTBL_ENTRY _ZTV8S7525C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C11[];
Class_Descriptor cd_S7525C11 = {  "S7525C11", // class name
  bases_S7525C11, 5,
  &(vtc_S7525C11[0]), // expected_vtbl_contents
  &(vtt_S7525C11[0]), // expected_vtt_contents
  ABISELECT(928,572), // object size
  NSPAIRA(_ZTI8S7525C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7525C11),22, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7525C11),8, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7525C13  : S7525C2 {
  void *s7525c13f0;
  ::S19277C8 s7525c13f1;
  int s7525c13f2;
  void *s7525c13f3;
  int s7525c13f4[2];
  virtual void  v7(); // _ZN8S7525C132v7Ev
  virtual void  v8(); // _ZN8S7525C132v8Ev
  ~S7525C13(); // tgen
  S7525C13(); // tgen
};
//SIG(-1 S7525C13) C1{ BC2{ VBC3{ v3} v4 v5 v6 Fp[3] FC4{} Fp} v1 v2 Fp FC5{ BC6{ BC7{ v7} Fc[5] FC8{ VBC7 v8 v9 v10 Fp[3] FC4 Fp}[2] Fi Fp[7] FC8 FC7 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC7 VBC8 Fi Fp} Fi Fp Fi[2]}


void  S7525C13 ::v7(){vfunc_called(this, "_ZN8S7525C132v7Ev");}
void  S7525C13 ::v8(){vfunc_called(this, "_ZN8S7525C132v8Ev");}
S7525C13 ::~S7525C13(){ note_dtor("S7525C13", this);} // tgen
S7525C13 ::S7525C13(){ note_ctor("S7525C13", this);} // tgen

static void Test_S7525C13()
{
  extern Class_Descriptor cd_S7525C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(56,66)];
    init_test(&cd_S7525C13, buf);
    S7525C13 *dp, &lv = *(dp=new (buf) S7525C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(440,260), "sizeof(S7525C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7525C13)");
    check_base_class_offset(lv, (S7525C3*)(S7525C2*), 0, "S7525C13");
    check_base_class_offset(lv, (S7525C2*), 0, "S7525C13");
    check_field_offset(lv, s7525c13f0, ABISELECT(48,24), "S7525C13.s7525c13f0");
    check_field_offset(lv, s7525c13f1, ABISELECT(56,28), "S7525C13.s7525c13f1");
    check_field_offset(lv, s7525c13f2, ABISELECT(416,244), "S7525C13.s7525c13f2");
    check_field_offset(lv, s7525c13f3, ABISELECT(424,248), "S7525C13.s7525c13f3");
    check_field_offset(lv, s7525c13f4, ABISELECT(432,252), "S7525C13.s7525c13f4");
    test_class_info(&lv, &cd_S7525C13);
    dp->~S7525C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7525C13(Test_S7525C13, "S7525C13", ABISELECT(440,260));

#else // __cplusplus

extern void _ZN8S7525C13C1Ev();
extern void _ZN8S7525C13D1Ev();
Name_Map name_map_S7525C13[] = {
  NSPAIR(_ZN8S7525C13C1Ev),
  NSPAIR(_ZN8S7525C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C2;
extern VTBL_ENTRY _ZTI7S7525C2[];
extern  VTBL_ENTRY _ZTV7S7525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C2[];
static Base_Class bases_S7525C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7525C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7525C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7525C13[];
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
static  VTBL_ENTRY vtc_S7525C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C13[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
};
extern VTBL_ENTRY _ZTV8S7525C13[];
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C2__8S7525C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
static  VTT_ENTRY vtt_S7525C13[] = {
  {&(_ZTV8S7525C13[4]),  4,10},
  {&(_tg__ZTV7S7525C2__8S7525C13[4]),  4,8},
  {&(_tg__ZTV7S7525C2__8S7525C13[4]),  4,8},
  {&(_ZTV8S7525C13[4]),  4,10},
};
extern VTBL_ENTRY _ZTI8S7525C13[];
extern  VTBL_ENTRY _ZTV8S7525C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C13[];
Class_Descriptor cd_S7525C13 = {  "S7525C13", // class name
  bases_S7525C13, 2,
  &(vtc_S7525C13[0]), // expected_vtbl_contents
  &(vtt_S7525C13[0]), // expected_vtt_contents
  ABISELECT(440,260), // object size
  NSPAIRA(_ZTI8S7525C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7525C13),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7525C13),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7525C12  : virtual S7525C3 , S7525C13 , virtual S7525C7 {
  void *s7525c12f0[2];
  int s7525c12f1[9];
  ::S7525C9 s7525c12f2;
  ::S7525C3 s7525c12f3[9];
  __tsi64 s7525c12f4;
  long double s7525c12f5;
  void *s7525c12f6;
  __tsi64 s7525c12f7;
  long s7525c12f8;
  __tsi64 s7525c12f9;
  virtual  ~S7525C12(); // _ZN8S7525C12D2Ev
  virtual void  v9(); // _ZN8S7525C122v9Ev
  S7525C12(); // tgen
};
//SIG(-1 S7525C12) C1{ VBC2{ v2} BC3{ BC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp} v6 v7 Fp FC6{ BC7{ BC8{ v9} Fc[5] FC9{ VBC8 v10 v11 v12 Fp[3] FC5 Fp}[2] Fi Fp[7] FC9 FC8 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC8 VBC9 Fi Fp} Fi Fp Fi[2]} VBC10{ VBC11{ BC2 Fc[5] FC4[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC2 FC12{ BC2 v13 Fc FL Fi[3] FC11} Fp Fi} vd v1 Fp[2] Fi[9] FC12 FC2[9] FL FD Fp FL Fl FL}


 S7525C12 ::~S7525C12(){ note_dtor("S7525C12", this);}
void  S7525C12 ::v9(){vfunc_called(this, "_ZN8S7525C122v9Ev");}
S7525C12 ::S7525C12(){ note_ctor("S7525C12", this);} // tgen

static void Test_S7525C12()
{
  extern Class_Descriptor cd_S7525C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(109,262)];
    init_test(&cd_S7525C12, buf);
    S7525C12 *dp, &lv = *(dp=new (buf) S7525C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1728,1044), "sizeof(S7525C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7525C12)");
    /*is_ambiguous_... S7525C12::S7525C3 */ AMB_check_base_class_offset(lv, (S7525C3*), 0, "S7525C12");
    check_base_class_offset(lv, (S7525C3*)(S7525C2*)(S7525C13*), 0, "S7525C12");
    check_base_class_offset(lv, (S7525C2*)(S7525C13*), 0, "S7525C12");
    check_base_class_offset(lv, (S7525C13*), 0, "S7525C12");
    check_base_class_offset(lv, (S7525C3*)(S7525C8*), ABISELECT(1416,860), "S7525C12");
    check_base_class_offset(lv, (S7525C8*)(S7525C7*), ABISELECT(1416,860), "S7525C12");
    check_base_class_offset(lv, (S7525C7*), ABISELECT(976,596), "S7525C12");
    check_field_offset(lv, s7525c12f0, ABISELECT(440,260), "S7525C12.s7525c12f0");
    check_field_offset(lv, s7525c12f1, ABISELECT(456,268), "S7525C12.s7525c12f1");
    check_field_offset(lv, s7525c12f2, ABISELECT(496,304), "S7525C12.s7525c12f2");
    check_field_offset(lv, s7525c12f3, ABISELECT(840,516), "S7525C12.s7525c12f3");
    check_field_offset(lv, s7525c12f4, ABISELECT(912,552), "S7525C12.s7525c12f4");
    check_field_offset(lv, s7525c12f5, ABISELECT(928,560), "S7525C12.s7525c12f5");
    check_field_offset(lv, s7525c12f6, ABISELECT(944,572), "S7525C12.s7525c12f6");
    check_field_offset(lv, s7525c12f7, ABISELECT(952,576), "S7525C12.s7525c12f7");
    check_field_offset(lv, s7525c12f8, ABISELECT(960,584), "S7525C12.s7525c12f8");
    check_field_offset(lv, s7525c12f9, ABISELECT(968,588), "S7525C12.s7525c12f9");
    test_class_info(&lv, &cd_S7525C12);
    dp->~S7525C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7525C12(Test_S7525C12, "S7525C12", ABISELECT(1728,1044));

#else // __cplusplus

extern void _ZN8S7525C12C1Ev();
extern void _ZN8S7525C12D2Ev();
Name_Map name_map_S7525C12[] = {
  NSPAIR(_ZN8S7525C12C1Ev),
  NSPAIR(_ZN8S7525C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C2;
extern VTBL_ENTRY _ZTI7S7525C2[];
extern  VTBL_ENTRY _ZTV7S7525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C2[];
extern Class_Descriptor cd_S7525C13;
extern VTBL_ENTRY _ZTI8S7525C13[];
extern  VTBL_ENTRY _ZTV8S7525C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C13[];
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C8;
extern VTBL_ENTRY _ZTI7S7525C8[];
extern  VTBL_ENTRY _ZTV7S7525C8[];
extern Class_Descriptor cd_S7525C7;
extern VTBL_ENTRY _ZTI7S7525C7[];
extern  VTBL_ENTRY _ZTV7S7525C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C7[];
static Base_Class bases_S7525C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7525C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7525C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7525C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7525C3,    ABISELECT(1416,860), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7525C8,    ABISELECT(1416,860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7525C7,    ABISELECT(976,596), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7525C12[];
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
extern void _ZN8S7525C12D1Ev();
extern void _ZN8S7525C12D0Ev();
extern void _ZN8S7525C122v9Ev();
extern void _ZN7S7525C72v5Ev();
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY vtc_S7525C12[] = {
  ABISELECT(1416,860),
  ABISELECT(976,596),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7525C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7525C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7525C122v9Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
  0,
  ABISELECT(-1416,-860),
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern VTBL_ENTRY _ZTV8S7525C12[];
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C13__8S7525C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C13[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C28S7525C13__8S7525C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C7__8S7525C12[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__7S7525C7__8S7525C12[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
static  VTT_ENTRY vtt_S7525C12[] = {
  {&(_ZTV8S7525C12[6]),  6,24},
  {&(_tg__ZTV8S7525C13__8S7525C12[4]),  4,10},
  {&(_tg__ZTV7S7525C28S7525C13__8S7525C12[4]),  4,8},
  {&(_tg__ZTV7S7525C28S7525C13__8S7525C12[4]),  4,8},
  {&(_tg__ZTV8S7525C13__8S7525C12[4]),  4,10},
  {&(_ZTV8S7525C12[6]),  6,24},
  {&(_ZTV8S7525C12[19]),  19,24},
  {&(_ZTV8S7525C12[23]),  23,24},
  {&(_tg__ZTV7S7525C7__8S7525C12[3]),  3,4},
  {&(_tg__ZTV7S7525C37S7525C8__7S7525C7__8S7525C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7525C12[];
extern  VTBL_ENTRY _ZTV8S7525C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C12[];
Class_Descriptor cd_S7525C12 = {  "S7525C12", // class name
  bases_S7525C12, 6,
  &(vtc_S7525C12[0]), // expected_vtbl_contents
  &(vtt_S7525C12[0]), // expected_vtt_contents
  ABISELECT(1728,1044), // object size
  NSPAIRA(_ZTI8S7525C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7525C12),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7525C12),10, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7525C15  {
  void *s7525c15f0[2];
  int s7525c15f1[2];
  void *s7525c15f2[15];
  int s7525c15f3;
  ::S7525C7 s7525c15f4;
  virtual void  v10(); // _ZN8S7525C153v10Ev
  virtual void  v11(); // _ZN8S7525C153v11Ev
  ~S7525C15(); // tgen
  S7525C15(); // tgen
};
//SIG(-1 S7525C15) C1{ v1 v2 Fp[2] Fi[2] Fp[15] Fi FC2{ VBC3{ BC4{ v4} Fc[5] FC5{ VBC4 v6 v7 v8 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v3 Fp FL Fp[6] FC4 FC7{ BC4 v5 Fc FL Fi[3] FC3} Fp Fi}}


void  S7525C15 ::v10(){vfunc_called(this, "_ZN8S7525C153v10Ev");}
void  S7525C15 ::v11(){vfunc_called(this, "_ZN8S7525C153v11Ev");}
S7525C15 ::~S7525C15(){ note_dtor("S7525C15", this);} // tgen
S7525C15 ::S7525C15(){ note_ctor("S7525C15", this);} // tgen

static void Test_S7525C15()
{
  extern Class_Descriptor cd_S7525C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(114,134)];
    init_test(&cd_S7525C15, buf);
    S7525C15 *dp, &lv = *(dp=new (buf) S7525C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(904,532), "sizeof(S7525C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7525C15)");
    check_field_offset(lv, s7525c15f0, ABISELECT(8,4), "S7525C15.s7525c15f0");
    check_field_offset(lv, s7525c15f1, ABISELECT(24,12), "S7525C15.s7525c15f1");
    check_field_offset(lv, s7525c15f2, ABISELECT(32,20), "S7525C15.s7525c15f2");
    check_field_offset(lv, s7525c15f3, ABISELECT(152,80), "S7525C15.s7525c15f3");
    check_field_offset(lv, s7525c15f4, ABISELECT(160,84), "S7525C15.s7525c15f4");
    test_class_info(&lv, &cd_S7525C15);
    dp->~S7525C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7525C15(Test_S7525C15, "S7525C15", ABISELECT(904,532));

#else // __cplusplus

extern void _ZN8S7525C15C1Ev();
extern void _ZN8S7525C15D1Ev();
Name_Map name_map_S7525C15[] = {
  NSPAIR(_ZN8S7525C15C1Ev),
  NSPAIR(_ZN8S7525C15D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7525C15[];
extern void _ZN8S7525C153v10Ev();
extern void _ZN8S7525C153v11Ev();
static  VTBL_ENTRY vtc_S7525C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C15[0]),
  (VTBL_ENTRY)&_ZN8S7525C153v10Ev,
  (VTBL_ENTRY)&_ZN8S7525C153v11Ev,
};
extern VTBL_ENTRY _ZTI8S7525C15[];
extern  VTBL_ENTRY _ZTV8S7525C15[];
Class_Descriptor cd_S7525C15 = {  "S7525C15", // class name
  0,0,//no base classes
  &(vtc_S7525C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(904,532), // object size
  NSPAIRA(_ZTI8S7525C15),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7525C15),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7525C10  : S7525C2 , S7525C11 , virtual S7525C12 , virtual S7525C15 , virtual S7525C9 {
  short s7525c10f0;
  ::S2489C12_nt s7525c10f1;
  char s7525c10f2;
  void *s7525c10f3[2];
  int s7525c10f4[2];
  __tsi64 s7525c10f5;
  virtual void  v13(); // _ZN8S7525C103v13Ev
  ~S7525C10(); // tgen
  S7525C10(); // tgen
};
//SIG(-1 S7525C10) C1{ BC2{ VBC3{ v2} v3 v4 v5 Fp[3] FC4{} Fp} BC5{ VBC2 BC6{ VBC7{ BC3 Fc[5] FC2[2] Fi Fp[7] FC2 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v6 Fp FL Fp[6] FC3 FC8{ BC3 v13 Fc FL Fi[3] FC7} Fp Fi} v7 Fp FC3 FL[8] FC2 Fp} VBC9{ VBC3 BC10{ BC2 v8 v9 Fp FC11{ BC12{ BC13{ v14} Fc[5] FC14{ VBC13 v15 v16 v17 Fp[3] FC4 Fp}[2] Fi Fp[7] FC14 FC13 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC13 VBC14 Fi Fp} Fi Fp Fi[2]} VBC6 vd v10 Fp[2] Fi[9] FC8 FC3[9] FL FD Fp FL Fl FL} VBC15{ v11 v12 Fp[2] Fi[2] Fp[15] Fi FC6} VBC8 v1 Fs FC4 Fc Fp[2] Fi[2] FL}


void  S7525C10 ::v13(){vfunc_called(this, "_ZN8S7525C103v13Ev");}
S7525C10 ::~S7525C10(){ note_dtor("S7525C10", this);} // tgen
S7525C10 ::S7525C10(){ note_ctor("S7525C10", this);} // tgen

static void Test_S7525C10()
{
  extern Class_Descriptor cd_S7525C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(232,558)];
    init_test(&cd_S7525C10, buf);
    S7525C10 *dp, &lv = *(dp=new (buf) S7525C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3696,2228), "sizeof(S7525C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7525C10)");
    /*is_ambiguous_... S7525C10::S7525C2 */ AMB_check_base_class_offset(lv, (S7525C3*)(S7525C2*), 0, "S7525C10");
    /*is_ambiguous_... S7525C10::S7525C2 */ AMB_check_base_class_offset(lv, (S7525C3*)(S7525C2*), 0, "S7525C10");
    /*is_ambiguous_... S7525C12::S7525C3 */ AMB_check_base_class_offset(lv, (S7525C3*)(S7525C12*), 0, "S7525C10");
    check_base_class_offset(lv, (S7525C3*)(S7525C2*)(S7525C13*)(S7525C12*), 0, "S7525C10");
    /*is_ambiguous_... S7525C10::S7525C2 */ AMB_check_base_class_offset(lv, (S7525C2*), 0, "S7525C10");
    check_base_class_offset(lv, (S7525C2*)(S7525C11*), ABISELECT(664,416), "S7525C10");
    check_base_class_offset(lv, (S7525C3*)(S7525C8*), ABISELECT(712,440), "S7525C10");
    check_base_class_offset(lv, (S7525C8*)(S7525C7*)(S7525C11*), ABISELECT(712,440), "S7525C10");
    /*is_ambiguous_... S7525C10::S7525C7 */ AMB_check_base_class_offset(lv, (S7525C8*)(S7525C7*), ABISELECT(712,440), "S7525C10");
    check_base_class_offset(lv, (S7525C7*)(S7525C11*), ABISELECT(48,24), "S7525C10");
    check_base_class_offset(lv, (S7525C11*), ABISELECT(48,24), "S7525C10");
    check_base_class_offset(lv, (S7525C2*)(S7525C13*)(S7525C12*), ABISELECT(1024,624), "S7525C10");
    check_base_class_offset(lv, (S7525C13*)(S7525C12*), ABISELECT(1024,624), "S7525C10");
    check_base_class_offset(lv, (S7525C7*)(S7525C12*), ABISELECT(2000,1220), "S7525C10");
    check_base_class_offset(lv, (S7525C12*), ABISELECT(1024,624), "S7525C10");
    check_base_class_offset(lv, (S7525C15*), ABISELECT(2440,1484), "S7525C10");
    check_base_class_offset(lv, (S7525C3*)(S7525C9*), ABISELECT(3344,2016), "S7525C10");
    check_base_class_offset(lv, (S7525C9*), ABISELECT(3344,2016), "S7525C10");
    check_field_offset(lv, s7525c10f0, ABISELECT(624,388), "S7525C10.s7525c10f0");
    check_field_offset(lv, s7525c10f1, ABISELECT(626,390), "S7525C10.s7525c10f1");
    check_field_offset(lv, s7525c10f2, ABISELECT(627,391), "S7525C10.s7525c10f2");
    check_field_offset(lv, s7525c10f3, ABISELECT(632,392), "S7525C10.s7525c10f3");
    check_field_offset(lv, s7525c10f4, ABISELECT(648,400), "S7525C10.s7525c10f4");
    check_field_offset(lv, s7525c10f5, ABISELECT(656,408), "S7525C10.s7525c10f5");
    test_class_info(&lv, &cd_S7525C10);
    dp->~S7525C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7525C10(Test_S7525C10, "S7525C10", ABISELECT(3696,2228));

#else // __cplusplus

extern void _ZN8S7525C10C1Ev();
extern void _ZN8S7525C10D1Ev();
Name_Map name_map_S7525C10[] = {
  NSPAIR(_ZN8S7525C10C1Ev),
  NSPAIR(_ZN8S7525C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C2;
extern VTBL_ENTRY _ZTI7S7525C2[];
extern  VTBL_ENTRY _ZTV7S7525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C2[];
extern Class_Descriptor cd_S7525C2;
extern VTBL_ENTRY _ZTI7S7525C2[];
extern  VTBL_ENTRY _ZTV7S7525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C2[];
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C8;
extern VTBL_ENTRY _ZTI7S7525C8[];
extern  VTBL_ENTRY _ZTV7S7525C8[];
extern Class_Descriptor cd_S7525C7;
extern VTBL_ENTRY _ZTI7S7525C7[];
extern  VTBL_ENTRY _ZTV7S7525C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C7[];
extern Class_Descriptor cd_S7525C11;
extern VTBL_ENTRY _ZTI8S7525C11[];
extern  VTBL_ENTRY _ZTV8S7525C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C11[];
extern Class_Descriptor cd_S7525C2;
extern VTBL_ENTRY _ZTI7S7525C2[];
extern  VTBL_ENTRY _ZTV7S7525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C2[];
extern Class_Descriptor cd_S7525C13;
extern VTBL_ENTRY _ZTI8S7525C13[];
extern  VTBL_ENTRY _ZTV8S7525C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C13[];
extern Class_Descriptor cd_S7525C7;
extern VTBL_ENTRY _ZTI7S7525C7[];
extern  VTBL_ENTRY _ZTV7S7525C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C7[];
extern Class_Descriptor cd_S7525C12;
extern VTBL_ENTRY _ZTI8S7525C12[];
extern  VTBL_ENTRY _ZTV8S7525C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C12[];
extern Class_Descriptor cd_S7525C15;
extern VTBL_ENTRY _ZTI8S7525C15[];
extern  VTBL_ENTRY _ZTV8S7525C15[];
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C9;
extern VTBL_ENTRY _ZTI7S7525C9[];
extern  VTBL_ENTRY _ZTV7S7525C9[];
static Base_Class bases_S7525C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7525C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7525C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7525C2,    ABISELECT(664,416), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7525C3,    ABISELECT(712,440), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7525C8,    ABISELECT(712,440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7525C7,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7525C11,    ABISELECT(48,24), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7525C2,    ABISELECT(1024,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7525C13,    ABISELECT(1024,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7525C7,    ABISELECT(2000,1220), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7525C12,    ABISELECT(1024,624), //bcp->offset
    39, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7525C15,    ABISELECT(2440,1484), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7525C3,    ABISELECT(3344,2016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7525C9,    ABISELECT(3344,2016), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7525C10[];
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C103v13Ev();
extern void _ZN8S7525C10D1Ev();
extern void _ZN8S7525C10D0Ev();
extern void _ZN7S7525C72v5Ev();
extern void _ZN8S7525C112v6Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
extern void ABISELECT(_ZTv0_n96_N8S7525C10D1Ev,_ZTv0_n48_N8S7525C10D1Ev)();
extern void ABISELECT(_ZThn1024_N8S7525C10D1Ev,_ZThn624_N8S7525C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S7525C10D0Ev,_ZTv0_n48_N8S7525C10D0Ev)();
extern void ABISELECT(_ZThn1024_N8S7525C10D0Ev,_ZThn624_N8S7525C10D0Ev)() __attribute__((weak));
extern void _ZN8S7525C122v9Ev();
extern void _ZN7S7525C72v5Ev();
extern void _ZN8S7525C153v10Ev();
extern void _ZN8S7525C153v11Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C93v12Ev();
static  VTBL_ENTRY vtc_S7525C10[] = {
  ABISELECT(3344,2016),
  ABISELECT(2440,1484),
  ABISELECT(2000,1220),
  ABISELECT(1024,624),
  ABISELECT(712,440),
  ABISELECT(664,416),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C103v13Ev,
  (VTBL_ENTRY)&_ZN8S7525C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7525C10D0Ev,
  ABISELECT(-48,-24),
  ABISELECT(616,392),
  ABISELECT(664,416),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7525C112v6Ev,
  0,
  0,
  0,
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  0,
  ABISELECT(-712,-440),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  0,
  ABISELECT(-1024,-624),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-184),
  ABISELECT(976,596),
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7525C10D1Ev,_ZTv0_n48_N8S7525C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7525C10D0Ev,_ZTv0_n48_N8S7525C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7525C122v9Ev,
  0,
  ABISELECT(-1288,-780),
  ABISELECT(-2000,-1220),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
  0,
  0,
  ABISELECT(-2440,-1484),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN8S7525C153v10Ev,
  (VTBL_ENTRY)&_ZN8S7525C153v11Ev,
  0,
  0,
  ABISELECT(-3344,-2016),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C93v12Ev,
};
extern VTBL_ENTRY _ZTV8S7525C10[];
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C2__A__8S7525C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C72v5Ev();
extern void _ZN8S7525C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C11__8S7525C10[] = {
  ABISELECT(-48,-24),
  ABISELECT(616,392),
  ABISELECT(664,416),
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C11[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7525C112v6Ev,
};
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C78S7525C11__8S7525C10[] = {
  ABISELECT(664,416),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__7S7525C78S7525C11__8S7525C10[] = {
  0,
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C2__8S7525C11__8S7525C10[] = {
  0,
  0,
  0,
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  ABISELECT(-616,-392),
  (VTBL_ENTRY)&(_ZTI8S7525C11[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__8S7525C11__8S7525C10[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S7525C11[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__A1__8S7525C11__8S7525C10[] = {
  0,
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI8S7525C11[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C2__A1__8S7525C10[] = {
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__7S7525C2__A1__8S7525C10[] = {
  0,
  ABISELECT(664,416),
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
extern void _ZN8S7525C12D1Ev();
extern void _ZN8S7525C12D0Ev();
extern void _ZN8S7525C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C12__8S7525C10[] = {
  ABISELECT(-312,-184),
  ABISELECT(976,596),
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7525C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7525C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7525C122v9Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C138S7525C12__8S7525C10[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C13[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C28S7525C138S7525C12__A2__8S7525C10[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__7S7525C28S7525C138S7525C12__A2__8S7525C10[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__8S7525C138S7525C12__8S7525C10[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S7525C13[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__8S7525C12__8S7525C10[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C7__8S7525C12__8S7525C10[] = {
  0,
  ABISELECT(-1288,-780),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__A1__8S7525C12__8S7525C10[] = {
  0,
  ABISELECT(312,184),
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C7__A1__8S7525C10[] = {
  ABISELECT(-1288,-780),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__7S7525C7__A1__8S7525C10[] = {
  0,
  ABISELECT(1288,780),
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
static  VTT_ENTRY vtt_S7525C10[] = {
  {&(_ZTV8S7525C10[10]),  10,78},
  {&(_tg__ZTV7S7525C2__A__8S7525C10[4]),  4,8},
  {&(_tg__ZTV7S7525C2__A__8S7525C10[4]),  4,8},
  {&(_tg__ZTV8S7525C11__8S7525C10[5]),  5,7},
  {&(_tg__ZTV7S7525C78S7525C11__8S7525C10[3]),  3,4},
  {&(_tg__ZTV7S7525C37S7525C8__7S7525C78S7525C11__8S7525C10[3]),  3,4},
  {&(_tg__ZTV7S7525C2__8S7525C11__8S7525C10[7]),  7,11},
  {&(_tg__ZTV7S7525C3__8S7525C11__8S7525C10[3]),  3,4},
  {&(_tg__ZTV7S7525C37S7525C8__A1__8S7525C11__8S7525C10[3]),  3,4},
  {&(_ZTV8S7525C10[10]),  10,78},
  {&(_ZTV8S7525C10[22]),  22,78},
  {&(_ZTV8S7525C10[31]),  31,78},
  {&(_ZTV8S7525C10[38]),  38,78},
  {&(_ZTV8S7525C10[52]),  52,78},
  {&(_ZTV8S7525C10[65]),  65,78},
  {&(_ZTV8S7525C10[70]),  70,78},
  {&(_ZTV8S7525C10[76]),  76,78},
  {&(_tg__ZTV7S7525C2__A1__8S7525C10[4]),  4,8},
  {&(_tg__ZTV7S7525C3__7S7525C2__A1__8S7525C10[3]),  3,4},
  {&(_tg__ZTV8S7525C12__8S7525C10[6]),  6,15},
  {&(_tg__ZTV8S7525C138S7525C12__8S7525C10[4]),  4,10},
  {&(_tg__ZTV7S7525C28S7525C138S7525C12__A2__8S7525C10[4]),  4,8},
  {&(_tg__ZTV7S7525C3__7S7525C28S7525C138S7525C12__A2__8S7525C10[3]),  3,4},
  {&(_tg__ZTV7S7525C3__8S7525C138S7525C12__8S7525C10[3]),  3,4},
  {&(_tg__ZTV7S7525C3__8S7525C12__8S7525C10[3]),  3,4},
  {&(_tg__ZTV7S7525C7__8S7525C12__8S7525C10[4]),  4,5},
  {&(_tg__ZTV7S7525C37S7525C8__A1__8S7525C12__8S7525C10[3]),  3,4},
  {&(_tg__ZTV7S7525C7__A1__8S7525C10[3]),  3,4},
  {&(_tg__ZTV7S7525C37S7525C8__7S7525C7__A1__8S7525C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7525C10[];
extern  VTBL_ENTRY _ZTV8S7525C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C10[];
static VTBL_ENTRY alt_thunk_names63[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7525C10D0Ev,_ZTv0_n48_N8S7525C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S7525C10D0Ev,_ZThn624_N8S7525C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7525C10D1Ev,_ZTv0_n48_N8S7525C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S7525C10D1Ev,_ZThn624_N8S7525C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7525C10 = {  "S7525C10", // class name
  bases_S7525C10, 14,
  &(vtc_S7525C10[0]), // expected_vtbl_contents
  &(vtt_S7525C10[0]), // expected_vtt_contents
  ABISELECT(3696,2228), // object size
  NSPAIRA(_ZTI8S7525C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7525C10),78, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7525C10),29, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names63,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7525C16  : S7525C12 , S7525C9 {
  void *s7525c16f0;
  long s7525c16f1[2];
  __tsi64 s7525c16f2;
  int s7525c16f3;
  __tsi64 s7525c16f4;
  virtual  ~S7525C16(); // _ZN8S7525C16D2Ev
  virtual void  v14(); // _ZN8S7525C163v14Ev
  S7525C16(); // tgen
};
//SIG(-1 S7525C16) C1{ BC2{ VBC3{ v2} BC4{ BC5{ VBC3 v3 v4 v5 Fp[3] FC6{} Fp} v6 v7 Fp FC7{ BC8{ BC9{ v11} Fc[5] FC10{ VBC9 v12 v13 v14 Fp[3] FC6 Fp}[2] Fi Fp[7] FC10 FC9 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC9 VBC10 Fi Fp} Fi Fp Fi[2]} VBC11{ VBC12{ BC3 Fc[5] FC5[2] Fi Fp[7] FC5 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC3 FC13{ BC3 v10 Fc FL Fi[3] FC12} Fp Fi} vd v9 Fp[2] Fi[9] FC13 FC3[9] FL FD Fp FL Fl FL} BC13 vd v1 Fp Fl[2] FL Fi FL}


 S7525C16 ::~S7525C16(){ note_dtor("S7525C16", this);}
void  S7525C16 ::v14(){vfunc_called(this, "_ZN8S7525C163v14Ev");}
S7525C16 ::S7525C16(){ note_ctor("S7525C16", this);} // tgen

static void Test_S7525C16()
{
  extern Class_Descriptor cd_S7525C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(133,323)];
    init_test(&cd_S7525C16, buf);
    S7525C16 *dp, &lv = *(dp=new (buf) S7525C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2112,1288), "sizeof(S7525C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7525C16)");
    /*is_ambiguous_... S7525C12::S7525C3 */ AMB_check_base_class_offset(lv, (S7525C3*)(S7525C12*), 0, "S7525C16");
    check_base_class_offset(lv, (S7525C3*)(S7525C2*)(S7525C13*)(S7525C12*), 0, "S7525C16");
    check_base_class_offset(lv, (S7525C2*)(S7525C13*)(S7525C12*), 0, "S7525C16");
    check_base_class_offset(lv, (S7525C13*)(S7525C12*), 0, "S7525C16");
    check_base_class_offset(lv, (S7525C3*)(S7525C8*), ABISELECT(1808,1104), "S7525C16");
    check_base_class_offset(lv, (S7525C8*)(S7525C7*), ABISELECT(1808,1104), "S7525C16");
    check_base_class_offset(lv, (S7525C7*)(S7525C12*), ABISELECT(1368,840), "S7525C16");
    check_base_class_offset(lv, (S7525C12*), 0, "S7525C16");
    check_base_class_offset(lv, (S7525C3*)(S7525C9*), ABISELECT(976,596), "S7525C16");
    check_base_class_offset(lv, (S7525C9*), ABISELECT(976,596), "S7525C16");
    check_field_offset(lv, s7525c16f0, ABISELECT(1320,808), "S7525C16.s7525c16f0");
    check_field_offset(lv, s7525c16f1, ABISELECT(1328,812), "S7525C16.s7525c16f1");
    check_field_offset(lv, s7525c16f2, ABISELECT(1344,820), "S7525C16.s7525c16f2");
    check_field_offset(lv, s7525c16f3, ABISELECT(1352,828), "S7525C16.s7525c16f3");
    check_field_offset(lv, s7525c16f4, ABISELECT(1360,832), "S7525C16.s7525c16f4");
    test_class_info(&lv, &cd_S7525C16);
    dp->~S7525C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7525C16(Test_S7525C16, "S7525C16", ABISELECT(2112,1288));

#else // __cplusplus

extern void _ZN8S7525C16C1Ev();
extern void _ZN8S7525C16D2Ev();
Name_Map name_map_S7525C16[] = {
  NSPAIR(_ZN8S7525C16C1Ev),
  NSPAIR(_ZN8S7525C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C2;
extern VTBL_ENTRY _ZTI7S7525C2[];
extern  VTBL_ENTRY _ZTV7S7525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C2[];
extern Class_Descriptor cd_S7525C13;
extern VTBL_ENTRY _ZTI8S7525C13[];
extern  VTBL_ENTRY _ZTV8S7525C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C13[];
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C8;
extern VTBL_ENTRY _ZTI7S7525C8[];
extern  VTBL_ENTRY _ZTV7S7525C8[];
extern Class_Descriptor cd_S7525C7;
extern VTBL_ENTRY _ZTI7S7525C7[];
extern  VTBL_ENTRY _ZTV7S7525C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C7[];
extern Class_Descriptor cd_S7525C12;
extern VTBL_ENTRY _ZTI8S7525C12[];
extern  VTBL_ENTRY _ZTV8S7525C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C12[];
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C9;
extern VTBL_ENTRY _ZTI7S7525C9[];
extern  VTBL_ENTRY _ZTV7S7525C9[];
static Base_Class bases_S7525C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7525C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7525C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7525C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7525C3,    ABISELECT(1808,1104), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7525C8,    ABISELECT(1808,1104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7525C7,    ABISELECT(1368,840), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7525C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7525C3,    ABISELECT(976,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7525C9,    ABISELECT(976,596), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7525C16[];
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
extern void _ZN8S7525C16D1Ev();
extern void _ZN8S7525C16D0Ev();
extern void _ZN8S7525C122v9Ev();
extern void _ZN8S7525C163v14Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C93v12Ev();
extern void _ZN7S7525C72v5Ev();
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY vtc_S7525C16[] = {
  ABISELECT(1808,1104),
  ABISELECT(1368,840),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C16[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7525C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7525C16D0Ev,
  (VTBL_ENTRY)&_ZN8S7525C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7525C163v14Ev,
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S7525C16[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C93v12Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-1368,-840),
  (VTBL_ENTRY)&(_ZTI8S7525C16[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
  0,
  ABISELECT(-1808,-1104),
  (VTBL_ENTRY)&(_ZTI8S7525C16[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern VTBL_ENTRY _ZTV8S7525C16[];
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
extern void _ZN8S7525C12D1Ev();
extern void _ZN8S7525C12D0Ev();
extern void _ZN8S7525C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C12__8S7525C16[] = {
  ABISELECT(1808,1104),
  ABISELECT(1368,840),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7525C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7525C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7525C122v9Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C138S7525C12__8S7525C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C13[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C28S7525C138S7525C12__8S7525C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C7__8S7525C12__8S7525C16[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-1368,-840),
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__A1__8S7525C12__8S7525C16[] = {
  0,
  ABISELECT(-1808,-1104),
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C7__8S7525C16[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__7S7525C7__8S7525C16[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
static  VTT_ENTRY vtt_S7525C16[] = {
  {&(_ZTV8S7525C16[6]),  6,29},
  {&(_tg__ZTV8S7525C12__8S7525C16[6]),  6,15},
  {&(_tg__ZTV8S7525C138S7525C12__8S7525C16[4]),  4,10},
  {&(_tg__ZTV7S7525C28S7525C138S7525C12__8S7525C16[4]),  4,8},
  {&(_tg__ZTV7S7525C28S7525C138S7525C12__8S7525C16[4]),  4,8},
  {&(_tg__ZTV8S7525C138S7525C12__8S7525C16[4]),  4,10},
  {&(_tg__ZTV8S7525C12__8S7525C16[6]),  6,15},
  {&(_tg__ZTV7S7525C7__8S7525C12__8S7525C16[4]),  4,5},
  {&(_tg__ZTV7S7525C37S7525C8__A1__8S7525C12__8S7525C16[3]),  3,4},
  {&(_ZTV8S7525C16[6]),  6,29},
  {&(_ZTV8S7525C16[24]),  24,29},
  {&(_ZTV8S7525C16[28]),  28,29},
  {&(_tg__ZTV7S7525C7__8S7525C16[3]),  3,4},
  {&(_tg__ZTV7S7525C37S7525C8__7S7525C7__8S7525C16[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7525C16[];
extern  VTBL_ENTRY _ZTV8S7525C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C16[];
Class_Descriptor cd_S7525C16 = {  "S7525C16", // class name
  bases_S7525C16, 9,
  &(vtc_S7525C16[0]), // expected_vtbl_contents
  &(vtt_S7525C16[0]), // expected_vtt_contents
  ABISELECT(2112,1288), // object size
  NSPAIRA(_ZTI8S7525C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7525C16),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7525C16),14, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S7525C17  {
  long double s7525c17f0;
  int s7525c17f1;
  int s7525c17f2[3];
  char s7525c17f3;
  char s7525c17f4[2];
  __tsi64 s7525c17f5;
  void  mf7525c17(); // _ZN8S7525C179mf7525c17Ev
};
//SIG(1 S7525C17) U1{ m FD Fi Fi[3] Fc Fc[2] FL}

#endif // __cplusplus
#ifdef __cplusplus

struct  S7525C6  : virtual S7525C7 , virtual S7525C10 , virtual S7525C16 {
  short s7525c6f0;
  ::S7525C17 s7525c6f1;
  int s7525c6f2[9];
  virtual  ~S7525C6(); // _ZN7S7525C6D2Ev
  virtual void  v15(); // _ZN7S7525C63v15Ev
  virtual void  v16(); // _ZN7S7525C63v16Ev
  S7525C6(); // tgen
};
//SIG(-1 S7525C6) C1{ VBC2{ VBC3{ BC4{ v3} Fc[5] FC5{ VBC4 v5 v6 v7 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v4 Fp FL Fp[6] FC4 FC7{ BC4 v14 Fc FL Fi[3] FC3} Fp Fi} VBC8{ BC5 BC9{ VBC5 BC2 v8 Fp FC4 FL[8] FC5 Fp} VBC10{ VBC4 BC11{ BC5 v9 v10 Fp FC12{ BC13{ BC14{ v17} Fc[5] FC15{ VBC14 v18 v19 v20 Fp[3] FC6 Fp}[2] Fi Fp[7] FC15 FC14 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC14 VBC15 Fi Fp} Fi Fp Fi[2]} VBC2 vd v11 Fp[2] Fi[9] FC7 FC4[9] FL FD Fp FL Fl FL} VBC16{ v12 v13 Fp[2] Fi[2] Fp[15] Fi FC2} VBC7 v15 Fs FC6 Fc Fp[2] Fi[2] FL} VBC17{ BC10 BC7 vd v16 Fp Fl[2] FL Fi FL} vd v1 v2 Fs FU18{ m FD Fi Fi[3] Fc Fc[2] FL} Fi[9]}


 S7525C6 ::~S7525C6(){ note_dtor("S7525C6", this);}
void  S7525C6 ::v15(){vfunc_called(this, "_ZN7S7525C63v15Ev");}
void  S7525C6 ::v16(){vfunc_called(this, "_ZN7S7525C63v16Ev");}
S7525C6 ::S7525C6(){ note_ctor("S7525C6", this);} // tgen

static void Test_S7525C6()
{
  extern Class_Descriptor cd_S7525C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(322,782)];
    init_test(&cd_S7525C6, buf);
    S7525C6 *dp, &lv = *(dp=new (buf) S7525C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5136,3124), "sizeof(S7525C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7525C6)");
    check_base_class_offset(lv, (S7525C3*)(S7525C8*), ABISELECT(512,320), "S7525C6");
    /*is_ambiguous_... S7525C6::S7525C7 */ AMB_check_base_class_offset(lv, (S7525C8*)(S7525C7*), ABISELECT(512,320), "S7525C6");
    check_base_class_offset(lv, (S7525C8*)(S7525C7*)(S7525C11*)(S7525C10*), ABISELECT(512,320), "S7525C6");
    /*is_ambiguous_... S7525C6::S7525C7 */ AMB_check_base_class_offset(lv, (S7525C7*), ABISELECT(72,56), "S7525C6");
    /*is_ambiguous_... S7525C6::S7525C12 */ AMB_check_base_class_offset(lv, (S7525C7*)(S7525C12*), ABISELECT(72,56), "S7525C6");
    check_base_class_offset(lv, (S7525C7*)(S7525C12*)(S7525C16*), ABISELECT(72,56), "S7525C6");
    /*is_ambiguous_... S7525C10::S7525C2 */ AMB_check_base_class_offset(lv, (S7525C3*)(S7525C2*)(S7525C10*), 0, "S7525C6");
    /*is_ambiguous_... S7525C6::S7525C2 */ AMB_check_base_class_offset(lv, (S7525C3*)(S7525C2*), 0, "S7525C6");
    /*is_ambiguous_... S7525C6::S7525C12 */ AMB_check_base_class_offset(lv, (S7525C3*)(S7525C12*), 0, "S7525C6");
    /*is_ambiguous_... S7525C6::S7525C12 */ AMB_check_base_class_offset(lv, (S7525C3*)(S7525C2*)(S7525C13*)(S7525C12*), 0, "S7525C6");
    /*is_ambiguous_... S7525C12::S7525C3 */ AMB_check_base_class_offset(lv, (S7525C3*)(S7525C12*)(S7525C16*), 0, "S7525C6");
    check_base_class_offset(lv, (S7525C3*)(S7525C2*)(S7525C13*)(S7525C12*)(S7525C16*), 0, "S7525C6");
    /*is_ambiguous_... S7525C10::S7525C2 */ AMB_check_base_class_offset(lv, (S7525C2*)(S7525C10*), ABISELECT(816,504), "S7525C6");
    check_base_class_offset(lv, (S7525C2*)(S7525C11*)(S7525C10*), ABISELECT(1480,920), "S7525C6");
    check_base_class_offset(lv, (S7525C7*)(S7525C11*)(S7525C10*), ABISELECT(864,528), "S7525C6");
    check_base_class_offset(lv, (S7525C11*)(S7525C10*), ABISELECT(864,528), "S7525C6");
    /*is_ambiguous_... S7525C6::S7525C12 */ AMB_check_base_class_offset(lv, (S7525C2*)(S7525C13*)(S7525C12*), ABISELECT(1536,944), "S7525C6");
    /*is_ambiguous_... S7525C6::S7525C12 */ AMB_check_base_class_offset(lv, (S7525C13*)(S7525C12*), ABISELECT(1536,944), "S7525C6");
    check_base_class_offset(lv, (S7525C12*)(S7525C10*), ABISELECT(1536,944), "S7525C6");
    check_base_class_offset(lv, (S7525C15*)(S7525C10*), ABISELECT(2512,1540), "S7525C6");
    /*is_ambiguous_... S7525C6::S7525C9 */ AMB_check_base_class_offset(lv, (S7525C3*)(S7525C9*), ABISELECT(3416,2072), "S7525C6");
    check_base_class_offset(lv, (S7525C9*)(S7525C10*), ABISELECT(3416,2072), "S7525C6");
    check_base_class_offset(lv, (S7525C10*), ABISELECT(816,504), "S7525C6");
    check_base_class_offset(lv, (S7525C2*)(S7525C13*)(S7525C12*)(S7525C16*), ABISELECT(3760,2284), "S7525C6");
    check_base_class_offset(lv, (S7525C13*)(S7525C12*)(S7525C16*), ABISELECT(3760,2284), "S7525C6");
    check_base_class_offset(lv, (S7525C12*)(S7525C16*), ABISELECT(3760,2284), "S7525C6");
    check_base_class_offset(lv, (S7525C3*)(S7525C9*)(S7525C16*), ABISELECT(4736,2880), "S7525C6");
    check_base_class_offset(lv, (S7525C9*)(S7525C16*), ABISELECT(4736,2880), "S7525C6");
    check_base_class_offset(lv, (S7525C16*), ABISELECT(3760,2284), "S7525C6");
    check_field_offset(lv, s7525c6f0, ABISELECT(8,4), "S7525C6.s7525c6f0");
    check_field_offset(lv, s7525c6f1, ABISELECT(16,8), "S7525C6.s7525c6f1");
    check_field_offset(lv, s7525c6f2, ABISELECT(32,20), "S7525C6.s7525c6f2");
    test_class_info(&lv, &cd_S7525C6);
    dp->~S7525C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7525C6(Test_S7525C6, "S7525C6", ABISELECT(5136,3124));

#else // __cplusplus

extern void _ZN7S7525C6C1Ev();
extern void _ZN7S7525C6D2Ev();
Name_Map name_map_S7525C6[] = {
  NSPAIR(_ZN7S7525C6C1Ev),
  NSPAIR(_ZN7S7525C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C8;
extern VTBL_ENTRY _ZTI7S7525C8[];
extern  VTBL_ENTRY _ZTV7S7525C8[];
extern Class_Descriptor cd_S7525C7;
extern VTBL_ENTRY _ZTI7S7525C7[];
extern  VTBL_ENTRY _ZTV7S7525C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C7[];
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C2;
extern VTBL_ENTRY _ZTI7S7525C2[];
extern  VTBL_ENTRY _ZTV7S7525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C2[];
extern Class_Descriptor cd_S7525C2;
extern VTBL_ENTRY _ZTI7S7525C2[];
extern  VTBL_ENTRY _ZTV7S7525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C2[];
extern Class_Descriptor cd_S7525C7;
extern VTBL_ENTRY _ZTI7S7525C7[];
extern  VTBL_ENTRY _ZTV7S7525C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C7[];
extern Class_Descriptor cd_S7525C11;
extern VTBL_ENTRY _ZTI8S7525C11[];
extern  VTBL_ENTRY _ZTV8S7525C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C11[];
extern Class_Descriptor cd_S7525C2;
extern VTBL_ENTRY _ZTI7S7525C2[];
extern  VTBL_ENTRY _ZTV7S7525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C2[];
extern Class_Descriptor cd_S7525C13;
extern VTBL_ENTRY _ZTI8S7525C13[];
extern  VTBL_ENTRY _ZTV8S7525C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C13[];
extern Class_Descriptor cd_S7525C12;
extern VTBL_ENTRY _ZTI8S7525C12[];
extern  VTBL_ENTRY _ZTV8S7525C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C12[];
extern Class_Descriptor cd_S7525C15;
extern VTBL_ENTRY _ZTI8S7525C15[];
extern  VTBL_ENTRY _ZTV8S7525C15[];
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C9;
extern VTBL_ENTRY _ZTI7S7525C9[];
extern  VTBL_ENTRY _ZTV7S7525C9[];
extern Class_Descriptor cd_S7525C10;
extern VTBL_ENTRY _ZTI8S7525C10[];
extern  VTBL_ENTRY _ZTV8S7525C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C10[];
extern Class_Descriptor cd_S7525C2;
extern VTBL_ENTRY _ZTI7S7525C2[];
extern  VTBL_ENTRY _ZTV7S7525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C2[];
extern Class_Descriptor cd_S7525C13;
extern VTBL_ENTRY _ZTI8S7525C13[];
extern  VTBL_ENTRY _ZTV8S7525C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C13[];
extern Class_Descriptor cd_S7525C12;
extern VTBL_ENTRY _ZTI8S7525C12[];
extern  VTBL_ENTRY _ZTV8S7525C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C12[];
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C9;
extern VTBL_ENTRY _ZTI7S7525C9[];
extern  VTBL_ENTRY _ZTV7S7525C9[];
extern Class_Descriptor cd_S7525C16;
extern VTBL_ENTRY _ZTI8S7525C16[];
extern  VTBL_ENTRY _ZTV8S7525C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C16[];
static Base_Class bases_S7525C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7525C3,    ABISELECT(512,320), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7525C8,    ABISELECT(512,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7525C7,    ABISELECT(72,56), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7525C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7525C2,    ABISELECT(816,504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7525C2,    ABISELECT(1480,920), //bcp->offset
    57, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7525C7,    ABISELECT(864,528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7525C11,    ABISELECT(864,528), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7525C2,    ABISELECT(1536,944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7525C13,    ABISELECT(1536,944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7525C12,    ABISELECT(1536,944), //bcp->offset
    68, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7525C15,    ABISELECT(2512,1540), //bcp->offset
    90, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7525C3,    ABISELECT(3416,2072), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7525C9,    ABISELECT(3416,2072), //bcp->offset
    96, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7525C10,    ABISELECT(816,504), //bcp->offset
    26, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7525C2,    ABISELECT(3760,2284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7525C13,    ABISELECT(3760,2284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7525C12,    ABISELECT(3760,2284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7525C3,    ABISELECT(4736,2880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7525C9,    ABISELECT(4736,2880), //bcp->offset
    127, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7525C16,    ABISELECT(3760,2284), //bcp->offset
    102, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7525C6[];
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C6D1Ev();
extern void _ZN7S7525C6D0Ev();
extern void _ZN7S7525C63v15Ev();
extern void _ZN7S7525C63v16Ev();
extern void _ZN7S7525C72v5Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C103v13Ev();
extern void ABISELECT(_ZTv0_n120_N7S7525C6D1Ev,_ZTv0_n60_N7S7525C6D1Ev)();
extern void ABISELECT(_ZThn816_N7S7525C6D1Ev,_ZThn504_N7S7525C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S7525C6D0Ev,_ZTv0_n60_N7S7525C6D0Ev)();
extern void ABISELECT(_ZThn816_N7S7525C6D0Ev,_ZThn504_N7S7525C6D0Ev)() __attribute__((weak));
extern void _ZN7S7525C72v5Ev();
extern void _ZN8S7525C112v6Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
extern void ABISELECT(_ZTv0_n96_N7S7525C6D1Ev,_ZTv0_n48_N7S7525C6D1Ev)();
extern void ABISELECT(_ZThn1536_N7S7525C6D1Ev,_ZThn944_N7S7525C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7525C6D0Ev,_ZTv0_n48_N7S7525C6D0Ev)();
extern void ABISELECT(_ZThn1536_N7S7525C6D0Ev,_ZThn944_N7S7525C6D0Ev)() __attribute__((weak));
extern void _ZN8S7525C122v9Ev();
extern void _ZN8S7525C153v10Ev();
extern void _ZN8S7525C153v11Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C93v12Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
extern void ABISELECT(_ZTv0_n96_N7S7525C6D1Ev,_ZTv0_n48_N7S7525C6D1Ev)();
extern void ABISELECT(_ZThn3760_N7S7525C6D1Ev,_ZThn2284_N7S7525C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7525C6D0Ev,_ZTv0_n48_N7S7525C6D0Ev)();
extern void ABISELECT(_ZThn3760_N7S7525C6D0Ev,_ZThn2284_N7S7525C6D0Ev)() __attribute__((weak));
extern void _ZN8S7525C122v9Ev();
extern void _ZN8S7525C163v14Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C93v12Ev();
static  VTBL_ENTRY vtc_S7525C6[] = {
  ABISELECT(3760,2284),
  ABISELECT(3416,2072),
  ABISELECT(2512,1540),
  ABISELECT(1536,944),
  ABISELECT(1480,920),
  0,
  ABISELECT(816,504),
  ABISELECT(512,320),
  ABISELECT(72,56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7525C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7525C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7525C63v16Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-72,-56),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
  0,
  ABISELECT(-512,-320),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-816,-504),
  0,
  0,
  0,
  0,
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-816,-504),
  ABISELECT(-816,-504),
  ABISELECT(-816,-504),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C103v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7525C6D1Ev,_ZTv0_n60_N7S7525C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7525C6D0Ev,_ZTv0_n60_N7S7525C6D0Ev),
  ABISELECT(-864,-528),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-864,-528),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7525C112v6Ev,
  0,
  0,
  0,
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  0,
  ABISELECT(-1536,-944),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7525C6D1Ev,_ZTv0_n48_N7S7525C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7525C6D0Ev,_ZTv0_n48_N7S7525C6D0Ev),
  (VTBL_ENTRY)&_ZN8S7525C122v9Ev,
  0,
  0,
  ABISELECT(-2512,-1540),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN8S7525C153v10Ev,
  (VTBL_ENTRY)&_ZN8S7525C153v11Ev,
  0,
  0,
  ABISELECT(-3416,-2072),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C93v12Ev,
  ABISELECT(976,596),
  0,
  0,
  ABISELECT(-3760,-2284),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7525C6D1Ev,_ZTv0_n48_N7S7525C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7525C6D0Ev,_ZTv0_n48_N7S7525C6D0Ev),
  (VTBL_ENTRY)&_ZN8S7525C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7525C163v14Ev,
  ABISELECT(-4736,-2880),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C93v12Ev,
};
extern VTBL_ENTRY _ZTV7S7525C6[];
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C7__7S7525C6[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__7S7525C7__7S7525C6[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C103v13Ev();
extern void _ZN8S7525C10D1Ev();
extern void _ZN8S7525C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C10__7S7525C6[] = {
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-816,-504),
  ABISELECT(-816,-504),
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C103v13Ev,
  (VTBL_ENTRY)&_ZN8S7525C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7525C10D0Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C28S7525C10__7S7525C6[] = {
  ABISELECT(-816,-504),
  ABISELECT(-816,-504),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__7S7525C28S7525C10__7S7525C6[] = {
  0,
  ABISELECT(816,504),
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C72v5Ev();
extern void _ZN8S7525C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C118S7525C10__7S7525C6[] = {
  ABISELECT(-864,-528),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C11[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7525C112v6Ev,
};
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C78S7525C118S7525C10__A1__7S7525C6[] = {
  ABISELECT(-352,-208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__7S7525C78S7525C118S7525C10__A1__7S7525C6[] = {
  0,
  ABISELECT(352,208),
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C2__8S7525C118S7525C10__7S7525C6[] = {
  0,
  0,
  0,
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  ABISELECT(-616,-392),
  (VTBL_ENTRY)&(_ZTI8S7525C11[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__8S7525C118S7525C10__7S7525C6[] = {
  0,
  ABISELECT(864,528),
  (VTBL_ENTRY)&(_ZTI8S7525C11[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__A1__8S7525C118S7525C10__7S7525C6[] = {
  0,
  ABISELECT(352,208),
  (VTBL_ENTRY)&(_ZTI8S7525C11[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__8S7525C10__7S7525C6[] = {
  0,
  ABISELECT(816,504),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C72v5Ev();
extern void _ZN8S7525C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C11__8S7525C10__7S7525C6[] = {
  ABISELECT(-864,-528),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7525C112v6Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C2__A1__8S7525C10__7S7525C6[] = {
  0,
  0,
  0,
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__A1__8S7525C10__7S7525C6[] = {
  0,
  ABISELECT(304,184),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
extern void ABISELECT(_ZTv0_n96_N8S7525C10D1Ev,_ZTv0_n48_N8S7525C10D1Ev)();
extern void ABISELECT(_ZThn720_N8S7525C10D1Ev,_ZThn440_N8S7525C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S7525C10D0Ev,_ZTv0_n48_N8S7525C10D0Ev)();
extern void ABISELECT(_ZThn720_N8S7525C10D0Ev,_ZThn440_N8S7525C10D0Ev)() __attribute__((weak));
extern void _ZN8S7525C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C12__8S7525C10__7S7525C6[] = {
  0,
  ABISELECT(-720,-440),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  ABISELECT(-720,-440),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7525C10D1Ev,_ZTv0_n48_N8S7525C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7525C10D0Ev,_ZTv0_n48_N8S7525C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7525C122v9Ev,
};
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C7__A1__8S7525C10__7S7525C6[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(744,448),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN8S7525C153v10Ev();
extern void _ZN8S7525C153v11Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C15__8S7525C10__7S7525C6[] = {
  0,
  0,
  ABISELECT(-1696,-1036),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN8S7525C153v10Ev,
  (VTBL_ENTRY)&_ZN8S7525C153v11Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C93v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C9__8S7525C10__7S7525C6[] = {
  0,
  0,
  ABISELECT(-2600,-1568),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C93v12Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C2__A1__7S7525C6[] = {
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__7S7525C2__A1__7S7525C6[] = {
  0,
  ABISELECT(1480,920),
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
extern void _ZN8S7525C12D1Ev();
extern void _ZN8S7525C12D0Ev();
extern void _ZN8S7525C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C12__7S7525C6[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7525C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7525C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7525C122v9Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C138S7525C12__7S7525C6[] = {
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C13[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C28S7525C138S7525C12__A2__7S7525C6[] = {
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__7S7525C28S7525C138S7525C12__A2__7S7525C6[] = {
  0,
  ABISELECT(1536,944),
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__8S7525C138S7525C12__7S7525C6[] = {
  0,
  ABISELECT(1536,944),
  (VTBL_ENTRY)&(_ZTI8S7525C13[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__8S7525C12__7S7525C6[] = {
  0,
  ABISELECT(1536,944),
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C7__8S7525C12__7S7525C6[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(1464,888),
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__A1__8S7525C12__7S7525C6[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
extern void _ZN8S7525C16D1Ev();
extern void _ZN8S7525C16D0Ev();
extern void _ZN8S7525C122v9Ev();
extern void _ZN8S7525C163v14Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C16__7S7525C6[] = {
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C16[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7525C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7525C16D0Ev,
  (VTBL_ENTRY)&_ZN8S7525C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7525C163v14Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
extern void _ZN8S7525C12D1Ev();
extern void _ZN8S7525C12D0Ev();
extern void _ZN8S7525C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C128S7525C16__A1__7S7525C6[] = {
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7525C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7525C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7525C122v9Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C138S7525C128S7525C16__A1__7S7525C6[] = {
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C13[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C28S7525C138S7525C128S7525C16__A3__7S7525C6[] = {
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__7S7525C28S7525C138S7525C128S7525C16__A3__7S7525C6[] = {
  0,
  ABISELECT(3760,2284),
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__8S7525C138S7525C128S7525C16__A1__7S7525C6[] = {
  0,
  ABISELECT(3760,2284),
  (VTBL_ENTRY)&(_ZTI8S7525C13[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__8S7525C128S7525C16__A1__7S7525C6[] = {
  0,
  ABISELECT(3760,2284),
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C7__8S7525C128S7525C16__A1__7S7525C6[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(3688,2228),
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__A1__8S7525C128S7525C16__A1__7S7525C6[] = {
  0,
  ABISELECT(3248,1964),
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__8S7525C16__7S7525C6[] = {
  0,
  ABISELECT(3760,2284),
  (VTBL_ENTRY)&(_ZTI8S7525C16[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C7__8S7525C16__7S7525C6[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(3688,2228),
  (VTBL_ENTRY)&(_ZTI8S7525C16[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__A1__8S7525C16__7S7525C6[] = {
  0,
  ABISELECT(3248,1964),
  (VTBL_ENTRY)&(_ZTI8S7525C16[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
static  VTT_ENTRY vtt_S7525C6[] = {
  {&(_ZTV7S7525C6[12]),  12,131},
  {&(_ZTV7S7525C6[21]),  21,131},
  {&(_ZTV7S7525C6[25]),  25,131},
  {&(_ZTV7S7525C6[43]),  43,131},
  {&(_ZTV7S7525C6[12]),  12,131},
  {&(_ZTV7S7525C6[55]),  55,131},
  {&(_ZTV7S7525C6[64]),  64,131},
  {&(_ZTV7S7525C6[81]),  81,131},
  {&(_ZTV7S7525C6[94]),  94,131},
  {&(_ZTV7S7525C6[100]),  100,131},
  {&(_ZTV7S7525C6[117]),  117,131},
  {&(_ZTV7S7525C6[129]),  129,131},
  {&(_tg__ZTV7S7525C7__7S7525C6[3]),  3,4},
  {&(_tg__ZTV7S7525C37S7525C8__7S7525C7__7S7525C6[3]),  3,4},
  {&(_tg__ZTV8S7525C10__7S7525C6[10]),  10,17},
  {&(_tg__ZTV7S7525C28S7525C10__7S7525C6[4]),  4,8},
  {&(_tg__ZTV7S7525C3__7S7525C28S7525C10__7S7525C6[3]),  3,4},
  {&(_tg__ZTV8S7525C118S7525C10__7S7525C6[5]),  5,7},
  {&(_tg__ZTV7S7525C78S7525C118S7525C10__A1__7S7525C6[3]),  3,4},
  {&(_tg__ZTV7S7525C37S7525C8__7S7525C78S7525C118S7525C10__A1__7S7525C6[3]),  3,4},
  {&(_tg__ZTV7S7525C2__8S7525C118S7525C10__7S7525C6[7]),  7,11},
  {&(_tg__ZTV7S7525C3__8S7525C118S7525C10__7S7525C6[3]),  3,4},
  {&(_tg__ZTV7S7525C37S7525C8__A1__8S7525C118S7525C10__7S7525C6[3]),  3,4},
  {&(_tg__ZTV7S7525C3__8S7525C10__7S7525C6[3]),  3,4},
  {&(_tg__ZTV8S7525C11__8S7525C10__7S7525C6[5]),  5,7},
  {&(_tg__ZTV7S7525C2__A1__8S7525C10__7S7525C6[7]),  7,11},
  {&(_tg__ZTV7S7525C37S7525C8__A1__8S7525C10__7S7525C6[3]),  3,4},
  {&(_tg__ZTV8S7525C12__8S7525C10__7S7525C6[13]),  13,22},
  {&(_tg__ZTV7S7525C7__A1__8S7525C10__7S7525C6[4]),  4,5},
  {&(_tg__ZTV8S7525C15__8S7525C10__7S7525C6[4]),  4,6},
  {&(_tg__ZTV7S7525C9__8S7525C10__7S7525C6[4]),  4,6},
  {&(_tg__ZTV7S7525C2__A1__7S7525C6[4]),  4,8},
  {&(_tg__ZTV7S7525C3__7S7525C2__A1__7S7525C6[3]),  3,4},
  {&(_tg__ZTV8S7525C12__7S7525C6[6]),  6,15},
  {&(_tg__ZTV8S7525C138S7525C12__7S7525C6[4]),  4,10},
  {&(_tg__ZTV7S7525C28S7525C138S7525C12__A2__7S7525C6[4]),  4,8},
  {&(_tg__ZTV7S7525C3__7S7525C28S7525C138S7525C12__A2__7S7525C6[3]),  3,4},
  {&(_tg__ZTV7S7525C3__8S7525C138S7525C12__7S7525C6[3]),  3,4},
  {&(_tg__ZTV7S7525C3__8S7525C12__7S7525C6[3]),  3,4},
  {&(_tg__ZTV7S7525C7__8S7525C12__7S7525C6[4]),  4,5},
  {&(_tg__ZTV7S7525C37S7525C8__A1__8S7525C12__7S7525C6[3]),  3,4},
  {&(_tg__ZTV8S7525C16__7S7525C6[6]),  6,16},
  {&(_tg__ZTV8S7525C128S7525C16__A1__7S7525C6[6]),  6,15},
  {&(_tg__ZTV8S7525C138S7525C128S7525C16__A1__7S7525C6[4]),  4,10},
  {&(_tg__ZTV7S7525C28S7525C138S7525C128S7525C16__A3__7S7525C6[4]),  4,8},
  {&(_tg__ZTV7S7525C3__7S7525C28S7525C138S7525C128S7525C16__A3__7S7525C6[3]),  3,4},
  {&(_tg__ZTV7S7525C3__8S7525C138S7525C128S7525C16__A1__7S7525C6[3]),  3,4},
  {&(_tg__ZTV7S7525C3__8S7525C128S7525C16__A1__7S7525C6[3]),  3,4},
  {&(_tg__ZTV7S7525C7__8S7525C128S7525C16__A1__7S7525C6[4]),  4,5},
  {&(_tg__ZTV7S7525C37S7525C8__A1__8S7525C128S7525C16__A1__7S7525C6[3]),  3,4},
  {&(_tg__ZTV7S7525C3__8S7525C16__7S7525C6[3]),  3,4},
  {&(_tg__ZTV7S7525C7__8S7525C16__7S7525C6[4]),  4,5},
  {&(_tg__ZTV7S7525C37S7525C8__A1__8S7525C16__7S7525C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7525C6[];
extern  VTBL_ENTRY _ZTV7S7525C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C6[];
static VTBL_ENTRY alt_thunk_names64[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7525C10D0Ev,_ZTv0_n48_N8S7525C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S7525C10D0Ev,_ZThn440_N8S7525C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7525C10D1Ev,_ZTv0_n48_N8S7525C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S7525C10D1Ev,_ZThn440_N8S7525C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7525C6D0Ev,_ZTv0_n48_N7S7525C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3760_N7S7525C6D0Ev,_ZThn2284_N7S7525C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N7S7525C6D0Ev,_ZThn944_N7S7525C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7525C6D1Ev,_ZTv0_n48_N7S7525C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3760_N7S7525C6D1Ev,_ZThn2284_N7S7525C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N7S7525C6D1Ev,_ZThn944_N7S7525C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7525C6D0Ev,_ZTv0_n60_N7S7525C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N7S7525C6D0Ev,_ZThn504_N7S7525C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7525C6D1Ev,_ZTv0_n60_N7S7525C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N7S7525C6D1Ev,_ZThn504_N7S7525C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7525C6 = {  "S7525C6", // class name
  bases_S7525C6, 21,
  &(vtc_S7525C6[0]), // expected_vtbl_contents
  &(vtt_S7525C6[0]), // expected_vtt_contents
  ABISELECT(5136,3124), // object size
  NSPAIRA(_ZTI7S7525C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7525C6),131, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7525C6),53, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names64,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7525C18  {
  void *s7525c18f0;
  void *s7525c18f1;
  char s7525c18f2;
  char s7525c18f3[9];
  long s7525c18f4;
  long double s7525c18f5;
  __tsi64 s7525c18f6:8;
  void *s7525c18f7;
  long double s7525c18f8;
  virtual void  v17(); // _ZN8S7525C183v17Ev
  ~S7525C18(); // tgen
  S7525C18(); // tgen
};
//SIG(-1 S7525C18) C1{ v1 Fp[2] Fc[10] Fl FD FL:8 Fp FD}


void  S7525C18 ::v17(){vfunc_called(this, "_ZN8S7525C183v17Ev");}
S7525C18 ::~S7525C18(){ note_dtor("S7525C18", this);} // tgen
S7525C18 ::S7525C18(){ note_ctor("S7525C18", this);} // tgen

static void Test_S7525C18()
{
  extern Class_Descriptor cd_S7525C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,16)];
    init_test(&cd_S7525C18, buf);
    S7525C18 *dp, &lv = *(dp=new (buf) S7525C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S7525C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7525C18)");
    check_field_offset(lv, s7525c18f0, ABISELECT(8,4), "S7525C18.s7525c18f0");
    check_field_offset(lv, s7525c18f1, ABISELECT(16,8), "S7525C18.s7525c18f1");
    check_field_offset(lv, s7525c18f2, ABISELECT(24,12), "S7525C18.s7525c18f2");
    check_field_offset(lv, s7525c18f3, ABISELECT(25,13), "S7525C18.s7525c18f3");
    check_field_offset(lv, s7525c18f4, ABISELECT(40,24), "S7525C18.s7525c18f4");
    check_field_offset(lv, s7525c18f5, ABISELECT(48,28), "S7525C18.s7525c18f5");
    set_bf_and_test(lv, s7525c18f6, ABISELECT(64,40), 0, 8, 1, "S7525C18");
    set_bf_and_test(lv, s7525c18f6, ABISELECT(64,40), 0, 8, hide_sll(1LL<<7), "S7525C18");
    check_field_offset(lv, s7525c18f7, ABISELECT(72,44), "S7525C18.s7525c18f7");
    check_field_offset(lv, s7525c18f8, ABISELECT(80,48), "S7525C18.s7525c18f8");
    test_class_info(&lv, &cd_S7525C18);
    dp->~S7525C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7525C18(Test_S7525C18, "S7525C18", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN8S7525C18C1Ev();
extern void _ZN8S7525C18D1Ev();
Name_Map name_map_S7525C18[] = {
  NSPAIR(_ZN8S7525C18C1Ev),
  NSPAIR(_ZN8S7525C18D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7525C18[];
extern void _ZN8S7525C183v17Ev();
static  VTBL_ENTRY vtc_S7525C18[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C18[0]),
  (VTBL_ENTRY)&_ZN8S7525C183v17Ev,
};
extern VTBL_ENTRY _ZTI8S7525C18[];
extern  VTBL_ENTRY _ZTV8S7525C18[];
Class_Descriptor cd_S7525C18 = {  "S7525C18", // class name
  0,0,//no base classes
  &(vtc_S7525C18[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI8S7525C18),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7525C18),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7525C1  : S7525C2 , S7525C3 , S19277C17 , virtual S7525C6 {
  void *s7525c1f0;
  __tsi64 s7525c1f1;
  __tsi64 s7525c1f2;
  __tsi64 s7525c1f3;
  __tsi64 s7525c1f4;
  ::S7525C18 s7525c1f5;
  virtual  ~S7525C1(); // _ZN7S7525C1D2Ev
  S7525C1(); // tgen
};
//SIG(1 S7525C1) C1{ BC2{ VBC3{ v1} v2 v3 v4 Fp[3] FC4{} Fp} BC3 BC5{ m Fl Fc} VBC6{ VBC7{ VBC8{ BC3 Fc[5] FC2[2] Fi Fp[7] FC2 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v5 Fp FL Fp[6] FC3 FC9{ BC3 v12 Fc FL Fi[3] FC8} Fp Fi} VBC10{ BC2 BC11{ VBC2 BC7 v6 Fp FC3 FL[8] FC2 Fp} VBC12{ VBC3 BC13{ BC2 v7 v8 Fp FC14{ BC15{ BC16{ v18} Fc[5] FC17{ VBC16 v19 v20 v21 Fp[3] FC4 Fp}[2] Fi Fp[7] FC17 FC16 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC16 VBC17 Fi Fp} Fi Fp Fi[2]} VBC7 vd v9 Fp[2] Fi[9] FC9 FC3[9] FL FD Fp FL Fl FL} VBC18{ v10 v11 Fp[2] Fi[2] Fp[15] Fi FC7} VBC9 v13 Fs FC4 Fc Fp[2] Fi[2] FL} VBC19{ BC12 BC9 vd v14 Fp Fl[2] FL Fi FL} vd v15 v16 Fs FU20{ m FD Fi Fi[3] Fc Fc[2] FL} Fi[9]} vd Fp FL FL FL FL FC21{ v17 Fp Fp Fc Fc[9] Fl FD FL:8 Fp FD}}


 S7525C1 ::~S7525C1(){ note_dtor("S7525C1", this);}
S7525C1 ::S7525C1(){ note_ctor("S7525C1", this);} // tgen

static void Test_S7525C1()
{
  extern Class_Descriptor cd_S7525C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(335,815)];
    init_test(&cd_S7525C1, buf);
    S7525C1 *dp, &lv = *(dp=new (buf) S7525C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5344,3256), "sizeof(S7525C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7525C1)");
    /*is_ambiguous_... S7525C1::S7525C2 */ AMB_check_base_class_offset(lv, (S7525C3*)(S7525C2*), 0, "S7525C1");
    /*is_ambiguous_... S7525C10::S7525C2 */ AMB_check_base_class_offset(lv, (S7525C3*)(S7525C2*)(S7525C10*), 0, "S7525C1");
    /*is_ambiguous_... S7525C1::S7525C2 */ AMB_check_base_class_offset(lv, (S7525C3*)(S7525C2*), 0, "S7525C1");
    /*is_ambiguous_... S7525C1::S7525C12 */ AMB_check_base_class_offset(lv, (S7525C3*)(S7525C12*), 0, "S7525C1");
    /*is_ambiguous_... S7525C1::S7525C12 */ AMB_check_base_class_offset(lv, (S7525C3*)(S7525C2*)(S7525C13*)(S7525C12*), 0, "S7525C1");
    /*is_ambiguous_... S7525C12::S7525C3 */ AMB_check_base_class_offset(lv, (S7525C3*)(S7525C12*)(S7525C16*), 0, "S7525C1");
    check_base_class_offset(lv, (S7525C3*)(S7525C2*)(S7525C13*)(S7525C12*)(S7525C16*), 0, "S7525C1");
    /*is_ambiguous_... S7525C1::S7525C2 */ AMB_check_base_class_offset(lv, (S7525C2*), 0, "S7525C1");
    /*is_ambiguous_... S7525C1::S7525C3 */ AMB_check_base_class_offset(lv, (S7525C3*), ABISELECT(48,24), "S7525C1");
    check_base_class_offset(lv, (S19277C17*), ABISELECT(56,28), "S7525C1");
    check_base_class_offset(lv, (S7525C3*)(S7525C8*), ABISELECT(720,452), "S7525C1");
    /*is_ambiguous_... S7525C1::S7525C7 */ AMB_check_base_class_offset(lv, (S7525C8*)(S7525C7*), ABISELECT(720,452), "S7525C1");
    check_base_class_offset(lv, (S7525C8*)(S7525C7*)(S7525C11*)(S7525C10*), ABISELECT(720,452), "S7525C1");
    /*is_ambiguous_... S7525C6::S7525C7 */ AMB_check_base_class_offset(lv, (S7525C7*)(S7525C6*), ABISELECT(280,188), "S7525C1");
    /*is_ambiguous_... S7525C1::S7525C12 */ AMB_check_base_class_offset(lv, (S7525C7*)(S7525C12*), ABISELECT(280,188), "S7525C1");
    check_base_class_offset(lv, (S7525C7*)(S7525C12*)(S7525C16*), ABISELECT(280,188), "S7525C1");
    /*is_ambiguous_... S7525C10::S7525C2 */ AMB_check_base_class_offset(lv, (S7525C2*)(S7525C10*), ABISELECT(1024,636), "S7525C1");
    check_base_class_offset(lv, (S7525C2*)(S7525C11*)(S7525C10*), ABISELECT(1688,1052), "S7525C1");
    check_base_class_offset(lv, (S7525C7*)(S7525C11*)(S7525C10*), ABISELECT(1072,660), "S7525C1");
    check_base_class_offset(lv, (S7525C11*)(S7525C10*), ABISELECT(1072,660), "S7525C1");
    /*is_ambiguous_... S7525C1::S7525C12 */ AMB_check_base_class_offset(lv, (S7525C2*)(S7525C13*)(S7525C12*), ABISELECT(1744,1076), "S7525C1");
    /*is_ambiguous_... S7525C1::S7525C12 */ AMB_check_base_class_offset(lv, (S7525C13*)(S7525C12*), ABISELECT(1744,1076), "S7525C1");
    check_base_class_offset(lv, (S7525C12*)(S7525C10*), ABISELECT(1744,1076), "S7525C1");
    check_base_class_offset(lv, (S7525C15*)(S7525C10*), ABISELECT(2720,1672), "S7525C1");
    /*is_ambiguous_... S7525C1::S7525C9 */ AMB_check_base_class_offset(lv, (S7525C3*)(S7525C9*), ABISELECT(3624,2204), "S7525C1");
    check_base_class_offset(lv, (S7525C9*)(S7525C10*), ABISELECT(3624,2204), "S7525C1");
    check_base_class_offset(lv, (S7525C10*)(S7525C6*), ABISELECT(1024,636), "S7525C1");
    check_base_class_offset(lv, (S7525C2*)(S7525C13*)(S7525C12*)(S7525C16*), ABISELECT(3968,2416), "S7525C1");
    check_base_class_offset(lv, (S7525C13*)(S7525C12*)(S7525C16*), ABISELECT(3968,2416), "S7525C1");
    check_base_class_offset(lv, (S7525C12*)(S7525C16*), ABISELECT(3968,2416), "S7525C1");
    check_base_class_offset(lv, (S7525C3*)(S7525C9*)(S7525C16*), ABISELECT(4944,3012), "S7525C1");
    check_base_class_offset(lv, (S7525C9*)(S7525C16*), ABISELECT(4944,3012), "S7525C1");
    check_base_class_offset(lv, (S7525C16*)(S7525C6*), ABISELECT(3968,2416), "S7525C1");
    check_base_class_offset(lv, (S7525C6*), ABISELECT(208,132), "S7525C1");
    check_field_offset(lv, s7525c1f0, ABISELECT(72,36), "S7525C1.s7525c1f0");
    check_field_offset(lv, s7525c1f1, ABISELECT(80,40), "S7525C1.s7525c1f1");
    check_field_offset(lv, s7525c1f2, ABISELECT(88,48), "S7525C1.s7525c1f2");
    check_field_offset(lv, s7525c1f3, ABISELECT(96,56), "S7525C1.s7525c1f3");
    check_field_offset(lv, s7525c1f4, ABISELECT(104,64), "S7525C1.s7525c1f4");
    check_field_offset(lv, s7525c1f5, ABISELECT(112,72), "S7525C1.s7525c1f5");
    test_class_info(&lv, &cd_S7525C1);
    dp->~S7525C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7525C1(Test_S7525C1, "S7525C1", ABISELECT(5344,3256));

#else // __cplusplus

extern void _ZN7S7525C1C1Ev();
extern void _ZN7S7525C1D2Ev();
Name_Map name_map_S7525C1[] = {
  NSPAIR(_ZN7S7525C1C1Ev),
  NSPAIR(_ZN7S7525C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C2;
extern VTBL_ENTRY _ZTI7S7525C2[];
extern  VTBL_ENTRY _ZTV7S7525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C2[];
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S19277C17;
extern VTBL_ENTRY _ZTI9S19277C17[];
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C8;
extern VTBL_ENTRY _ZTI7S7525C8[];
extern  VTBL_ENTRY _ZTV7S7525C8[];
extern Class_Descriptor cd_S7525C7;
extern VTBL_ENTRY _ZTI7S7525C7[];
extern  VTBL_ENTRY _ZTV7S7525C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C7[];
extern Class_Descriptor cd_S7525C2;
extern VTBL_ENTRY _ZTI7S7525C2[];
extern  VTBL_ENTRY _ZTV7S7525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C2[];
extern Class_Descriptor cd_S7525C2;
extern VTBL_ENTRY _ZTI7S7525C2[];
extern  VTBL_ENTRY _ZTV7S7525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C2[];
extern Class_Descriptor cd_S7525C7;
extern VTBL_ENTRY _ZTI7S7525C7[];
extern  VTBL_ENTRY _ZTV7S7525C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C7[];
extern Class_Descriptor cd_S7525C11;
extern VTBL_ENTRY _ZTI8S7525C11[];
extern  VTBL_ENTRY _ZTV8S7525C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C11[];
extern Class_Descriptor cd_S7525C2;
extern VTBL_ENTRY _ZTI7S7525C2[];
extern  VTBL_ENTRY _ZTV7S7525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C2[];
extern Class_Descriptor cd_S7525C13;
extern VTBL_ENTRY _ZTI8S7525C13[];
extern  VTBL_ENTRY _ZTV8S7525C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C13[];
extern Class_Descriptor cd_S7525C12;
extern VTBL_ENTRY _ZTI8S7525C12[];
extern  VTBL_ENTRY _ZTV8S7525C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C12[];
extern Class_Descriptor cd_S7525C15;
extern VTBL_ENTRY _ZTI8S7525C15[];
extern  VTBL_ENTRY _ZTV8S7525C15[];
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C9;
extern VTBL_ENTRY _ZTI7S7525C9[];
extern  VTBL_ENTRY _ZTV7S7525C9[];
extern Class_Descriptor cd_S7525C10;
extern VTBL_ENTRY _ZTI8S7525C10[];
extern  VTBL_ENTRY _ZTV8S7525C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C10[];
extern Class_Descriptor cd_S7525C2;
extern VTBL_ENTRY _ZTI7S7525C2[];
extern  VTBL_ENTRY _ZTV7S7525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C2[];
extern Class_Descriptor cd_S7525C13;
extern VTBL_ENTRY _ZTI8S7525C13[];
extern  VTBL_ENTRY _ZTV8S7525C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C13[];
extern Class_Descriptor cd_S7525C12;
extern VTBL_ENTRY _ZTI8S7525C12[];
extern  VTBL_ENTRY _ZTV8S7525C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C12[];
extern Class_Descriptor cd_S7525C3;
extern VTBL_ENTRY _ZTI7S7525C3[];
extern  VTBL_ENTRY _ZTV7S7525C3[];
extern Class_Descriptor cd_S7525C9;
extern VTBL_ENTRY _ZTI7S7525C9[];
extern  VTBL_ENTRY _ZTV7S7525C9[];
extern Class_Descriptor cd_S7525C16;
extern VTBL_ENTRY _ZTI8S7525C16[];
extern  VTBL_ENTRY _ZTV8S7525C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7525C16[];
extern Class_Descriptor cd_S7525C6;
extern VTBL_ENTRY _ZTI7S7525C6[];
extern  VTBL_ENTRY _ZTV7S7525C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C6[];
static Base_Class bases_S7525C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7525C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7525C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7525C3,    ABISELECT(48,24), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19277C17,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7525C3,    ABISELECT(720,452), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7525C8,    ABISELECT(720,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7525C7,    ABISELECT(280,188), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7525C2,    ABISELECT(1024,636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7525C2,    ABISELECT(1688,1052), //bcp->offset
    82, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7525C7,    ABISELECT(1072,660), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7525C11,    ABISELECT(1072,660), //bcp->offset
    75, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7525C2,    ABISELECT(1744,1076), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7525C13,    ABISELECT(1744,1076), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7525C12,    ABISELECT(1744,1076), //bcp->offset
    93, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7525C15,    ABISELECT(2720,1672), //bcp->offset
    115, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7525C3,    ABISELECT(3624,2204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7525C9,    ABISELECT(3624,2204), //bcp->offset
    121, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7525C10,    ABISELECT(1024,636), //bcp->offset
    51, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S7525C2,    ABISELECT(3968,2416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7525C13,    ABISELECT(3968,2416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7525C12,    ABISELECT(3968,2416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7525C3,    ABISELECT(4944,3012), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7525C9,    ABISELECT(4944,3012), //bcp->offset
    152, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7525C16,    ABISELECT(3968,2416), //bcp->offset
    127, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S7525C6,    ABISELECT(208,132), //bcp->offset
    22, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7525C1[];
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN7S7525C1D1Ev();
extern void _ZN7S7525C1D0Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C32v1Ev();
extern void ABISELECT(_ZTv0_n104_N7S7525C1D1Ev,_ZTv0_n52_N7S7525C1D1Ev)();
extern void ABISELECT(_ZThn208_N7S7525C1D1Ev,_ZThn132_N7S7525C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7525C1D0Ev,_ZTv0_n52_N7S7525C1D0Ev)();
extern void ABISELECT(_ZThn208_N7S7525C1D0Ev,_ZThn132_N7S7525C1D0Ev)() __attribute__((weak));
extern void _ZN7S7525C63v15Ev();
extern void _ZN7S7525C63v16Ev();
extern void _ZN7S7525C72v5Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C103v13Ev();
extern void ABISELECT(_ZTv0_n120_N7S7525C1D1Ev,_ZTv0_n60_N7S7525C1D1Ev)();
extern void ABISELECT(_ZThn1024_N7S7525C1D1Ev,_ZThn636_N7S7525C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S7525C1D0Ev,_ZTv0_n60_N7S7525C1D0Ev)();
extern void ABISELECT(_ZThn1024_N7S7525C1D0Ev,_ZThn636_N7S7525C1D0Ev)() __attribute__((weak));
extern void _ZN7S7525C72v5Ev();
extern void _ZN8S7525C112v6Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
extern void ABISELECT(_ZTv0_n96_N7S7525C1D1Ev,_ZTv0_n48_N7S7525C1D1Ev)();
extern void ABISELECT(_ZThn1744_N7S7525C1D1Ev,_ZThn1076_N7S7525C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7525C1D0Ev,_ZTv0_n48_N7S7525C1D0Ev)();
extern void ABISELECT(_ZThn1744_N7S7525C1D0Ev,_ZThn1076_N7S7525C1D0Ev)() __attribute__((weak));
extern void _ZN8S7525C122v9Ev();
extern void _ZN8S7525C153v10Ev();
extern void _ZN8S7525C153v11Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C93v12Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
extern void ABISELECT(_ZTv0_n96_N7S7525C1D1Ev,_ZTv0_n48_N7S7525C1D1Ev)();
extern void ABISELECT(_ZThn3968_N7S7525C1D1Ev,_ZThn2416_N7S7525C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7525C1D0Ev,_ZTv0_n48_N7S7525C1D0Ev)();
extern void ABISELECT(_ZThn3968_N7S7525C1D0Ev,_ZThn2416_N7S7525C1D0Ev)() __attribute__((weak));
extern void _ZN8S7525C122v9Ev();
extern void _ZN8S7525C163v14Ev();
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C93v12Ev();
static  VTBL_ENTRY vtc_S7525C1[] = {
  ABISELECT(3968,2416),
  ABISELECT(3624,2204),
  ABISELECT(2720,1672),
  ABISELECT(1744,1076),
  ABISELECT(1688,1052),
  ABISELECT(1024,636),
  ABISELECT(720,452),
  ABISELECT(280,188),
  ABISELECT(208,132),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C1[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN7S7525C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7525C1D0Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7525C1[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  0,
  0,
  ABISELECT(-208,-132),
  ABISELECT(3760,2284),
  ABISELECT(3416,2072),
  ABISELECT(2512,1540),
  ABISELECT(1536,944),
  ABISELECT(1480,920),
  ABISELECT(-208,-132),
  ABISELECT(816,504),
  ABISELECT(512,320),
  ABISELECT(72,56),
  ABISELECT(-208,-132),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S7525C1[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7525C1D1Ev,_ZTv0_n52_N7S7525C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7525C1D0Ev,_ZTv0_n52_N7S7525C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7525C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7525C63v16Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-280,-188),
  (VTBL_ENTRY)&(_ZTI7S7525C1[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
  0,
  ABISELECT(-720,-452),
  (VTBL_ENTRY)&(_ZTI7S7525C1[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-1024,-636),
  0,
  0,
  0,
  0,
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-1024,-636),
  ABISELECT(-1024,-636),
  ABISELECT(-1024,-636),
  (VTBL_ENTRY)&(_ZTI7S7525C1[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C103v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7525C1D1Ev,_ZTv0_n60_N7S7525C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7525C1D0Ev,_ZTv0_n60_N7S7525C1D0Ev),
  ABISELECT(-1072,-660),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-1072,-660),
  (VTBL_ENTRY)&(_ZTI7S7525C1[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7525C112v6Ev,
  0,
  0,
  0,
  ABISELECT(-1688,-1052),
  ABISELECT(-1688,-1052),
  ABISELECT(-1688,-1052),
  (VTBL_ENTRY)&(_ZTI7S7525C1[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  0,
  ABISELECT(-1744,-1076),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1744,-1076),
  ABISELECT(-1744,-1076),
  ABISELECT(-1744,-1076),
  (VTBL_ENTRY)&(_ZTI7S7525C1[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7525C1D1Ev,_ZTv0_n48_N7S7525C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7525C1D0Ev,_ZTv0_n48_N7S7525C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7525C122v9Ev,
  0,
  0,
  ABISELECT(-2720,-1672),
  (VTBL_ENTRY)&(_ZTI7S7525C1[0]),
  (VTBL_ENTRY)&_ZN8S7525C153v10Ev,
  (VTBL_ENTRY)&_ZN8S7525C153v11Ev,
  0,
  0,
  ABISELECT(-3624,-2204),
  (VTBL_ENTRY)&(_ZTI7S7525C1[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C93v12Ev,
  ABISELECT(976,596),
  0,
  0,
  ABISELECT(-3968,-2416),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3968,-2416),
  ABISELECT(-3968,-2416),
  ABISELECT(-3968,-2416),
  (VTBL_ENTRY)&(_ZTI7S7525C1[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7525C1D1Ev,_ZTv0_n48_N7S7525C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7525C1D0Ev,_ZTv0_n48_N7S7525C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7525C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7525C163v14Ev,
  ABISELECT(-4944,-3012),
  (VTBL_ENTRY)&(_ZTI7S7525C1[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C93v12Ev,
};
extern VTBL_ENTRY _ZTV7S7525C1[];
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C2__A__7S7525C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C6D1Ev();
extern void _ZN7S7525C6D0Ev();
extern void _ZN7S7525C63v15Ev();
extern void _ZN7S7525C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C6__7S7525C1[] = {
  ABISELECT(3760,2284),
  ABISELECT(3416,2072),
  ABISELECT(2512,1540),
  ABISELECT(1536,944),
  ABISELECT(1480,920),
  ABISELECT(-208,-132),
  ABISELECT(816,504),
  ABISELECT(512,320),
  ABISELECT(72,56),
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7525C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7525C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7525C63v16Ev,
};
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C7__7S7525C6__7S7525C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-72,-56),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__7S7525C6__7S7525C1[] = {
  0,
  ABISELECT(-512,-320),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C103v13Ev();
extern void ABISELECT(_ZTv0_n120_N7S7525C6D1Ev,_ZTv0_n60_N7S7525C6D1Ev)();
extern void ABISELECT(_ZThn816_N7S7525C6D1Ev,_ZThn504_N7S7525C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S7525C6D0Ev,_ZTv0_n60_N7S7525C6D0Ev)();
extern void ABISELECT(_ZThn816_N7S7525C6D0Ev,_ZThn504_N7S7525C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7525C10__7S7525C6__7S7525C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-816,-504),
  0,
  0,
  0,
  0,
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-1024,-636),
  ABISELECT(-1024,-636),
  ABISELECT(-816,-504),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C103v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7525C6D1Ev,_ZTv0_n60_N7S7525C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7525C6D0Ev,_ZTv0_n60_N7S7525C6D0Ev),
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__A1__7S7525C6__7S7525C1[] = {
  0,
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C72v5Ev();
extern void _ZN8S7525C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C118S7525C10__7S7525C6__7S7525C1[] = {
  ABISELECT(-1072,-660),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-864,-528),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7525C112v6Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C2__A1__7S7525C6__7S7525C1[] = {
  0,
  0,
  0,
  ABISELECT(-1688,-1052),
  ABISELECT(-1688,-1052),
  ABISELECT(-1480,-920),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
extern void ABISELECT(_ZTv0_n96_N7S7525C6D1Ev,_ZTv0_n48_N7S7525C6D1Ev)();
extern void ABISELECT(_ZThn1536_N7S7525C6D1Ev,_ZThn944_N7S7525C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7525C6D0Ev,_ZTv0_n48_N7S7525C6D0Ev)();
extern void ABISELECT(_ZThn1536_N7S7525C6D0Ev,_ZThn944_N7S7525C6D0Ev)() __attribute__((weak));
extern void _ZN8S7525C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C12__7S7525C6__7S7525C1[] = {
  0,
  ABISELECT(-1536,-944),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1744,-1076),
  ABISELECT(-1744,-1076),
  ABISELECT(-1536,-944),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7525C6D1Ev,_ZTv0_n48_N7S7525C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7525C6D0Ev,_ZTv0_n48_N7S7525C6D0Ev),
  (VTBL_ENTRY)&_ZN8S7525C122v9Ev,
};
extern void _ZN8S7525C153v10Ev();
extern void _ZN8S7525C153v11Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C15__7S7525C6__7S7525C1[] = {
  0,
  0,
  ABISELECT(-2512,-1540),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN8S7525C153v10Ev,
  (VTBL_ENTRY)&_ZN8S7525C153v11Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C93v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C9__7S7525C6__7S7525C1[] = {
  0,
  0,
  ABISELECT(-3416,-2072),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C93v12Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
extern void ABISELECT(_ZTv0_n96_N7S7525C6D1Ev,_ZTv0_n48_N7S7525C6D1Ev)();
extern void ABISELECT(_ZThn3760_N7S7525C6D1Ev,_ZThn2284_N7S7525C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7525C6D0Ev,_ZTv0_n48_N7S7525C6D0Ev)();
extern void ABISELECT(_ZThn3760_N7S7525C6D0Ev,_ZThn2284_N7S7525C6D0Ev)() __attribute__((weak));
extern void _ZN8S7525C122v9Ev();
extern void _ZN8S7525C163v14Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C16__7S7525C6__7S7525C1[] = {
  ABISELECT(976,596),
  0,
  0,
  ABISELECT(-3760,-2284),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3968,-2416),
  ABISELECT(-3968,-2416),
  ABISELECT(-3760,-2284),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7525C6D1Ev,_ZTv0_n48_N7S7525C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7525C6D0Ev,_ZTv0_n48_N7S7525C6D0Ev),
  (VTBL_ENTRY)&_ZN8S7525C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7525C163v14Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C93v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C98S7525C16__A1__7S7525C6__7S7525C1[] = {
  ABISELECT(-4736,-2880),
  (VTBL_ENTRY)&(_ZTI7S7525C6[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C93v12Ev,
};
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C7__7S7525C1[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__7S7525C7__7S7525C1[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C103v13Ev();
extern void _ZN8S7525C10D1Ev();
extern void _ZN8S7525C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C10__7S7525C1[] = {
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-1024,-636),
  ABISELECT(-1024,-636),
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C103v13Ev,
  (VTBL_ENTRY)&_ZN8S7525C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7525C10D0Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C28S7525C10__A1__7S7525C1[] = {
  ABISELECT(-1024,-636),
  ABISELECT(-1024,-636),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__7S7525C28S7525C10__A1__7S7525C1[] = {
  0,
  ABISELECT(1024,636),
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C72v5Ev();
extern void _ZN8S7525C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C118S7525C10__7S7525C1[] = {
  ABISELECT(-1072,-660),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C11[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7525C112v6Ev,
};
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C78S7525C118S7525C10__A1__7S7525C1[] = {
  ABISELECT(-352,-208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__7S7525C78S7525C118S7525C10__A1__7S7525C1[] = {
  0,
  ABISELECT(352,208),
  (VTBL_ENTRY)&(_ZTI7S7525C7[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C2__8S7525C118S7525C10__7S7525C1[] = {
  0,
  0,
  0,
  ABISELECT(-1688,-1052),
  ABISELECT(-1688,-1052),
  ABISELECT(-616,-392),
  (VTBL_ENTRY)&(_ZTI8S7525C11[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__8S7525C118S7525C10__7S7525C1[] = {
  0,
  ABISELECT(1072,660),
  (VTBL_ENTRY)&(_ZTI8S7525C11[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__A1__8S7525C118S7525C10__7S7525C1[] = {
  0,
  ABISELECT(352,208),
  (VTBL_ENTRY)&(_ZTI8S7525C11[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__8S7525C10__7S7525C1[] = {
  0,
  ABISELECT(1024,636),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C72v5Ev();
extern void _ZN8S7525C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C11__8S7525C10__7S7525C1[] = {
  ABISELECT(-1072,-660),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7525C112v6Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C2__A1__8S7525C10__7S7525C1[] = {
  0,
  0,
  0,
  ABISELECT(-1688,-1052),
  ABISELECT(-1688,-1052),
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__A1__8S7525C10__7S7525C1[] = {
  0,
  ABISELECT(304,184),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
extern void ABISELECT(_ZTv0_n96_N8S7525C10D1Ev,_ZTv0_n48_N8S7525C10D1Ev)();
extern void ABISELECT(_ZThn720_N8S7525C10D1Ev,_ZThn440_N8S7525C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S7525C10D0Ev,_ZTv0_n48_N8S7525C10D0Ev)();
extern void ABISELECT(_ZThn720_N8S7525C10D0Ev,_ZThn440_N8S7525C10D0Ev)() __attribute__((weak));
extern void _ZN8S7525C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C12__8S7525C10__7S7525C1[] = {
  0,
  ABISELECT(-720,-440),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1744,-1076),
  ABISELECT(-1744,-1076),
  ABISELECT(-720,-440),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7525C10D1Ev,_ZTv0_n48_N8S7525C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7525C10D0Ev,_ZTv0_n48_N8S7525C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7525C122v9Ev,
};
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C7__A1__8S7525C10__7S7525C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(744,448),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN8S7525C153v10Ev();
extern void _ZN8S7525C153v11Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C15__8S7525C10__7S7525C1[] = {
  0,
  0,
  ABISELECT(-1696,-1036),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN8S7525C153v10Ev,
  (VTBL_ENTRY)&_ZN8S7525C153v11Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C93v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C9__8S7525C10__7S7525C1[] = {
  0,
  0,
  ABISELECT(-2600,-1568),
  (VTBL_ENTRY)&(_ZTI8S7525C10[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C93v12Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C2__A2__7S7525C1[] = {
  ABISELECT(-1688,-1052),
  ABISELECT(-1688,-1052),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__7S7525C2__A2__7S7525C1[] = {
  0,
  ABISELECT(1688,1052),
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
extern void _ZN8S7525C12D1Ev();
extern void _ZN8S7525C12D0Ev();
extern void _ZN8S7525C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C12__7S7525C1[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1744,-1076),
  ABISELECT(-1744,-1076),
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7525C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7525C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7525C122v9Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C138S7525C12__7S7525C1[] = {
  ABISELECT(-1744,-1076),
  ABISELECT(-1744,-1076),
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C13[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C28S7525C138S7525C12__A3__7S7525C1[] = {
  ABISELECT(-1744,-1076),
  ABISELECT(-1744,-1076),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__7S7525C28S7525C138S7525C12__A3__7S7525C1[] = {
  0,
  ABISELECT(1744,1076),
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__8S7525C138S7525C12__7S7525C1[] = {
  0,
  ABISELECT(1744,1076),
  (VTBL_ENTRY)&(_ZTI8S7525C13[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__8S7525C12__7S7525C1[] = {
  0,
  ABISELECT(1744,1076),
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C7__8S7525C12__7S7525C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(1464,888),
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__A1__8S7525C12__7S7525C1[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
extern void _ZN8S7525C16D1Ev();
extern void _ZN8S7525C16D0Ev();
extern void _ZN8S7525C122v9Ev();
extern void _ZN8S7525C163v14Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C16__7S7525C1[] = {
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3968,-2416),
  ABISELECT(-3968,-2416),
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C16[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7525C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7525C16D0Ev,
  (VTBL_ENTRY)&_ZN8S7525C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7525C163v14Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
extern void _ZN8S7525C12D1Ev();
extern void _ZN8S7525C12D0Ev();
extern void _ZN8S7525C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C128S7525C16__A1__7S7525C1[] = {
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3968,-2416),
  ABISELECT(-3968,-2416),
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7525C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7525C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7525C122v9Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
extern void _ZN8S7525C132v7Ev();
extern void _ZN8S7525C132v8Ev();
static  VTBL_ENTRY _tg__ZTV8S7525C138S7525C128S7525C16__A1__7S7525C1[] = {
  ABISELECT(-3968,-2416),
  ABISELECT(-3968,-2416),
  0,
  (VTBL_ENTRY)&(_ZTI8S7525C13[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7525C132v8Ev,
};
extern void _ZN7S7525C32v1Ev();
extern void _ZN7S7525C22v2Ev();
extern void _ZN7S7525C22v3Ev();
extern void _ZN7S7525C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C28S7525C138S7525C128S7525C16__A4__7S7525C1[] = {
  ABISELECT(-3968,-2416),
  ABISELECT(-3968,-2416),
  0,
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7525C22v4Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__7S7525C28S7525C138S7525C128S7525C16__A4__7S7525C1[] = {
  0,
  ABISELECT(3968,2416),
  (VTBL_ENTRY)&(_ZTI7S7525C2[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__8S7525C138S7525C128S7525C16__A1__7S7525C1[] = {
  0,
  ABISELECT(3968,2416),
  (VTBL_ENTRY)&(_ZTI8S7525C13[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__8S7525C128S7525C16__A1__7S7525C1[] = {
  0,
  ABISELECT(3968,2416),
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C7__8S7525C128S7525C16__A1__7S7525C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(3688,2228),
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__A1__8S7525C128S7525C16__A1__7S7525C1[] = {
  0,
  ABISELECT(3248,1964),
  (VTBL_ENTRY)&(_ZTI8S7525C12[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C3__8S7525C16__7S7525C1[] = {
  0,
  ABISELECT(3968,2416),
  (VTBL_ENTRY)&(_ZTI8S7525C16[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
extern void _ZN7S7525C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C7__8S7525C16__7S7525C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(3688,2228),
  (VTBL_ENTRY)&(_ZTI8S7525C16[0]),
  (VTBL_ENTRY)&_ZN7S7525C72v5Ev,
};
extern void _ZN7S7525C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7525C37S7525C8__A1__8S7525C16__7S7525C1[] = {
  0,
  ABISELECT(3248,1964),
  (VTBL_ENTRY)&(_ZTI8S7525C16[0]),
  (VTBL_ENTRY)&_ZN7S7525C32v1Ev,
};
static  VTT_ENTRY vtt_S7525C1[] = {
  {&(_ZTV7S7525C1[13]),  13,156},
  {&(_tg__ZTV7S7525C2__A__7S7525C1[4]),  4,8},
  {&(_tg__ZTV7S7525C2__A__7S7525C1[4]),  4,8},
  {&(_ZTV7S7525C1[13]),  13,156},
  {&(_ZTV7S7525C1[37]),  37,156},
  {&(_ZTV7S7525C1[46]),  46,156},
  {&(_ZTV7S7525C1[50]),  50,156},
  {&(_ZTV7S7525C1[68]),  68,156},
  {&(_ZTV7S7525C1[80]),  80,156},
  {&(_ZTV7S7525C1[89]),  89,156},
  {&(_ZTV7S7525C1[106]),  106,156},
  {&(_ZTV7S7525C1[119]),  119,156},
  {&(_ZTV7S7525C1[125]),  125,156},
  {&(_ZTV7S7525C1[142]),  142,156},
  {&(_ZTV7S7525C1[154]),  154,156},
  {&(_tg__ZTV7S7525C6__7S7525C1[12]),  12,17},
  {&(_tg__ZTV7S7525C7__7S7525C6__7S7525C1[4]),  4,5},
  {&(_tg__ZTV7S7525C37S7525C8__7S7525C6__7S7525C1[3]),  3,4},
  {&(_tg__ZTV8S7525C10__7S7525C6__7S7525C1[17]),  17,24},
  {&(_tg__ZTV7S7525C3__A1__7S7525C6__7S7525C1[3]),  3,4},
  {&(_tg__ZTV8S7525C118S7525C10__7S7525C6__7S7525C1[5]),  5,7},
  {&(_tg__ZTV7S7525C2__A1__7S7525C6__7S7525C1[7]),  7,11},
  {&(_tg__ZTV8S7525C12__7S7525C6__7S7525C1[13]),  13,22},
  {&(_tg__ZTV8S7525C15__7S7525C6__7S7525C1[4]),  4,6},
  {&(_tg__ZTV7S7525C9__7S7525C6__7S7525C1[4]),  4,6},
  {&(_tg__ZTV8S7525C16__7S7525C6__7S7525C1[15]),  15,25},
  {&(_tg__ZTV7S7525C98S7525C16__A1__7S7525C6__7S7525C1[2]),  2,4},
  {&(_tg__ZTV7S7525C7__7S7525C1[3]),  3,4},
  {&(_tg__ZTV7S7525C37S7525C8__7S7525C7__7S7525C1[3]),  3,4},
  {&(_tg__ZTV8S7525C10__7S7525C1[10]),  10,17},
  {&(_tg__ZTV7S7525C28S7525C10__A1__7S7525C1[4]),  4,8},
  {&(_tg__ZTV7S7525C3__7S7525C28S7525C10__A1__7S7525C1[3]),  3,4},
  {&(_tg__ZTV8S7525C118S7525C10__7S7525C1[5]),  5,7},
  {&(_tg__ZTV7S7525C78S7525C118S7525C10__A1__7S7525C1[3]),  3,4},
  {&(_tg__ZTV7S7525C37S7525C8__7S7525C78S7525C118S7525C10__A1__7S7525C1[3]),  3,4},
  {&(_tg__ZTV7S7525C2__8S7525C118S7525C10__7S7525C1[7]),  7,11},
  {&(_tg__ZTV7S7525C3__8S7525C118S7525C10__7S7525C1[3]),  3,4},
  {&(_tg__ZTV7S7525C37S7525C8__A1__8S7525C118S7525C10__7S7525C1[3]),  3,4},
  {&(_tg__ZTV7S7525C3__8S7525C10__7S7525C1[3]),  3,4},
  {&(_tg__ZTV8S7525C11__8S7525C10__7S7525C1[5]),  5,7},
  {&(_tg__ZTV7S7525C2__A1__8S7525C10__7S7525C1[7]),  7,11},
  {&(_tg__ZTV7S7525C37S7525C8__A1__8S7525C10__7S7525C1[3]),  3,4},
  {&(_tg__ZTV8S7525C12__8S7525C10__7S7525C1[13]),  13,22},
  {&(_tg__ZTV7S7525C7__A1__8S7525C10__7S7525C1[4]),  4,5},
  {&(_tg__ZTV8S7525C15__8S7525C10__7S7525C1[4]),  4,6},
  {&(_tg__ZTV7S7525C9__8S7525C10__7S7525C1[4]),  4,6},
  {&(_tg__ZTV7S7525C2__A2__7S7525C1[4]),  4,8},
  {&(_tg__ZTV7S7525C3__7S7525C2__A2__7S7525C1[3]),  3,4},
  {&(_tg__ZTV8S7525C12__7S7525C1[6]),  6,15},
  {&(_tg__ZTV8S7525C138S7525C12__7S7525C1[4]),  4,10},
  {&(_tg__ZTV7S7525C28S7525C138S7525C12__A3__7S7525C1[4]),  4,8},
  {&(_tg__ZTV7S7525C3__7S7525C28S7525C138S7525C12__A3__7S7525C1[3]),  3,4},
  {&(_tg__ZTV7S7525C3__8S7525C138S7525C12__7S7525C1[3]),  3,4},
  {&(_tg__ZTV7S7525C3__8S7525C12__7S7525C1[3]),  3,4},
  {&(_tg__ZTV7S7525C7__8S7525C12__7S7525C1[4]),  4,5},
  {&(_tg__ZTV7S7525C37S7525C8__A1__8S7525C12__7S7525C1[3]),  3,4},
  {&(_tg__ZTV8S7525C16__7S7525C1[6]),  6,16},
  {&(_tg__ZTV8S7525C128S7525C16__A1__7S7525C1[6]),  6,15},
  {&(_tg__ZTV8S7525C138S7525C128S7525C16__A1__7S7525C1[4]),  4,10},
  {&(_tg__ZTV7S7525C28S7525C138S7525C128S7525C16__A4__7S7525C1[4]),  4,8},
  {&(_tg__ZTV7S7525C3__7S7525C28S7525C138S7525C128S7525C16__A4__7S7525C1[3]),  3,4},
  {&(_tg__ZTV7S7525C3__8S7525C138S7525C128S7525C16__A1__7S7525C1[3]),  3,4},
  {&(_tg__ZTV7S7525C3__8S7525C128S7525C16__A1__7S7525C1[3]),  3,4},
  {&(_tg__ZTV7S7525C7__8S7525C128S7525C16__A1__7S7525C1[4]),  4,5},
  {&(_tg__ZTV7S7525C37S7525C8__A1__8S7525C128S7525C16__A1__7S7525C1[3]),  3,4},
  {&(_tg__ZTV7S7525C3__8S7525C16__7S7525C1[3]),  3,4},
  {&(_tg__ZTV7S7525C7__8S7525C16__7S7525C1[4]),  4,5},
  {&(_tg__ZTV7S7525C37S7525C8__A1__8S7525C16__7S7525C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7525C1[];
extern  VTBL_ENTRY _ZTV7S7525C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7525C1[];
static VTBL_ENTRY alt_thunk_names65[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7525C10D0Ev,_ZTv0_n48_N8S7525C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S7525C10D0Ev,_ZThn440_N8S7525C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7525C10D1Ev,_ZTv0_n48_N8S7525C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S7525C10D1Ev,_ZThn440_N8S7525C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7525C6D0Ev,_ZTv0_n48_N7S7525C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3760_N7S7525C6D0Ev,_ZThn2284_N7S7525C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N7S7525C6D0Ev,_ZThn944_N7S7525C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7525C6D1Ev,_ZTv0_n48_N7S7525C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3760_N7S7525C6D1Ev,_ZThn2284_N7S7525C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N7S7525C6D1Ev,_ZThn944_N7S7525C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7525C6D0Ev,_ZTv0_n60_N7S7525C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N7S7525C6D0Ev,_ZThn504_N7S7525C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7525C6D1Ev,_ZTv0_n60_N7S7525C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N7S7525C6D1Ev,_ZThn504_N7S7525C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7525C1D0Ev,_ZTv0_n48_N7S7525C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3968_N7S7525C1D0Ev,_ZThn2416_N7S7525C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1744_N7S7525C1D0Ev,_ZThn1076_N7S7525C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7525C1D1Ev,_ZTv0_n48_N7S7525C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3968_N7S7525C1D1Ev,_ZThn2416_N7S7525C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1744_N7S7525C1D1Ev,_ZThn1076_N7S7525C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7525C1D0Ev,_ZTv0_n60_N7S7525C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7525C1D0Ev,_ZThn636_N7S7525C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7525C1D1Ev,_ZTv0_n60_N7S7525C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7525C1D1Ev,_ZThn636_N7S7525C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7525C1D0Ev,_ZTv0_n52_N7S7525C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7525C1D0Ev,_ZThn132_N7S7525C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7525C1D1Ev,_ZTv0_n52_N7S7525C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7525C1D1Ev,_ZThn132_N7S7525C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7525C1 = {  "S7525C1", // class name
  bases_S7525C1, 25,
  &(vtc_S7525C1[0]), // expected_vtbl_contents
  &(vtt_S7525C1[0]), // expected_vtt_contents
  ABISELECT(5344,3256), // object size
  NSPAIRA(_ZTI7S7525C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7525C1),156, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7525C1),68, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names65,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7526C3  {
  virtual void  v1(); // _ZN7S7526C32v1Ev
  ~S7526C3(); // tgen
  S7526C3(); // tgen
};
//SIG(-1 S7526C3) C1{ v1}


void  S7526C3 ::v1(){vfunc_called(this, "_ZN7S7526C32v1Ev");}
S7526C3 ::~S7526C3(){ note_dtor("S7526C3", this);} // tgen
S7526C3 ::S7526C3(){ note_ctor("S7526C3", this);} // tgen

static void Test_S7526C3()
{
  extern Class_Descriptor cd_S7526C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7526C3, buf);
    S7526C3 *dp, &lv = *(dp=new (buf) S7526C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7526C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7526C3)");
    test_class_info(&lv, &cd_S7526C3);
    dp->~S7526C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7526C3(Test_S7526C3, "S7526C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7526C3C1Ev();
extern void _ZN7S7526C3D1Ev();
Name_Map name_map_S7526C3[] = {
  NSPAIR(_ZN7S7526C3C1Ev),
  NSPAIR(_ZN7S7526C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7526C3[];
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY vtc_S7526C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C3[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
Class_Descriptor cd_S7526C3 = {  "S7526C3", // class name
  0,0,//no base classes
  &(vtc_S7526C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7526C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7526C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7526C2  : virtual S7526C3 {
  void *s7526c2f0[3];
  ::S2489C12_nt s7526c2f1;
  void *s7526c2f2;
  virtual void  v2(); // _ZN7S7526C22v2Ev
  virtual void  v3(); // _ZN7S7526C22v3Ev
  virtual void  v4(); // _ZN7S7526C22v4Ev
  ~S7526C2(); // tgen
  S7526C2(); // tgen
};
//SIG(-1 S7526C2) C1{ VBC2{ v4} v1 v2 v3 Fp[3] FC3{} Fp}


void  S7526C2 ::v2(){vfunc_called(this, "_ZN7S7526C22v2Ev");}
void  S7526C2 ::v3(){vfunc_called(this, "_ZN7S7526C22v3Ev");}
void  S7526C2 ::v4(){vfunc_called(this, "_ZN7S7526C22v4Ev");}
S7526C2 ::~S7526C2(){ note_dtor("S7526C2", this);} // tgen
S7526C2 ::S7526C2(){ note_ctor("S7526C2", this);} // tgen

static void Test_S7526C2()
{
  extern Class_Descriptor cd_S7526C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7526C2, buf);
    S7526C2 *dp, &lv = *(dp=new (buf) S7526C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7526C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7526C2)");
    check_base_class_offset(lv, (S7526C3*), 0, "S7526C2");
    check_field_offset(lv, s7526c2f0, ABISELECT(8,4), "S7526C2.s7526c2f0");
    check_field_offset(lv, s7526c2f1, ABISELECT(32,16), "S7526C2.s7526c2f1");
    check_field_offset(lv, s7526c2f2, ABISELECT(40,20), "S7526C2.s7526c2f2");
    test_class_info(&lv, &cd_S7526C2);
    dp->~S7526C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7526C2(Test_S7526C2, "S7526C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7526C2C1Ev();
extern void _ZN7S7526C2D1Ev();
Name_Map name_map_S7526C2[] = {
  NSPAIR(_ZN7S7526C2C1Ev),
  NSPAIR(_ZN7S7526C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
static Base_Class bases_S7526C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7526C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7526C2[];
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY vtc_S7526C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern VTBL_ENTRY _ZTV7S7526C2[];
static  VTT_ENTRY vtt_S7526C2[] = {
  {&(_ZTV7S7526C2[4]),  4,8},
  {&(_ZTV7S7526C2[4]),  4,8},
};
extern VTBL_ENTRY _ZTI7S7526C2[];
extern  VTBL_ENTRY _ZTV7S7526C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C2[];
Class_Descriptor cd_S7526C2 = {  "S7526C2", // class name
  bases_S7526C2, 1,
  &(vtc_S7526C2[0]), // expected_vtbl_contents
  &(vtt_S7526C2[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7526C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7526C2),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7526C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7526C8  : S7526C3 {
  char s7526c8f0[5];
  ::S7526C2 s7526c8f1[2];
  int s7526c8f2;
  void *s7526c8f3[7];
  ::S7526C2 s7526c8f4;
  ::S7526C3 s7526c8f5;
  char s7526c8f6;
  int s7526c8f7;
  short s7526c8f8[5];
  int s7526c8f9[8];
  __tsi64 s7526c8f10;
  char s7526c8f11:8;
  ~S7526C8(); // tgen
  S7526C8(); // tgen
};
//SIG(-1 S7526C8) C1{ BC2{ v1} Fc[5] FC3{ VBC2 v2 v3 v4 Fp[3] FC4{} Fp}[2] Fi Fp[7] FC3 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}


S7526C8 ::~S7526C8(){ note_dtor("S7526C8", this);} // tgen
S7526C8 ::S7526C8(){ note_ctor("S7526C8", this);} // tgen

static void Test_S7526C8()
{
  extern Class_Descriptor cd_S7526C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,47)];
    init_test(&cd_S7526C8, buf);
    S7526C8 *dp, &lv = *(dp=new (buf) S7526C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,184), "sizeof(S7526C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7526C8)");
    check_base_class_offset(lv, (S7526C3*), 0, "S7526C8");
    check_field_offset(lv, s7526c8f0, ABISELECT(8,4), "S7526C8.s7526c8f0");
    check_field_offset(lv, s7526c8f1, ABISELECT(16,12), "S7526C8.s7526c8f1");
    check_field_offset(lv, s7526c8f2, ABISELECT(112,60), "S7526C8.s7526c8f2");
    check_field_offset(lv, s7526c8f3, ABISELECT(120,64), "S7526C8.s7526c8f3");
    check_field_offset(lv, s7526c8f4, ABISELECT(176,92), "S7526C8.s7526c8f4");
    check_field_offset(lv, s7526c8f5, ABISELECT(224,116), "S7526C8.s7526c8f5");
    check_field_offset(lv, s7526c8f6, ABISELECT(232,120), "S7526C8.s7526c8f6");
    check_field_offset(lv, s7526c8f7, ABISELECT(236,124), "S7526C8.s7526c8f7");
    check_field_offset(lv, s7526c8f8, ABISELECT(240,128), "S7526C8.s7526c8f8");
    check_field_offset(lv, s7526c8f9, ABISELECT(252,140), "S7526C8.s7526c8f9");
    check_field_offset(lv, s7526c8f10, ABISELECT(288,172), "S7526C8.s7526c8f10");
    set_bf_and_test(lv, s7526c8f11, ABISELECT(296,180), 0, 8, 1, "S7526C8");
    set_bf_and_test(lv, s7526c8f11, ABISELECT(296,180), 0, 8, hide_sll(1LL<<7), "S7526C8");
    test_class_info(&lv, &cd_S7526C8);
    dp->~S7526C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7526C8(Test_S7526C8, "S7526C8", ABISELECT(304,184));

#else // __cplusplus

extern void _ZN7S7526C8C1Ev();
extern void _ZN7S7526C8D1Ev();
Name_Map name_map_S7526C8[] = {
  NSPAIR(_ZN7S7526C8C1Ev),
  NSPAIR(_ZN7S7526C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
static Base_Class bases_S7526C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7526C3,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7526C8[];
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY vtc_S7526C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C8[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S7526C8[];
extern  VTBL_ENTRY _ZTV7S7526C8[];
Class_Descriptor cd_S7526C8 = {  "S7526C8", // class name
  bases_S7526C8, 1,
  &(vtc_S7526C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,184), // object size
  NSPAIRA(_ZTI7S7526C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7526C8),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7526C9  : S7526C3 {
  char s7526c9f0;
  __tsi64 s7526c9f1;
  int s7526c9f2[3];
  ::S7526C8 s7526c9f3;
  virtual void  v12(); // _ZN7S7526C93v12Ev
  ~S7526C9(); // tgen
  S7526C9(); // tgen
};
//SIG(-1 S7526C9) C1{ BC2{ v2} v1 Fc FL Fi[3] FC3{ BC2 Fc[5] FC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}}


void  S7526C9 ::v12(){vfunc_called(this, "_ZN7S7526C93v12Ev");}
S7526C9 ::~S7526C9(){ note_dtor("S7526C9", this);} // tgen
S7526C9 ::S7526C9(){ note_ctor("S7526C9", this);} // tgen

static void Test_S7526C9()
{
  extern Class_Descriptor cd_S7526C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,54)];
    init_test(&cd_S7526C9, buf);
    S7526C9 *dp, &lv = *(dp=new (buf) S7526C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,212), "sizeof(S7526C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7526C9)");
    check_base_class_offset(lv, (S7526C3*), 0, "S7526C9");
    check_field_offset(lv, s7526c9f0, ABISELECT(8,4), "S7526C9.s7526c9f0");
    check_field_offset(lv, s7526c9f1, ABISELECT(16,8), "S7526C9.s7526c9f1");
    check_field_offset(lv, s7526c9f2, ABISELECT(24,16), "S7526C9.s7526c9f2");
    check_field_offset(lv, s7526c9f3, ABISELECT(40,28), "S7526C9.s7526c9f3");
    test_class_info(&lv, &cd_S7526C9);
    dp->~S7526C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7526C9(Test_S7526C9, "S7526C9", ABISELECT(344,212));

#else // __cplusplus

extern void _ZN7S7526C9C1Ev();
extern void _ZN7S7526C9D1Ev();
Name_Map name_map_S7526C9[] = {
  NSPAIR(_ZN7S7526C9C1Ev),
  NSPAIR(_ZN7S7526C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
static Base_Class bases_S7526C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7526C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7526C9[];
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C93v12Ev();
static  VTBL_ENTRY vtc_S7526C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C9[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C93v12Ev,
};
extern VTBL_ENTRY _ZTI7S7526C9[];
extern  VTBL_ENTRY _ZTV7S7526C9[];
Class_Descriptor cd_S7526C9 = {  "S7526C9", // class name
  bases_S7526C9, 1,
  &(vtc_S7526C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,212), // object size
  NSPAIRA(_ZTI7S7526C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7526C9),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7526C7  : virtual S7526C8 {
  void *s7526c7f0;
  __tsi64 s7526c7f1;
  void *s7526c7f2[6];
  ::S7526C3 s7526c7f3;
  ::S7526C9 s7526c7f4;
  void *s7526c7f5;
  int s7526c7f6;
  virtual void  v5(); // _ZN7S7526C72v5Ev
  ~S7526C7(); // tgen
  S7526C7(); // tgen
};
//SIG(-1 S7526C7) C1{ VBC2{ BC3{ v2} Fc[5] FC4{ VBC3 v4 v5 v6 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v1 Fp FL Fp[6] FC3 FC6{ BC3 v3 Fc FL Fi[3] FC2} Fp Fi}


void  S7526C7 ::v5(){vfunc_called(this, "_ZN7S7526C72v5Ev");}
S7526C7 ::~S7526C7(){ note_dtor("S7526C7", this);} // tgen
S7526C7 ::S7526C7(){ note_ctor("S7526C7", this);} // tgen

static void Test_S7526C7()
{
  extern Class_Descriptor cd_S7526C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(94,113)];
    init_test(&cd_S7526C7, buf);
    S7526C7 *dp, &lv = *(dp=new (buf) S7526C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(744,448), "sizeof(S7526C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7526C7)");
    check_base_class_offset(lv, (S7526C3*)(S7526C8*), ABISELECT(440,264), "S7526C7");
    check_base_class_offset(lv, (S7526C8*), ABISELECT(440,264), "S7526C7");
    check_field_offset(lv, s7526c7f0, ABISELECT(8,4), "S7526C7.s7526c7f0");
    check_field_offset(lv, s7526c7f1, ABISELECT(16,8), "S7526C7.s7526c7f1");
    check_field_offset(lv, s7526c7f2, ABISELECT(24,16), "S7526C7.s7526c7f2");
    check_field_offset(lv, s7526c7f3, ABISELECT(72,40), "S7526C7.s7526c7f3");
    check_field_offset(lv, s7526c7f4, ABISELECT(80,44), "S7526C7.s7526c7f4");
    check_field_offset(lv, s7526c7f5, ABISELECT(424,256), "S7526C7.s7526c7f5");
    check_field_offset(lv, s7526c7f6, ABISELECT(432,260), "S7526C7.s7526c7f6");
    test_class_info(&lv, &cd_S7526C7);
    dp->~S7526C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7526C7(Test_S7526C7, "S7526C7", ABISELECT(744,448));

#else // __cplusplus

extern void _ZN7S7526C7C1Ev();
extern void _ZN7S7526C7D1Ev();
Name_Map name_map_S7526C7[] = {
  NSPAIR(_ZN7S7526C7C1Ev),
  NSPAIR(_ZN7S7526C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C8;
extern VTBL_ENTRY _ZTI7S7526C8[];
extern  VTBL_ENTRY _ZTV7S7526C8[];
static Base_Class bases_S7526C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7526C3,    ABISELECT(440,264), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7526C8,    ABISELECT(440,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7526C7[];
extern void _ZN7S7526C72v5Ev();
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY vtc_S7526C7[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern VTBL_ENTRY _ZTV7S7526C7[];
static  VTT_ENTRY vtt_S7526C7[] = {
  {&(_ZTV7S7526C7[3]),  3,8},
  {&(_ZTV7S7526C7[7]),  7,8},
};
extern VTBL_ENTRY _ZTI7S7526C7[];
extern  VTBL_ENTRY _ZTV7S7526C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C7[];
Class_Descriptor cd_S7526C7 = {  "S7526C7", // class name
  bases_S7526C7, 2,
  &(vtc_S7526C7[0]), // expected_vtbl_contents
  &(vtt_S7526C7[0]), // expected_vtt_contents
  ABISELECT(744,448), // object size
  NSPAIRA(_ZTI7S7526C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7526C7),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7526C7),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7526C11  : virtual S7526C2 , S7526C7 {
  void *s7526c11f0;
  ::S7526C3 s7526c11f1;
  __tsi64 s7526c11f2[8];
  ::S7526C2 s7526c11f3;
  void *s7526c11f4;
  virtual void  v6(); // _ZN8S7526C112v6Ev
  ~S7526C11(); // tgen
  S7526C11(); // tgen
};
//SIG(-1 S7526C11) C1{ VBC2{ VBC3{ v2} v3 v4 v5 Fp[3] FC4{} Fp} BC5{ VBC6{ BC3 Fc[5] FC2[2] Fi Fp[7] FC2 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v6 Fp FL Fp[6] FC3 FC7{ BC3 v7 Fc FL Fi[3] FC6} Fp Fi} v1 Fp FC3 FL[8] FC2 Fp}


void  S7526C11 ::v6(){vfunc_called(this, "_ZN8S7526C112v6Ev");}
S7526C11 ::~S7526C11(){ note_dtor("S7526C11", this);} // tgen
S7526C11 ::S7526C11(){ note_ctor("S7526C11", this);} // tgen

static void Test_S7526C11()
{
  extern Class_Descriptor cd_S7526C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(117,144)];
    init_test(&cd_S7526C11, buf);
    S7526C11 *dp, &lv = *(dp=new (buf) S7526C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(928,572), "sizeof(S7526C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7526C11)");
    check_base_class_offset(lv, (S7526C3*)(S7526C2*), ABISELECT(576,364), "S7526C11");
    check_base_class_offset(lv, (S7526C2*), ABISELECT(576,364), "S7526C11");
    check_base_class_offset(lv, (S7526C3*)(S7526C8*), ABISELECT(624,388), "S7526C11");
    check_base_class_offset(lv, (S7526C8*)(S7526C7*), ABISELECT(624,388), "S7526C11");
    check_base_class_offset(lv, (S7526C7*), 0, "S7526C11");
    check_field_offset(lv, s7526c11f0, ABISELECT(440,264), "S7526C11.s7526c11f0");
    check_field_offset(lv, s7526c11f1, ABISELECT(448,268), "S7526C11.s7526c11f1");
    check_field_offset(lv, s7526c11f2, ABISELECT(456,272), "S7526C11.s7526c11f2");
    check_field_offset(lv, s7526c11f3, ABISELECT(520,336), "S7526C11.s7526c11f3");
    check_field_offset(lv, s7526c11f4, ABISELECT(568,360), "S7526C11.s7526c11f4");
    test_class_info(&lv, &cd_S7526C11);
    dp->~S7526C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7526C11(Test_S7526C11, "S7526C11", ABISELECT(928,572));

#else // __cplusplus

extern void _ZN8S7526C11C1Ev();
extern void _ZN8S7526C11D1Ev();
Name_Map name_map_S7526C11[] = {
  NSPAIR(_ZN8S7526C11C1Ev),
  NSPAIR(_ZN8S7526C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C2;
extern VTBL_ENTRY _ZTI7S7526C2[];
extern  VTBL_ENTRY _ZTV7S7526C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C2[];
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C8;
extern VTBL_ENTRY _ZTI7S7526C8[];
extern  VTBL_ENTRY _ZTV7S7526C8[];
extern Class_Descriptor cd_S7526C7;
extern VTBL_ENTRY _ZTI7S7526C7[];
extern  VTBL_ENTRY _ZTV7S7526C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C7[];
static Base_Class bases_S7526C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7526C3,    ABISELECT(576,364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7526C2,    ABISELECT(576,364), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7526C3,    ABISELECT(624,388), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7526C8,    ABISELECT(624,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7526C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7526C11[];
extern void _ZN7S7526C72v5Ev();
extern void _ZN8S7526C112v6Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY vtc_S7526C11[] = {
  ABISELECT(576,364),
  ABISELECT(576,364),
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C11[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7526C112v6Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-576,-364),
  (VTBL_ENTRY)&(_ZTI8S7526C11[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI8S7526C11[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern VTBL_ENTRY _ZTV8S7526C11[];
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C7__8S7526C11[] = {
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__7S7526C7__8S7526C11[] = {
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C2__8S7526C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
static  VTT_ENTRY vtt_S7526C11[] = {
  {&(_ZTV8S7526C11[5]),  5,22},
  {&(_tg__ZTV7S7526C7__8S7526C11[3]),  3,4},
  {&(_tg__ZTV7S7526C37S7526C8__7S7526C7__8S7526C11[3]),  3,4},
  {&(_ZTV8S7526C11[14]),  14,22},
  {&(_ZTV8S7526C11[14]),  14,22},
  {&(_ZTV8S7526C11[21]),  21,22},
  {&(_tg__ZTV7S7526C2__8S7526C11[4]),  4,8},
  {&(_tg__ZTV7S7526C2__8S7526C11[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S7526C11[];
extern  VTBL_ENTRY _ZTV8S7526C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C11[];
Class_Descriptor cd_S7526C11 = {  "S7526C11", // class name
  bases_S7526C11, 5,
  &(vtc_S7526C11[0]), // expected_vtbl_contents
  &(vtt_S7526C11[0]), // expected_vtt_contents
  ABISELECT(928,572), // object size
  NSPAIRA(_ZTI8S7526C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7526C11),22, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7526C11),8, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7526C13  : S7526C2 {
  void *s7526c13f0;
  ::S19277C8 s7526c13f1;
  int s7526c13f2;
  void *s7526c13f3;
  int s7526c13f4[2];
  virtual void  v7(); // _ZN8S7526C132v7Ev
  virtual void  v8(); // _ZN8S7526C132v8Ev
  ~S7526C13(); // tgen
  S7526C13(); // tgen
};
//SIG(-1 S7526C13) C1{ BC2{ VBC3{ v3} v4 v5 v6 Fp[3] FC4{} Fp} v1 v2 Fp FC5{ BC6{ BC7{ v7} Fc[5] FC8{ VBC7 v8 v9 v10 Fp[3] FC4 Fp}[2] Fi Fp[7] FC8 FC7 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC7 VBC8 Fi Fp} Fi Fp Fi[2]}


void  S7526C13 ::v7(){vfunc_called(this, "_ZN8S7526C132v7Ev");}
void  S7526C13 ::v8(){vfunc_called(this, "_ZN8S7526C132v8Ev");}
S7526C13 ::~S7526C13(){ note_dtor("S7526C13", this);} // tgen
S7526C13 ::S7526C13(){ note_ctor("S7526C13", this);} // tgen

static void Test_S7526C13()
{
  extern Class_Descriptor cd_S7526C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(56,66)];
    init_test(&cd_S7526C13, buf);
    S7526C13 *dp, &lv = *(dp=new (buf) S7526C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(440,260), "sizeof(S7526C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7526C13)");
    check_base_class_offset(lv, (S7526C3*)(S7526C2*), 0, "S7526C13");
    check_base_class_offset(lv, (S7526C2*), 0, "S7526C13");
    check_field_offset(lv, s7526c13f0, ABISELECT(48,24), "S7526C13.s7526c13f0");
    check_field_offset(lv, s7526c13f1, ABISELECT(56,28), "S7526C13.s7526c13f1");
    check_field_offset(lv, s7526c13f2, ABISELECT(416,244), "S7526C13.s7526c13f2");
    check_field_offset(lv, s7526c13f3, ABISELECT(424,248), "S7526C13.s7526c13f3");
    check_field_offset(lv, s7526c13f4, ABISELECT(432,252), "S7526C13.s7526c13f4");
    test_class_info(&lv, &cd_S7526C13);
    dp->~S7526C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7526C13(Test_S7526C13, "S7526C13", ABISELECT(440,260));

#else // __cplusplus

extern void _ZN8S7526C13C1Ev();
extern void _ZN8S7526C13D1Ev();
Name_Map name_map_S7526C13[] = {
  NSPAIR(_ZN8S7526C13C1Ev),
  NSPAIR(_ZN8S7526C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C2;
extern VTBL_ENTRY _ZTI7S7526C2[];
extern  VTBL_ENTRY _ZTV7S7526C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C2[];
static Base_Class bases_S7526C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7526C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7526C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7526C13[];
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
static  VTBL_ENTRY vtc_S7526C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C13[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
};
extern VTBL_ENTRY _ZTV8S7526C13[];
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C2__8S7526C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
static  VTT_ENTRY vtt_S7526C13[] = {
  {&(_ZTV8S7526C13[4]),  4,10},
  {&(_tg__ZTV7S7526C2__8S7526C13[4]),  4,8},
  {&(_tg__ZTV7S7526C2__8S7526C13[4]),  4,8},
  {&(_ZTV8S7526C13[4]),  4,10},
};
extern VTBL_ENTRY _ZTI8S7526C13[];
extern  VTBL_ENTRY _ZTV8S7526C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C13[];
Class_Descriptor cd_S7526C13 = {  "S7526C13", // class name
  bases_S7526C13, 2,
  &(vtc_S7526C13[0]), // expected_vtbl_contents
  &(vtt_S7526C13[0]), // expected_vtt_contents
  ABISELECT(440,260), // object size
  NSPAIRA(_ZTI8S7526C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7526C13),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7526C13),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7526C12  : virtual S7526C3 , S7526C13 , virtual S7526C7 {
  void *s7526c12f0[2];
  int s7526c12f1[9];
  ::S7526C9 s7526c12f2;
  ::S7526C3 s7526c12f3[9];
  __tsi64 s7526c12f4;
  long double s7526c12f5;
  void *s7526c12f6;
  __tsi64 s7526c12f7;
  long s7526c12f8;
  __tsi64 s7526c12f9;
  virtual  ~S7526C12(); // _ZN8S7526C12D2Ev
  virtual void  v9(); // _ZN8S7526C122v9Ev
  S7526C12(); // tgen
};
//SIG(-1 S7526C12) C1{ VBC2{ v2} BC3{ BC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp} v6 v7 Fp FC6{ BC7{ BC8{ v9} Fc[5] FC9{ VBC8 v10 v11 v12 Fp[3] FC5 Fp}[2] Fi Fp[7] FC9 FC8 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC8 VBC9 Fi Fp} Fi Fp Fi[2]} VBC10{ VBC11{ BC2 Fc[5] FC4[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC2 FC12{ BC2 v13 Fc FL Fi[3] FC11} Fp Fi} vd v1 Fp[2] Fi[9] FC12 FC2[9] FL FD Fp FL Fl FL}


 S7526C12 ::~S7526C12(){ note_dtor("S7526C12", this);}
void  S7526C12 ::v9(){vfunc_called(this, "_ZN8S7526C122v9Ev");}
S7526C12 ::S7526C12(){ note_ctor("S7526C12", this);} // tgen

static void Test_S7526C12()
{
  extern Class_Descriptor cd_S7526C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(109,262)];
    init_test(&cd_S7526C12, buf);
    S7526C12 *dp, &lv = *(dp=new (buf) S7526C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1728,1044), "sizeof(S7526C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7526C12)");
    /*is_ambiguous_... S7526C12::S7526C3 */ AMB_check_base_class_offset(lv, (S7526C3*), 0, "S7526C12");
    check_base_class_offset(lv, (S7526C3*)(S7526C2*)(S7526C13*), 0, "S7526C12");
    check_base_class_offset(lv, (S7526C2*)(S7526C13*), 0, "S7526C12");
    check_base_class_offset(lv, (S7526C13*), 0, "S7526C12");
    check_base_class_offset(lv, (S7526C3*)(S7526C8*), ABISELECT(1416,860), "S7526C12");
    check_base_class_offset(lv, (S7526C8*)(S7526C7*), ABISELECT(1416,860), "S7526C12");
    check_base_class_offset(lv, (S7526C7*), ABISELECT(976,596), "S7526C12");
    check_field_offset(lv, s7526c12f0, ABISELECT(440,260), "S7526C12.s7526c12f0");
    check_field_offset(lv, s7526c12f1, ABISELECT(456,268), "S7526C12.s7526c12f1");
    check_field_offset(lv, s7526c12f2, ABISELECT(496,304), "S7526C12.s7526c12f2");
    check_field_offset(lv, s7526c12f3, ABISELECT(840,516), "S7526C12.s7526c12f3");
    check_field_offset(lv, s7526c12f4, ABISELECT(912,552), "S7526C12.s7526c12f4");
    check_field_offset(lv, s7526c12f5, ABISELECT(928,560), "S7526C12.s7526c12f5");
    check_field_offset(lv, s7526c12f6, ABISELECT(944,572), "S7526C12.s7526c12f6");
    check_field_offset(lv, s7526c12f7, ABISELECT(952,576), "S7526C12.s7526c12f7");
    check_field_offset(lv, s7526c12f8, ABISELECT(960,584), "S7526C12.s7526c12f8");
    check_field_offset(lv, s7526c12f9, ABISELECT(968,588), "S7526C12.s7526c12f9");
    test_class_info(&lv, &cd_S7526C12);
    dp->~S7526C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7526C12(Test_S7526C12, "S7526C12", ABISELECT(1728,1044));

#else // __cplusplus

extern void _ZN8S7526C12C1Ev();
extern void _ZN8S7526C12D2Ev();
Name_Map name_map_S7526C12[] = {
  NSPAIR(_ZN8S7526C12C1Ev),
  NSPAIR(_ZN8S7526C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C2;
extern VTBL_ENTRY _ZTI7S7526C2[];
extern  VTBL_ENTRY _ZTV7S7526C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C2[];
extern Class_Descriptor cd_S7526C13;
extern VTBL_ENTRY _ZTI8S7526C13[];
extern  VTBL_ENTRY _ZTV8S7526C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C13[];
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C8;
extern VTBL_ENTRY _ZTI7S7526C8[];
extern  VTBL_ENTRY _ZTV7S7526C8[];
extern Class_Descriptor cd_S7526C7;
extern VTBL_ENTRY _ZTI7S7526C7[];
extern  VTBL_ENTRY _ZTV7S7526C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C7[];
static Base_Class bases_S7526C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7526C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7526C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7526C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7526C3,    ABISELECT(1416,860), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7526C8,    ABISELECT(1416,860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7526C7,    ABISELECT(976,596), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7526C12[];
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
extern void _ZN8S7526C12D1Ev();
extern void _ZN8S7526C12D0Ev();
extern void _ZN8S7526C122v9Ev();
extern void _ZN7S7526C72v5Ev();
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY vtc_S7526C12[] = {
  ABISELECT(1416,860),
  ABISELECT(976,596),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7526C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7526C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7526C122v9Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
  0,
  ABISELECT(-1416,-860),
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern VTBL_ENTRY _ZTV8S7526C12[];
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C13__8S7526C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C13[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C28S7526C13__8S7526C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C7__8S7526C12[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__7S7526C7__8S7526C12[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
static  VTT_ENTRY vtt_S7526C12[] = {
  {&(_ZTV8S7526C12[6]),  6,24},
  {&(_tg__ZTV8S7526C13__8S7526C12[4]),  4,10},
  {&(_tg__ZTV7S7526C28S7526C13__8S7526C12[4]),  4,8},
  {&(_tg__ZTV7S7526C28S7526C13__8S7526C12[4]),  4,8},
  {&(_tg__ZTV8S7526C13__8S7526C12[4]),  4,10},
  {&(_ZTV8S7526C12[6]),  6,24},
  {&(_ZTV8S7526C12[19]),  19,24},
  {&(_ZTV8S7526C12[23]),  23,24},
  {&(_tg__ZTV7S7526C7__8S7526C12[3]),  3,4},
  {&(_tg__ZTV7S7526C37S7526C8__7S7526C7__8S7526C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7526C12[];
extern  VTBL_ENTRY _ZTV8S7526C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C12[];
Class_Descriptor cd_S7526C12 = {  "S7526C12", // class name
  bases_S7526C12, 6,
  &(vtc_S7526C12[0]), // expected_vtbl_contents
  &(vtt_S7526C12[0]), // expected_vtt_contents
  ABISELECT(1728,1044), // object size
  NSPAIRA(_ZTI8S7526C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7526C12),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7526C12),10, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7526C15  {
  void *s7526c15f0[2];
  int s7526c15f1[2];
  void *s7526c15f2[15];
  int s7526c15f3;
  ::S7526C7 s7526c15f4;
  virtual void  v10(); // _ZN8S7526C153v10Ev
  virtual void  v11(); // _ZN8S7526C153v11Ev
  ~S7526C15(); // tgen
  S7526C15(); // tgen
};
//SIG(-1 S7526C15) C1{ v1 v2 Fp[2] Fi[2] Fp[15] Fi FC2{ VBC3{ BC4{ v4} Fc[5] FC5{ VBC4 v6 v7 v8 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v3 Fp FL Fp[6] FC4 FC7{ BC4 v5 Fc FL Fi[3] FC3} Fp Fi}}


void  S7526C15 ::v10(){vfunc_called(this, "_ZN8S7526C153v10Ev");}
void  S7526C15 ::v11(){vfunc_called(this, "_ZN8S7526C153v11Ev");}
S7526C15 ::~S7526C15(){ note_dtor("S7526C15", this);} // tgen
S7526C15 ::S7526C15(){ note_ctor("S7526C15", this);} // tgen

static void Test_S7526C15()
{
  extern Class_Descriptor cd_S7526C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(114,134)];
    init_test(&cd_S7526C15, buf);
    S7526C15 *dp, &lv = *(dp=new (buf) S7526C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(904,532), "sizeof(S7526C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7526C15)");
    check_field_offset(lv, s7526c15f0, ABISELECT(8,4), "S7526C15.s7526c15f0");
    check_field_offset(lv, s7526c15f1, ABISELECT(24,12), "S7526C15.s7526c15f1");
    check_field_offset(lv, s7526c15f2, ABISELECT(32,20), "S7526C15.s7526c15f2");
    check_field_offset(lv, s7526c15f3, ABISELECT(152,80), "S7526C15.s7526c15f3");
    check_field_offset(lv, s7526c15f4, ABISELECT(160,84), "S7526C15.s7526c15f4");
    test_class_info(&lv, &cd_S7526C15);
    dp->~S7526C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7526C15(Test_S7526C15, "S7526C15", ABISELECT(904,532));

#else // __cplusplus

extern void _ZN8S7526C15C1Ev();
extern void _ZN8S7526C15D1Ev();
Name_Map name_map_S7526C15[] = {
  NSPAIR(_ZN8S7526C15C1Ev),
  NSPAIR(_ZN8S7526C15D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7526C15[];
extern void _ZN8S7526C153v10Ev();
extern void _ZN8S7526C153v11Ev();
static  VTBL_ENTRY vtc_S7526C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C15[0]),
  (VTBL_ENTRY)&_ZN8S7526C153v10Ev,
  (VTBL_ENTRY)&_ZN8S7526C153v11Ev,
};
extern VTBL_ENTRY _ZTI8S7526C15[];
extern  VTBL_ENTRY _ZTV8S7526C15[];
Class_Descriptor cd_S7526C15 = {  "S7526C15", // class name
  0,0,//no base classes
  &(vtc_S7526C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(904,532), // object size
  NSPAIRA(_ZTI8S7526C15),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7526C15),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7526C10  : S7526C2 , S7526C11 , virtual S7526C12 , virtual S7526C15 , virtual S7526C9 {
  short s7526c10f0;
  ::S2489C12_nt s7526c10f1;
  char s7526c10f2;
  void *s7526c10f3[2];
  int s7526c10f4[2];
  __tsi64 s7526c10f5;
  virtual void  v13(); // _ZN8S7526C103v13Ev
  ~S7526C10(); // tgen
  S7526C10(); // tgen
};
//SIG(-1 S7526C10) C1{ BC2{ VBC3{ v2} v3 v4 v5 Fp[3] FC4{} Fp} BC5{ VBC2 BC6{ VBC7{ BC3 Fc[5] FC2[2] Fi Fp[7] FC2 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v6 Fp FL Fp[6] FC3 FC8{ BC3 v13 Fc FL Fi[3] FC7} Fp Fi} v7 Fp FC3 FL[8] FC2 Fp} VBC9{ VBC3 BC10{ BC2 v8 v9 Fp FC11{ BC12{ BC13{ v14} Fc[5] FC14{ VBC13 v15 v16 v17 Fp[3] FC4 Fp}[2] Fi Fp[7] FC14 FC13 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC13 VBC14 Fi Fp} Fi Fp Fi[2]} VBC6 vd v10 Fp[2] Fi[9] FC8 FC3[9] FL FD Fp FL Fl FL} VBC15{ v11 v12 Fp[2] Fi[2] Fp[15] Fi FC6} VBC8 v1 Fs FC4 Fc Fp[2] Fi[2] FL}


void  S7526C10 ::v13(){vfunc_called(this, "_ZN8S7526C103v13Ev");}
S7526C10 ::~S7526C10(){ note_dtor("S7526C10", this);} // tgen
S7526C10 ::S7526C10(){ note_ctor("S7526C10", this);} // tgen

static void Test_S7526C10()
{
  extern Class_Descriptor cd_S7526C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(232,558)];
    init_test(&cd_S7526C10, buf);
    S7526C10 *dp, &lv = *(dp=new (buf) S7526C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3696,2228), "sizeof(S7526C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7526C10)");
    /*is_ambiguous_... S7526C10::S7526C2 */ AMB_check_base_class_offset(lv, (S7526C3*)(S7526C2*), 0, "S7526C10");
    /*is_ambiguous_... S7526C10::S7526C2 */ AMB_check_base_class_offset(lv, (S7526C3*)(S7526C2*), 0, "S7526C10");
    /*is_ambiguous_... S7526C12::S7526C3 */ AMB_check_base_class_offset(lv, (S7526C3*)(S7526C12*), 0, "S7526C10");
    check_base_class_offset(lv, (S7526C3*)(S7526C2*)(S7526C13*)(S7526C12*), 0, "S7526C10");
    /*is_ambiguous_... S7526C10::S7526C2 */ AMB_check_base_class_offset(lv, (S7526C2*), 0, "S7526C10");
    check_base_class_offset(lv, (S7526C2*)(S7526C11*), ABISELECT(664,416), "S7526C10");
    check_base_class_offset(lv, (S7526C3*)(S7526C8*), ABISELECT(712,440), "S7526C10");
    check_base_class_offset(lv, (S7526C8*)(S7526C7*)(S7526C11*), ABISELECT(712,440), "S7526C10");
    /*is_ambiguous_... S7526C10::S7526C7 */ AMB_check_base_class_offset(lv, (S7526C8*)(S7526C7*), ABISELECT(712,440), "S7526C10");
    check_base_class_offset(lv, (S7526C7*)(S7526C11*), ABISELECT(48,24), "S7526C10");
    check_base_class_offset(lv, (S7526C11*), ABISELECT(48,24), "S7526C10");
    check_base_class_offset(lv, (S7526C2*)(S7526C13*)(S7526C12*), ABISELECT(1024,624), "S7526C10");
    check_base_class_offset(lv, (S7526C13*)(S7526C12*), ABISELECT(1024,624), "S7526C10");
    check_base_class_offset(lv, (S7526C7*)(S7526C12*), ABISELECT(2000,1220), "S7526C10");
    check_base_class_offset(lv, (S7526C12*), ABISELECT(1024,624), "S7526C10");
    check_base_class_offset(lv, (S7526C15*), ABISELECT(2440,1484), "S7526C10");
    check_base_class_offset(lv, (S7526C3*)(S7526C9*), ABISELECT(3344,2016), "S7526C10");
    check_base_class_offset(lv, (S7526C9*), ABISELECT(3344,2016), "S7526C10");
    check_field_offset(lv, s7526c10f0, ABISELECT(624,388), "S7526C10.s7526c10f0");
    check_field_offset(lv, s7526c10f1, ABISELECT(626,390), "S7526C10.s7526c10f1");
    check_field_offset(lv, s7526c10f2, ABISELECT(627,391), "S7526C10.s7526c10f2");
    check_field_offset(lv, s7526c10f3, ABISELECT(632,392), "S7526C10.s7526c10f3");
    check_field_offset(lv, s7526c10f4, ABISELECT(648,400), "S7526C10.s7526c10f4");
    check_field_offset(lv, s7526c10f5, ABISELECT(656,408), "S7526C10.s7526c10f5");
    test_class_info(&lv, &cd_S7526C10);
    dp->~S7526C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7526C10(Test_S7526C10, "S7526C10", ABISELECT(3696,2228));

#else // __cplusplus

extern void _ZN8S7526C10C1Ev();
extern void _ZN8S7526C10D1Ev();
Name_Map name_map_S7526C10[] = {
  NSPAIR(_ZN8S7526C10C1Ev),
  NSPAIR(_ZN8S7526C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C2;
extern VTBL_ENTRY _ZTI7S7526C2[];
extern  VTBL_ENTRY _ZTV7S7526C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C2[];
extern Class_Descriptor cd_S7526C2;
extern VTBL_ENTRY _ZTI7S7526C2[];
extern  VTBL_ENTRY _ZTV7S7526C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C2[];
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C8;
extern VTBL_ENTRY _ZTI7S7526C8[];
extern  VTBL_ENTRY _ZTV7S7526C8[];
extern Class_Descriptor cd_S7526C7;
extern VTBL_ENTRY _ZTI7S7526C7[];
extern  VTBL_ENTRY _ZTV7S7526C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C7[];
extern Class_Descriptor cd_S7526C11;
extern VTBL_ENTRY _ZTI8S7526C11[];
extern  VTBL_ENTRY _ZTV8S7526C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C11[];
extern Class_Descriptor cd_S7526C2;
extern VTBL_ENTRY _ZTI7S7526C2[];
extern  VTBL_ENTRY _ZTV7S7526C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C2[];
extern Class_Descriptor cd_S7526C13;
extern VTBL_ENTRY _ZTI8S7526C13[];
extern  VTBL_ENTRY _ZTV8S7526C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C13[];
extern Class_Descriptor cd_S7526C7;
extern VTBL_ENTRY _ZTI7S7526C7[];
extern  VTBL_ENTRY _ZTV7S7526C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C7[];
extern Class_Descriptor cd_S7526C12;
extern VTBL_ENTRY _ZTI8S7526C12[];
extern  VTBL_ENTRY _ZTV8S7526C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C12[];
extern Class_Descriptor cd_S7526C15;
extern VTBL_ENTRY _ZTI8S7526C15[];
extern  VTBL_ENTRY _ZTV8S7526C15[];
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C9;
extern VTBL_ENTRY _ZTI7S7526C9[];
extern  VTBL_ENTRY _ZTV7S7526C9[];
static Base_Class bases_S7526C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7526C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7526C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7526C2,    ABISELECT(664,416), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7526C3,    ABISELECT(712,440), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7526C8,    ABISELECT(712,440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7526C7,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7526C11,    ABISELECT(48,24), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7526C2,    ABISELECT(1024,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7526C13,    ABISELECT(1024,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7526C7,    ABISELECT(2000,1220), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7526C12,    ABISELECT(1024,624), //bcp->offset
    39, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7526C15,    ABISELECT(2440,1484), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7526C3,    ABISELECT(3344,2016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7526C9,    ABISELECT(3344,2016), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7526C10[];
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C103v13Ev();
extern void _ZN8S7526C10D1Ev();
extern void _ZN8S7526C10D0Ev();
extern void _ZN7S7526C72v5Ev();
extern void _ZN8S7526C112v6Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
extern void ABISELECT(_ZTv0_n96_N8S7526C10D1Ev,_ZTv0_n48_N8S7526C10D1Ev)();
extern void ABISELECT(_ZThn1024_N8S7526C10D1Ev,_ZThn624_N8S7526C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S7526C10D0Ev,_ZTv0_n48_N8S7526C10D0Ev)();
extern void ABISELECT(_ZThn1024_N8S7526C10D0Ev,_ZThn624_N8S7526C10D0Ev)() __attribute__((weak));
extern void _ZN8S7526C122v9Ev();
extern void _ZN7S7526C72v5Ev();
extern void _ZN8S7526C153v10Ev();
extern void _ZN8S7526C153v11Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C93v12Ev();
static  VTBL_ENTRY vtc_S7526C10[] = {
  ABISELECT(3344,2016),
  ABISELECT(2440,1484),
  ABISELECT(2000,1220),
  ABISELECT(1024,624),
  ABISELECT(712,440),
  ABISELECT(664,416),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C103v13Ev,
  (VTBL_ENTRY)&_ZN8S7526C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7526C10D0Ev,
  ABISELECT(-48,-24),
  ABISELECT(616,392),
  ABISELECT(664,416),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7526C112v6Ev,
  0,
  0,
  0,
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  0,
  ABISELECT(-712,-440),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  0,
  ABISELECT(-1024,-624),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-184),
  ABISELECT(976,596),
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7526C10D1Ev,_ZTv0_n48_N8S7526C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7526C10D0Ev,_ZTv0_n48_N8S7526C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7526C122v9Ev,
  0,
  ABISELECT(-1288,-780),
  ABISELECT(-2000,-1220),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
  0,
  0,
  ABISELECT(-2440,-1484),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN8S7526C153v10Ev,
  (VTBL_ENTRY)&_ZN8S7526C153v11Ev,
  0,
  0,
  ABISELECT(-3344,-2016),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C93v12Ev,
};
extern VTBL_ENTRY _ZTV8S7526C10[];
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C2__A__8S7526C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C72v5Ev();
extern void _ZN8S7526C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C11__8S7526C10[] = {
  ABISELECT(-48,-24),
  ABISELECT(616,392),
  ABISELECT(664,416),
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C11[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7526C112v6Ev,
};
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C78S7526C11__8S7526C10[] = {
  ABISELECT(664,416),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__7S7526C78S7526C11__8S7526C10[] = {
  0,
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C2__8S7526C11__8S7526C10[] = {
  0,
  0,
  0,
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  ABISELECT(-616,-392),
  (VTBL_ENTRY)&(_ZTI8S7526C11[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__8S7526C11__8S7526C10[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S7526C11[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__A1__8S7526C11__8S7526C10[] = {
  0,
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI8S7526C11[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C2__A1__8S7526C10[] = {
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__7S7526C2__A1__8S7526C10[] = {
  0,
  ABISELECT(664,416),
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
extern void _ZN8S7526C12D1Ev();
extern void _ZN8S7526C12D0Ev();
extern void _ZN8S7526C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C12__8S7526C10[] = {
  ABISELECT(-312,-184),
  ABISELECT(976,596),
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7526C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7526C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7526C122v9Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C138S7526C12__8S7526C10[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C13[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C28S7526C138S7526C12__A2__8S7526C10[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__7S7526C28S7526C138S7526C12__A2__8S7526C10[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__8S7526C138S7526C12__8S7526C10[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S7526C13[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__8S7526C12__8S7526C10[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C7__8S7526C12__8S7526C10[] = {
  0,
  ABISELECT(-1288,-780),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__A1__8S7526C12__8S7526C10[] = {
  0,
  ABISELECT(312,184),
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C7__A1__8S7526C10[] = {
  ABISELECT(-1288,-780),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__7S7526C7__A1__8S7526C10[] = {
  0,
  ABISELECT(1288,780),
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
static  VTT_ENTRY vtt_S7526C10[] = {
  {&(_ZTV8S7526C10[10]),  10,78},
  {&(_tg__ZTV7S7526C2__A__8S7526C10[4]),  4,8},
  {&(_tg__ZTV7S7526C2__A__8S7526C10[4]),  4,8},
  {&(_tg__ZTV8S7526C11__8S7526C10[5]),  5,7},
  {&(_tg__ZTV7S7526C78S7526C11__8S7526C10[3]),  3,4},
  {&(_tg__ZTV7S7526C37S7526C8__7S7526C78S7526C11__8S7526C10[3]),  3,4},
  {&(_tg__ZTV7S7526C2__8S7526C11__8S7526C10[7]),  7,11},
  {&(_tg__ZTV7S7526C3__8S7526C11__8S7526C10[3]),  3,4},
  {&(_tg__ZTV7S7526C37S7526C8__A1__8S7526C11__8S7526C10[3]),  3,4},
  {&(_ZTV8S7526C10[10]),  10,78},
  {&(_ZTV8S7526C10[22]),  22,78},
  {&(_ZTV8S7526C10[31]),  31,78},
  {&(_ZTV8S7526C10[38]),  38,78},
  {&(_ZTV8S7526C10[52]),  52,78},
  {&(_ZTV8S7526C10[65]),  65,78},
  {&(_ZTV8S7526C10[70]),  70,78},
  {&(_ZTV8S7526C10[76]),  76,78},
  {&(_tg__ZTV7S7526C2__A1__8S7526C10[4]),  4,8},
  {&(_tg__ZTV7S7526C3__7S7526C2__A1__8S7526C10[3]),  3,4},
  {&(_tg__ZTV8S7526C12__8S7526C10[6]),  6,15},
  {&(_tg__ZTV8S7526C138S7526C12__8S7526C10[4]),  4,10},
  {&(_tg__ZTV7S7526C28S7526C138S7526C12__A2__8S7526C10[4]),  4,8},
  {&(_tg__ZTV7S7526C3__7S7526C28S7526C138S7526C12__A2__8S7526C10[3]),  3,4},
  {&(_tg__ZTV7S7526C3__8S7526C138S7526C12__8S7526C10[3]),  3,4},
  {&(_tg__ZTV7S7526C3__8S7526C12__8S7526C10[3]),  3,4},
  {&(_tg__ZTV7S7526C7__8S7526C12__8S7526C10[4]),  4,5},
  {&(_tg__ZTV7S7526C37S7526C8__A1__8S7526C12__8S7526C10[3]),  3,4},
  {&(_tg__ZTV7S7526C7__A1__8S7526C10[3]),  3,4},
  {&(_tg__ZTV7S7526C37S7526C8__7S7526C7__A1__8S7526C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7526C10[];
extern  VTBL_ENTRY _ZTV8S7526C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C10[];
static VTBL_ENTRY alt_thunk_names66[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7526C10D0Ev,_ZTv0_n48_N8S7526C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S7526C10D0Ev,_ZThn624_N8S7526C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7526C10D1Ev,_ZTv0_n48_N8S7526C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S7526C10D1Ev,_ZThn624_N8S7526C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7526C10 = {  "S7526C10", // class name
  bases_S7526C10, 14,
  &(vtc_S7526C10[0]), // expected_vtbl_contents
  &(vtt_S7526C10[0]), // expected_vtt_contents
  ABISELECT(3696,2228), // object size
  NSPAIRA(_ZTI8S7526C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7526C10),78, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7526C10),29, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names66,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7526C16  : S7526C12 , S7526C9 {
  void *s7526c16f0;
  __tsi64 s7526c16f1[3];
  int s7526c16f2;
  __tsi64 s7526c16f3;
  virtual  ~S7526C16(); // _ZN8S7526C16D2Ev
  virtual void  v14(); // _ZN8S7526C163v14Ev
  S7526C16(); // tgen
};
//SIG(-1 S7526C16) C1{ BC2{ VBC3{ v2} BC4{ BC5{ VBC3 v3 v4 v5 Fp[3] FC6{} Fp} v6 v7 Fp FC7{ BC8{ BC9{ v11} Fc[5] FC10{ VBC9 v12 v13 v14 Fp[3] FC6 Fp}[2] Fi Fp[7] FC10 FC9 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC9 VBC10 Fi Fp} Fi Fp Fi[2]} VBC11{ VBC12{ BC3 Fc[5] FC5[2] Fi Fp[7] FC5 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC3 FC13{ BC3 v10 Fc FL Fi[3] FC12} Fp Fi} vd v9 Fp[2] Fi[9] FC13 FC3[9] FL FD Fp FL Fl FL} BC13 vd v1 Fp FL[3] Fi FL}


 S7526C16 ::~S7526C16(){ note_dtor("S7526C16", this);}
void  S7526C16 ::v14(){vfunc_called(this, "_ZN8S7526C163v14Ev");}
S7526C16 ::S7526C16(){ note_ctor("S7526C16", this);} // tgen

static void Test_S7526C16()
{
  extern Class_Descriptor cd_S7526C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(133,325)];
    init_test(&cd_S7526C16, buf);
    S7526C16 *dp, &lv = *(dp=new (buf) S7526C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2112,1296), "sizeof(S7526C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7526C16)");
    /*is_ambiguous_... S7526C12::S7526C3 */ AMB_check_base_class_offset(lv, (S7526C3*)(S7526C12*), 0, "S7526C16");
    check_base_class_offset(lv, (S7526C3*)(S7526C2*)(S7526C13*)(S7526C12*), 0, "S7526C16");
    check_base_class_offset(lv, (S7526C2*)(S7526C13*)(S7526C12*), 0, "S7526C16");
    check_base_class_offset(lv, (S7526C13*)(S7526C12*), 0, "S7526C16");
    check_base_class_offset(lv, (S7526C3*)(S7526C8*), ABISELECT(1808,1112), "S7526C16");
    check_base_class_offset(lv, (S7526C8*)(S7526C7*), ABISELECT(1808,1112), "S7526C16");
    check_base_class_offset(lv, (S7526C7*)(S7526C12*), ABISELECT(1368,848), "S7526C16");
    check_base_class_offset(lv, (S7526C12*), 0, "S7526C16");
    check_base_class_offset(lv, (S7526C3*)(S7526C9*), ABISELECT(976,596), "S7526C16");
    check_base_class_offset(lv, (S7526C9*), ABISELECT(976,596), "S7526C16");
    check_field_offset(lv, s7526c16f0, ABISELECT(1320,808), "S7526C16.s7526c16f0");
    check_field_offset(lv, s7526c16f1, ABISELECT(1328,812), "S7526C16.s7526c16f1");
    check_field_offset(lv, s7526c16f2, ABISELECT(1352,836), "S7526C16.s7526c16f2");
    check_field_offset(lv, s7526c16f3, ABISELECT(1360,840), "S7526C16.s7526c16f3");
    test_class_info(&lv, &cd_S7526C16);
    dp->~S7526C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7526C16(Test_S7526C16, "S7526C16", ABISELECT(2112,1296));

#else // __cplusplus

extern void _ZN8S7526C16C1Ev();
extern void _ZN8S7526C16D2Ev();
Name_Map name_map_S7526C16[] = {
  NSPAIR(_ZN8S7526C16C1Ev),
  NSPAIR(_ZN8S7526C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C2;
extern VTBL_ENTRY _ZTI7S7526C2[];
extern  VTBL_ENTRY _ZTV7S7526C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C2[];
extern Class_Descriptor cd_S7526C13;
extern VTBL_ENTRY _ZTI8S7526C13[];
extern  VTBL_ENTRY _ZTV8S7526C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C13[];
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C8;
extern VTBL_ENTRY _ZTI7S7526C8[];
extern  VTBL_ENTRY _ZTV7S7526C8[];
extern Class_Descriptor cd_S7526C7;
extern VTBL_ENTRY _ZTI7S7526C7[];
extern  VTBL_ENTRY _ZTV7S7526C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C7[];
extern Class_Descriptor cd_S7526C12;
extern VTBL_ENTRY _ZTI8S7526C12[];
extern  VTBL_ENTRY _ZTV8S7526C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C12[];
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C9;
extern VTBL_ENTRY _ZTI7S7526C9[];
extern  VTBL_ENTRY _ZTV7S7526C9[];
static Base_Class bases_S7526C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7526C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7526C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7526C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7526C3,    ABISELECT(1808,1112), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7526C8,    ABISELECT(1808,1112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7526C7,    ABISELECT(1368,848), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7526C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7526C3,    ABISELECT(976,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7526C9,    ABISELECT(976,596), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7526C16[];
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
extern void _ZN8S7526C16D1Ev();
extern void _ZN8S7526C16D0Ev();
extern void _ZN8S7526C122v9Ev();
extern void _ZN8S7526C163v14Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C93v12Ev();
extern void _ZN7S7526C72v5Ev();
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY vtc_S7526C16[] = {
  ABISELECT(1808,1112),
  ABISELECT(1368,848),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C16[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7526C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7526C16D0Ev,
  (VTBL_ENTRY)&_ZN8S7526C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7526C163v14Ev,
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S7526C16[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C93v12Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-1368,-848),
  (VTBL_ENTRY)&(_ZTI8S7526C16[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
  0,
  ABISELECT(-1808,-1112),
  (VTBL_ENTRY)&(_ZTI8S7526C16[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern VTBL_ENTRY _ZTV8S7526C16[];
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
extern void _ZN8S7526C12D1Ev();
extern void _ZN8S7526C12D0Ev();
extern void _ZN8S7526C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C12__8S7526C16[] = {
  ABISELECT(1808,1112),
  ABISELECT(1368,848),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7526C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7526C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7526C122v9Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C138S7526C12__8S7526C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C13[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C28S7526C138S7526C12__8S7526C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C7__8S7526C12__8S7526C16[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-1368,-848),
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__A1__8S7526C12__8S7526C16[] = {
  0,
  ABISELECT(-1808,-1112),
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C7__8S7526C16[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__7S7526C7__8S7526C16[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
static  VTT_ENTRY vtt_S7526C16[] = {
  {&(_ZTV8S7526C16[6]),  6,29},
  {&(_tg__ZTV8S7526C12__8S7526C16[6]),  6,15},
  {&(_tg__ZTV8S7526C138S7526C12__8S7526C16[4]),  4,10},
  {&(_tg__ZTV7S7526C28S7526C138S7526C12__8S7526C16[4]),  4,8},
  {&(_tg__ZTV7S7526C28S7526C138S7526C12__8S7526C16[4]),  4,8},
  {&(_tg__ZTV8S7526C138S7526C12__8S7526C16[4]),  4,10},
  {&(_tg__ZTV8S7526C12__8S7526C16[6]),  6,15},
  {&(_tg__ZTV7S7526C7__8S7526C12__8S7526C16[4]),  4,5},
  {&(_tg__ZTV7S7526C37S7526C8__A1__8S7526C12__8S7526C16[3]),  3,4},
  {&(_ZTV8S7526C16[6]),  6,29},
  {&(_ZTV8S7526C16[24]),  24,29},
  {&(_ZTV8S7526C16[28]),  28,29},
  {&(_tg__ZTV7S7526C7__8S7526C16[3]),  3,4},
  {&(_tg__ZTV7S7526C37S7526C8__7S7526C7__8S7526C16[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7526C16[];
extern  VTBL_ENTRY _ZTV8S7526C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C16[];
Class_Descriptor cd_S7526C16 = {  "S7526C16", // class name
  bases_S7526C16, 9,
  &(vtc_S7526C16[0]), // expected_vtbl_contents
  &(vtt_S7526C16[0]), // expected_vtt_contents
  ABISELECT(2112,1296), // object size
  NSPAIRA(_ZTI8S7526C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7526C16),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7526C16),14, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7526C6  : virtual S7526C7 , virtual S7526C10 , virtual S7526C16 {
  short s7526c6f0;
  ::S7525C17 s7526c6f1;
  int s7526c6f2[9];
  virtual  ~S7526C6(); // _ZN7S7526C6D2Ev
  virtual void  v15(); // _ZN7S7526C63v15Ev
  virtual void  v16(); // _ZN7S7526C63v16Ev
  S7526C6(); // tgen
};
//SIG(-1 S7526C6) C1{ VBC2{ VBC3{ BC4{ v3} Fc[5] FC5{ VBC4 v5 v6 v7 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v4 Fp FL Fp[6] FC4 FC7{ BC4 v14 Fc FL Fi[3] FC3} Fp Fi} VBC8{ BC5 BC9{ VBC5 BC2 v8 Fp FC4 FL[8] FC5 Fp} VBC10{ VBC4 BC11{ BC5 v9 v10 Fp FC12{ BC13{ BC14{ v17} Fc[5] FC15{ VBC14 v18 v19 v20 Fp[3] FC6 Fp}[2] Fi Fp[7] FC15 FC14 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC14 VBC15 Fi Fp} Fi Fp Fi[2]} VBC2 vd v11 Fp[2] Fi[9] FC7 FC4[9] FL FD Fp FL Fl FL} VBC16{ v12 v13 Fp[2] Fi[2] Fp[15] Fi FC2} VBC7 v15 Fs FC6 Fc Fp[2] Fi[2] FL} VBC17{ BC10 BC7 vd v16 Fp FL[3] Fi FL} vd v1 v2 Fs FU18{ m FD Fi Fi[3] Fc Fc[2] FL} Fi[9]}


 S7526C6 ::~S7526C6(){ note_dtor("S7526C6", this);}
void  S7526C6 ::v15(){vfunc_called(this, "_ZN7S7526C63v15Ev");}
void  S7526C6 ::v16(){vfunc_called(this, "_ZN7S7526C63v16Ev");}
S7526C6 ::S7526C6(){ note_ctor("S7526C6", this);} // tgen

static void Test_S7526C6()
{
  extern Class_Descriptor cd_S7526C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(322,784)];
    init_test(&cd_S7526C6, buf);
    S7526C6 *dp, &lv = *(dp=new (buf) S7526C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5136,3132), "sizeof(S7526C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7526C6)");
    check_base_class_offset(lv, (S7526C3*)(S7526C8*), ABISELECT(512,320), "S7526C6");
    /*is_ambiguous_... S7526C6::S7526C7 */ AMB_check_base_class_offset(lv, (S7526C8*)(S7526C7*), ABISELECT(512,320), "S7526C6");
    check_base_class_offset(lv, (S7526C8*)(S7526C7*)(S7526C11*)(S7526C10*), ABISELECT(512,320), "S7526C6");
    /*is_ambiguous_... S7526C6::S7526C7 */ AMB_check_base_class_offset(lv, (S7526C7*), ABISELECT(72,56), "S7526C6");
    /*is_ambiguous_... S7526C6::S7526C12 */ AMB_check_base_class_offset(lv, (S7526C7*)(S7526C12*), ABISELECT(72,56), "S7526C6");
    check_base_class_offset(lv, (S7526C7*)(S7526C12*)(S7526C16*), ABISELECT(72,56), "S7526C6");
    /*is_ambiguous_... S7526C10::S7526C2 */ AMB_check_base_class_offset(lv, (S7526C3*)(S7526C2*)(S7526C10*), 0, "S7526C6");
    /*is_ambiguous_... S7526C6::S7526C2 */ AMB_check_base_class_offset(lv, (S7526C3*)(S7526C2*), 0, "S7526C6");
    /*is_ambiguous_... S7526C6::S7526C12 */ AMB_check_base_class_offset(lv, (S7526C3*)(S7526C12*), 0, "S7526C6");
    /*is_ambiguous_... S7526C6::S7526C12 */ AMB_check_base_class_offset(lv, (S7526C3*)(S7526C2*)(S7526C13*)(S7526C12*), 0, "S7526C6");
    /*is_ambiguous_... S7526C12::S7526C3 */ AMB_check_base_class_offset(lv, (S7526C3*)(S7526C12*)(S7526C16*), 0, "S7526C6");
    check_base_class_offset(lv, (S7526C3*)(S7526C2*)(S7526C13*)(S7526C12*)(S7526C16*), 0, "S7526C6");
    /*is_ambiguous_... S7526C10::S7526C2 */ AMB_check_base_class_offset(lv, (S7526C2*)(S7526C10*), ABISELECT(816,504), "S7526C6");
    check_base_class_offset(lv, (S7526C2*)(S7526C11*)(S7526C10*), ABISELECT(1480,920), "S7526C6");
    check_base_class_offset(lv, (S7526C7*)(S7526C11*)(S7526C10*), ABISELECT(864,528), "S7526C6");
    check_base_class_offset(lv, (S7526C11*)(S7526C10*), ABISELECT(864,528), "S7526C6");
    /*is_ambiguous_... S7526C6::S7526C12 */ AMB_check_base_class_offset(lv, (S7526C2*)(S7526C13*)(S7526C12*), ABISELECT(1536,944), "S7526C6");
    /*is_ambiguous_... S7526C6::S7526C12 */ AMB_check_base_class_offset(lv, (S7526C13*)(S7526C12*), ABISELECT(1536,944), "S7526C6");
    check_base_class_offset(lv, (S7526C12*)(S7526C10*), ABISELECT(1536,944), "S7526C6");
    check_base_class_offset(lv, (S7526C15*)(S7526C10*), ABISELECT(2512,1540), "S7526C6");
    /*is_ambiguous_... S7526C6::S7526C9 */ AMB_check_base_class_offset(lv, (S7526C3*)(S7526C9*), ABISELECT(3416,2072), "S7526C6");
    check_base_class_offset(lv, (S7526C9*)(S7526C10*), ABISELECT(3416,2072), "S7526C6");
    check_base_class_offset(lv, (S7526C10*), ABISELECT(816,504), "S7526C6");
    check_base_class_offset(lv, (S7526C2*)(S7526C13*)(S7526C12*)(S7526C16*), ABISELECT(3760,2284), "S7526C6");
    check_base_class_offset(lv, (S7526C13*)(S7526C12*)(S7526C16*), ABISELECT(3760,2284), "S7526C6");
    check_base_class_offset(lv, (S7526C12*)(S7526C16*), ABISELECT(3760,2284), "S7526C6");
    check_base_class_offset(lv, (S7526C3*)(S7526C9*)(S7526C16*), ABISELECT(4736,2880), "S7526C6");
    check_base_class_offset(lv, (S7526C9*)(S7526C16*), ABISELECT(4736,2880), "S7526C6");
    check_base_class_offset(lv, (S7526C16*), ABISELECT(3760,2284), "S7526C6");
    check_field_offset(lv, s7526c6f0, ABISELECT(8,4), "S7526C6.s7526c6f0");
    check_field_offset(lv, s7526c6f1, ABISELECT(16,8), "S7526C6.s7526c6f1");
    check_field_offset(lv, s7526c6f2, ABISELECT(32,20), "S7526C6.s7526c6f2");
    test_class_info(&lv, &cd_S7526C6);
    dp->~S7526C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7526C6(Test_S7526C6, "S7526C6", ABISELECT(5136,3132));

#else // __cplusplus

extern void _ZN7S7526C6C1Ev();
extern void _ZN7S7526C6D2Ev();
Name_Map name_map_S7526C6[] = {
  NSPAIR(_ZN7S7526C6C1Ev),
  NSPAIR(_ZN7S7526C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C8;
extern VTBL_ENTRY _ZTI7S7526C8[];
extern  VTBL_ENTRY _ZTV7S7526C8[];
extern Class_Descriptor cd_S7526C7;
extern VTBL_ENTRY _ZTI7S7526C7[];
extern  VTBL_ENTRY _ZTV7S7526C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C7[];
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C2;
extern VTBL_ENTRY _ZTI7S7526C2[];
extern  VTBL_ENTRY _ZTV7S7526C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C2[];
extern Class_Descriptor cd_S7526C2;
extern VTBL_ENTRY _ZTI7S7526C2[];
extern  VTBL_ENTRY _ZTV7S7526C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C2[];
extern Class_Descriptor cd_S7526C7;
extern VTBL_ENTRY _ZTI7S7526C7[];
extern  VTBL_ENTRY _ZTV7S7526C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C7[];
extern Class_Descriptor cd_S7526C11;
extern VTBL_ENTRY _ZTI8S7526C11[];
extern  VTBL_ENTRY _ZTV8S7526C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C11[];
extern Class_Descriptor cd_S7526C2;
extern VTBL_ENTRY _ZTI7S7526C2[];
extern  VTBL_ENTRY _ZTV7S7526C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C2[];
extern Class_Descriptor cd_S7526C13;
extern VTBL_ENTRY _ZTI8S7526C13[];
extern  VTBL_ENTRY _ZTV8S7526C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C13[];
extern Class_Descriptor cd_S7526C12;
extern VTBL_ENTRY _ZTI8S7526C12[];
extern  VTBL_ENTRY _ZTV8S7526C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C12[];
extern Class_Descriptor cd_S7526C15;
extern VTBL_ENTRY _ZTI8S7526C15[];
extern  VTBL_ENTRY _ZTV8S7526C15[];
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C9;
extern VTBL_ENTRY _ZTI7S7526C9[];
extern  VTBL_ENTRY _ZTV7S7526C9[];
extern Class_Descriptor cd_S7526C10;
extern VTBL_ENTRY _ZTI8S7526C10[];
extern  VTBL_ENTRY _ZTV8S7526C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C10[];
extern Class_Descriptor cd_S7526C2;
extern VTBL_ENTRY _ZTI7S7526C2[];
extern  VTBL_ENTRY _ZTV7S7526C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C2[];
extern Class_Descriptor cd_S7526C13;
extern VTBL_ENTRY _ZTI8S7526C13[];
extern  VTBL_ENTRY _ZTV8S7526C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C13[];
extern Class_Descriptor cd_S7526C12;
extern VTBL_ENTRY _ZTI8S7526C12[];
extern  VTBL_ENTRY _ZTV8S7526C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C12[];
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C9;
extern VTBL_ENTRY _ZTI7S7526C9[];
extern  VTBL_ENTRY _ZTV7S7526C9[];
extern Class_Descriptor cd_S7526C16;
extern VTBL_ENTRY _ZTI8S7526C16[];
extern  VTBL_ENTRY _ZTV8S7526C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C16[];
static Base_Class bases_S7526C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7526C3,    ABISELECT(512,320), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7526C8,    ABISELECT(512,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7526C7,    ABISELECT(72,56), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7526C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7526C2,    ABISELECT(816,504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7526C2,    ABISELECT(1480,920), //bcp->offset
    57, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7526C7,    ABISELECT(864,528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7526C11,    ABISELECT(864,528), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7526C2,    ABISELECT(1536,944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7526C13,    ABISELECT(1536,944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7526C12,    ABISELECT(1536,944), //bcp->offset
    68, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7526C15,    ABISELECT(2512,1540), //bcp->offset
    90, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7526C3,    ABISELECT(3416,2072), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7526C9,    ABISELECT(3416,2072), //bcp->offset
    96, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7526C10,    ABISELECT(816,504), //bcp->offset
    26, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7526C2,    ABISELECT(3760,2284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7526C13,    ABISELECT(3760,2284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7526C12,    ABISELECT(3760,2284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7526C3,    ABISELECT(4736,2880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7526C9,    ABISELECT(4736,2880), //bcp->offset
    127, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7526C16,    ABISELECT(3760,2284), //bcp->offset
    102, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7526C6[];
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C6D1Ev();
extern void _ZN7S7526C6D0Ev();
extern void _ZN7S7526C63v15Ev();
extern void _ZN7S7526C63v16Ev();
extern void _ZN7S7526C72v5Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C103v13Ev();
extern void ABISELECT(_ZTv0_n120_N7S7526C6D1Ev,_ZTv0_n60_N7S7526C6D1Ev)();
extern void ABISELECT(_ZThn816_N7S7526C6D1Ev,_ZThn504_N7S7526C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S7526C6D0Ev,_ZTv0_n60_N7S7526C6D0Ev)();
extern void ABISELECT(_ZThn816_N7S7526C6D0Ev,_ZThn504_N7S7526C6D0Ev)() __attribute__((weak));
extern void _ZN7S7526C72v5Ev();
extern void _ZN8S7526C112v6Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
extern void ABISELECT(_ZTv0_n96_N7S7526C6D1Ev,_ZTv0_n48_N7S7526C6D1Ev)();
extern void ABISELECT(_ZThn1536_N7S7526C6D1Ev,_ZThn944_N7S7526C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7526C6D0Ev,_ZTv0_n48_N7S7526C6D0Ev)();
extern void ABISELECT(_ZThn1536_N7S7526C6D0Ev,_ZThn944_N7S7526C6D0Ev)() __attribute__((weak));
extern void _ZN8S7526C122v9Ev();
extern void _ZN8S7526C153v10Ev();
extern void _ZN8S7526C153v11Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C93v12Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
extern void ABISELECT(_ZTv0_n96_N7S7526C6D1Ev,_ZTv0_n48_N7S7526C6D1Ev)();
extern void ABISELECT(_ZThn3760_N7S7526C6D1Ev,_ZThn2284_N7S7526C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7526C6D0Ev,_ZTv0_n48_N7S7526C6D0Ev)();
extern void ABISELECT(_ZThn3760_N7S7526C6D0Ev,_ZThn2284_N7S7526C6D0Ev)() __attribute__((weak));
extern void _ZN8S7526C122v9Ev();
extern void _ZN8S7526C163v14Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C93v12Ev();
static  VTBL_ENTRY vtc_S7526C6[] = {
  ABISELECT(3760,2284),
  ABISELECT(3416,2072),
  ABISELECT(2512,1540),
  ABISELECT(1536,944),
  ABISELECT(1480,920),
  0,
  ABISELECT(816,504),
  ABISELECT(512,320),
  ABISELECT(72,56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7526C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7526C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7526C63v16Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-72,-56),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
  0,
  ABISELECT(-512,-320),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-816,-504),
  0,
  0,
  0,
  0,
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-816,-504),
  ABISELECT(-816,-504),
  ABISELECT(-816,-504),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C103v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7526C6D1Ev,_ZTv0_n60_N7S7526C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7526C6D0Ev,_ZTv0_n60_N7S7526C6D0Ev),
  ABISELECT(-864,-528),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-864,-528),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7526C112v6Ev,
  0,
  0,
  0,
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  0,
  ABISELECT(-1536,-944),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7526C6D1Ev,_ZTv0_n48_N7S7526C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7526C6D0Ev,_ZTv0_n48_N7S7526C6D0Ev),
  (VTBL_ENTRY)&_ZN8S7526C122v9Ev,
  0,
  0,
  ABISELECT(-2512,-1540),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN8S7526C153v10Ev,
  (VTBL_ENTRY)&_ZN8S7526C153v11Ev,
  0,
  0,
  ABISELECT(-3416,-2072),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C93v12Ev,
  ABISELECT(976,596),
  0,
  0,
  ABISELECT(-3760,-2284),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7526C6D1Ev,_ZTv0_n48_N7S7526C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7526C6D0Ev,_ZTv0_n48_N7S7526C6D0Ev),
  (VTBL_ENTRY)&_ZN8S7526C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7526C163v14Ev,
  ABISELECT(-4736,-2880),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C93v12Ev,
};
extern VTBL_ENTRY _ZTV7S7526C6[];
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C7__7S7526C6[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__7S7526C7__7S7526C6[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C103v13Ev();
extern void _ZN8S7526C10D1Ev();
extern void _ZN8S7526C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C10__7S7526C6[] = {
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-816,-504),
  ABISELECT(-816,-504),
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C103v13Ev,
  (VTBL_ENTRY)&_ZN8S7526C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7526C10D0Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C28S7526C10__7S7526C6[] = {
  ABISELECT(-816,-504),
  ABISELECT(-816,-504),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__7S7526C28S7526C10__7S7526C6[] = {
  0,
  ABISELECT(816,504),
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C72v5Ev();
extern void _ZN8S7526C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C118S7526C10__7S7526C6[] = {
  ABISELECT(-864,-528),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C11[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7526C112v6Ev,
};
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C78S7526C118S7526C10__A1__7S7526C6[] = {
  ABISELECT(-352,-208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__7S7526C78S7526C118S7526C10__A1__7S7526C6[] = {
  0,
  ABISELECT(352,208),
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C2__8S7526C118S7526C10__7S7526C6[] = {
  0,
  0,
  0,
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  ABISELECT(-616,-392),
  (VTBL_ENTRY)&(_ZTI8S7526C11[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__8S7526C118S7526C10__7S7526C6[] = {
  0,
  ABISELECT(864,528),
  (VTBL_ENTRY)&(_ZTI8S7526C11[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__A1__8S7526C118S7526C10__7S7526C6[] = {
  0,
  ABISELECT(352,208),
  (VTBL_ENTRY)&(_ZTI8S7526C11[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__8S7526C10__7S7526C6[] = {
  0,
  ABISELECT(816,504),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C72v5Ev();
extern void _ZN8S7526C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C11__8S7526C10__7S7526C6[] = {
  ABISELECT(-864,-528),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7526C112v6Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C2__A1__8S7526C10__7S7526C6[] = {
  0,
  0,
  0,
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__A1__8S7526C10__7S7526C6[] = {
  0,
  ABISELECT(304,184),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
extern void ABISELECT(_ZTv0_n96_N8S7526C10D1Ev,_ZTv0_n48_N8S7526C10D1Ev)();
extern void ABISELECT(_ZThn720_N8S7526C10D1Ev,_ZThn440_N8S7526C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S7526C10D0Ev,_ZTv0_n48_N8S7526C10D0Ev)();
extern void ABISELECT(_ZThn720_N8S7526C10D0Ev,_ZThn440_N8S7526C10D0Ev)() __attribute__((weak));
extern void _ZN8S7526C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C12__8S7526C10__7S7526C6[] = {
  0,
  ABISELECT(-720,-440),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  ABISELECT(-720,-440),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7526C10D1Ev,_ZTv0_n48_N8S7526C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7526C10D0Ev,_ZTv0_n48_N8S7526C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7526C122v9Ev,
};
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C7__A1__8S7526C10__7S7526C6[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(744,448),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN8S7526C153v10Ev();
extern void _ZN8S7526C153v11Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C15__8S7526C10__7S7526C6[] = {
  0,
  0,
  ABISELECT(-1696,-1036),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN8S7526C153v10Ev,
  (VTBL_ENTRY)&_ZN8S7526C153v11Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C93v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C9__8S7526C10__7S7526C6[] = {
  0,
  0,
  ABISELECT(-2600,-1568),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C93v12Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C2__A1__7S7526C6[] = {
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__7S7526C2__A1__7S7526C6[] = {
  0,
  ABISELECT(1480,920),
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
extern void _ZN8S7526C12D1Ev();
extern void _ZN8S7526C12D0Ev();
extern void _ZN8S7526C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C12__7S7526C6[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7526C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7526C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7526C122v9Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C138S7526C12__7S7526C6[] = {
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C13[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C28S7526C138S7526C12__A2__7S7526C6[] = {
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__7S7526C28S7526C138S7526C12__A2__7S7526C6[] = {
  0,
  ABISELECT(1536,944),
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__8S7526C138S7526C12__7S7526C6[] = {
  0,
  ABISELECT(1536,944),
  (VTBL_ENTRY)&(_ZTI8S7526C13[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__8S7526C12__7S7526C6[] = {
  0,
  ABISELECT(1536,944),
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C7__8S7526C12__7S7526C6[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(1464,888),
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__A1__8S7526C12__7S7526C6[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
extern void _ZN8S7526C16D1Ev();
extern void _ZN8S7526C16D0Ev();
extern void _ZN8S7526C122v9Ev();
extern void _ZN8S7526C163v14Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C16__7S7526C6[] = {
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C16[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7526C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7526C16D0Ev,
  (VTBL_ENTRY)&_ZN8S7526C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7526C163v14Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
extern void _ZN8S7526C12D1Ev();
extern void _ZN8S7526C12D0Ev();
extern void _ZN8S7526C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C128S7526C16__A1__7S7526C6[] = {
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7526C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7526C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7526C122v9Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C138S7526C128S7526C16__A1__7S7526C6[] = {
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C13[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C28S7526C138S7526C128S7526C16__A3__7S7526C6[] = {
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__7S7526C28S7526C138S7526C128S7526C16__A3__7S7526C6[] = {
  0,
  ABISELECT(3760,2284),
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__8S7526C138S7526C128S7526C16__A1__7S7526C6[] = {
  0,
  ABISELECT(3760,2284),
  (VTBL_ENTRY)&(_ZTI8S7526C13[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__8S7526C128S7526C16__A1__7S7526C6[] = {
  0,
  ABISELECT(3760,2284),
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C7__8S7526C128S7526C16__A1__7S7526C6[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(3688,2228),
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__A1__8S7526C128S7526C16__A1__7S7526C6[] = {
  0,
  ABISELECT(3248,1964),
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__8S7526C16__7S7526C6[] = {
  0,
  ABISELECT(3760,2284),
  (VTBL_ENTRY)&(_ZTI8S7526C16[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C7__8S7526C16__7S7526C6[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(3688,2228),
  (VTBL_ENTRY)&(_ZTI8S7526C16[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__A1__8S7526C16__7S7526C6[] = {
  0,
  ABISELECT(3248,1964),
  (VTBL_ENTRY)&(_ZTI8S7526C16[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
static  VTT_ENTRY vtt_S7526C6[] = {
  {&(_ZTV7S7526C6[12]),  12,131},
  {&(_ZTV7S7526C6[21]),  21,131},
  {&(_ZTV7S7526C6[25]),  25,131},
  {&(_ZTV7S7526C6[43]),  43,131},
  {&(_ZTV7S7526C6[12]),  12,131},
  {&(_ZTV7S7526C6[55]),  55,131},
  {&(_ZTV7S7526C6[64]),  64,131},
  {&(_ZTV7S7526C6[81]),  81,131},
  {&(_ZTV7S7526C6[94]),  94,131},
  {&(_ZTV7S7526C6[100]),  100,131},
  {&(_ZTV7S7526C6[117]),  117,131},
  {&(_ZTV7S7526C6[129]),  129,131},
  {&(_tg__ZTV7S7526C7__7S7526C6[3]),  3,4},
  {&(_tg__ZTV7S7526C37S7526C8__7S7526C7__7S7526C6[3]),  3,4},
  {&(_tg__ZTV8S7526C10__7S7526C6[10]),  10,17},
  {&(_tg__ZTV7S7526C28S7526C10__7S7526C6[4]),  4,8},
  {&(_tg__ZTV7S7526C3__7S7526C28S7526C10__7S7526C6[3]),  3,4},
  {&(_tg__ZTV8S7526C118S7526C10__7S7526C6[5]),  5,7},
  {&(_tg__ZTV7S7526C78S7526C118S7526C10__A1__7S7526C6[3]),  3,4},
  {&(_tg__ZTV7S7526C37S7526C8__7S7526C78S7526C118S7526C10__A1__7S7526C6[3]),  3,4},
  {&(_tg__ZTV7S7526C2__8S7526C118S7526C10__7S7526C6[7]),  7,11},
  {&(_tg__ZTV7S7526C3__8S7526C118S7526C10__7S7526C6[3]),  3,4},
  {&(_tg__ZTV7S7526C37S7526C8__A1__8S7526C118S7526C10__7S7526C6[3]),  3,4},
  {&(_tg__ZTV7S7526C3__8S7526C10__7S7526C6[3]),  3,4},
  {&(_tg__ZTV8S7526C11__8S7526C10__7S7526C6[5]),  5,7},
  {&(_tg__ZTV7S7526C2__A1__8S7526C10__7S7526C6[7]),  7,11},
  {&(_tg__ZTV7S7526C37S7526C8__A1__8S7526C10__7S7526C6[3]),  3,4},
  {&(_tg__ZTV8S7526C12__8S7526C10__7S7526C6[13]),  13,22},
  {&(_tg__ZTV7S7526C7__A1__8S7526C10__7S7526C6[4]),  4,5},
  {&(_tg__ZTV8S7526C15__8S7526C10__7S7526C6[4]),  4,6},
  {&(_tg__ZTV7S7526C9__8S7526C10__7S7526C6[4]),  4,6},
  {&(_tg__ZTV7S7526C2__A1__7S7526C6[4]),  4,8},
  {&(_tg__ZTV7S7526C3__7S7526C2__A1__7S7526C6[3]),  3,4},
  {&(_tg__ZTV8S7526C12__7S7526C6[6]),  6,15},
  {&(_tg__ZTV8S7526C138S7526C12__7S7526C6[4]),  4,10},
  {&(_tg__ZTV7S7526C28S7526C138S7526C12__A2__7S7526C6[4]),  4,8},
  {&(_tg__ZTV7S7526C3__7S7526C28S7526C138S7526C12__A2__7S7526C6[3]),  3,4},
  {&(_tg__ZTV7S7526C3__8S7526C138S7526C12__7S7526C6[3]),  3,4},
  {&(_tg__ZTV7S7526C3__8S7526C12__7S7526C6[3]),  3,4},
  {&(_tg__ZTV7S7526C7__8S7526C12__7S7526C6[4]),  4,5},
  {&(_tg__ZTV7S7526C37S7526C8__A1__8S7526C12__7S7526C6[3]),  3,4},
  {&(_tg__ZTV8S7526C16__7S7526C6[6]),  6,16},
  {&(_tg__ZTV8S7526C128S7526C16__A1__7S7526C6[6]),  6,15},
  {&(_tg__ZTV8S7526C138S7526C128S7526C16__A1__7S7526C6[4]),  4,10},
  {&(_tg__ZTV7S7526C28S7526C138S7526C128S7526C16__A3__7S7526C6[4]),  4,8},
  {&(_tg__ZTV7S7526C3__7S7526C28S7526C138S7526C128S7526C16__A3__7S7526C6[3]),  3,4},
  {&(_tg__ZTV7S7526C3__8S7526C138S7526C128S7526C16__A1__7S7526C6[3]),  3,4},
  {&(_tg__ZTV7S7526C3__8S7526C128S7526C16__A1__7S7526C6[3]),  3,4},
  {&(_tg__ZTV7S7526C7__8S7526C128S7526C16__A1__7S7526C6[4]),  4,5},
  {&(_tg__ZTV7S7526C37S7526C8__A1__8S7526C128S7526C16__A1__7S7526C6[3]),  3,4},
  {&(_tg__ZTV7S7526C3__8S7526C16__7S7526C6[3]),  3,4},
  {&(_tg__ZTV7S7526C7__8S7526C16__7S7526C6[4]),  4,5},
  {&(_tg__ZTV7S7526C37S7526C8__A1__8S7526C16__7S7526C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7526C6[];
extern  VTBL_ENTRY _ZTV7S7526C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C6[];
static VTBL_ENTRY alt_thunk_names67[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7526C10D0Ev,_ZTv0_n48_N8S7526C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S7526C10D0Ev,_ZThn440_N8S7526C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7526C10D1Ev,_ZTv0_n48_N8S7526C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S7526C10D1Ev,_ZThn440_N8S7526C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7526C6D0Ev,_ZTv0_n48_N7S7526C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3760_N7S7526C6D0Ev,_ZThn2284_N7S7526C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N7S7526C6D0Ev,_ZThn944_N7S7526C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7526C6D1Ev,_ZTv0_n48_N7S7526C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3760_N7S7526C6D1Ev,_ZThn2284_N7S7526C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N7S7526C6D1Ev,_ZThn944_N7S7526C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7526C6D0Ev,_ZTv0_n60_N7S7526C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N7S7526C6D0Ev,_ZThn504_N7S7526C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7526C6D1Ev,_ZTv0_n60_N7S7526C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N7S7526C6D1Ev,_ZThn504_N7S7526C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7526C6 = {  "S7526C6", // class name
  bases_S7526C6, 21,
  &(vtc_S7526C6[0]), // expected_vtbl_contents
  &(vtt_S7526C6[0]), // expected_vtt_contents
  ABISELECT(5136,3132), // object size
  NSPAIRA(_ZTI7S7526C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7526C6),131, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7526C6),53, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names67,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7526C18  {
  void *s7526c18f0;
  void *s7526c18f1;
  char s7526c18f2;
  char s7526c18f3[9];
  __tsi64 s7526c18f4;
  long double s7526c18f5;
  __tsi64 s7526c18f6:8;
  void *s7526c18f7;
  long double s7526c18f8;
  virtual void  v17(); // _ZN8S7526C183v17Ev
  ~S7526C18(); // tgen
  S7526C18(); // tgen
};
//SIG(-1 S7526C18) C1{ v1 Fp[2] Fc[10] FL FD FL:8 Fp FD}


void  S7526C18 ::v17(){vfunc_called(this, "_ZN8S7526C183v17Ev");}
S7526C18 ::~S7526C18(){ note_dtor("S7526C18", this);} // tgen
S7526C18 ::S7526C18(){ note_ctor("S7526C18", this);} // tgen

static void Test_S7526C18()
{
  extern Class_Descriptor cd_S7526C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,17)];
    init_test(&cd_S7526C18, buf);
    S7526C18 *dp, &lv = *(dp=new (buf) S7526C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S7526C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7526C18)");
    check_field_offset(lv, s7526c18f0, ABISELECT(8,4), "S7526C18.s7526c18f0");
    check_field_offset(lv, s7526c18f1, ABISELECT(16,8), "S7526C18.s7526c18f1");
    check_field_offset(lv, s7526c18f2, ABISELECT(24,12), "S7526C18.s7526c18f2");
    check_field_offset(lv, s7526c18f3, ABISELECT(25,13), "S7526C18.s7526c18f3");
    check_field_offset(lv, s7526c18f4, ABISELECT(40,24), "S7526C18.s7526c18f4");
    check_field_offset(lv, s7526c18f5, ABISELECT(48,32), "S7526C18.s7526c18f5");
    set_bf_and_test(lv, s7526c18f6, ABISELECT(64,44), 0, 8, 1, "S7526C18");
    set_bf_and_test(lv, s7526c18f6, ABISELECT(64,44), 0, 8, hide_sll(1LL<<7), "S7526C18");
    check_field_offset(lv, s7526c18f7, ABISELECT(72,48), "S7526C18.s7526c18f7");
    check_field_offset(lv, s7526c18f8, ABISELECT(80,52), "S7526C18.s7526c18f8");
    test_class_info(&lv, &cd_S7526C18);
    dp->~S7526C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7526C18(Test_S7526C18, "S7526C18", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN8S7526C18C1Ev();
extern void _ZN8S7526C18D1Ev();
Name_Map name_map_S7526C18[] = {
  NSPAIR(_ZN8S7526C18C1Ev),
  NSPAIR(_ZN8S7526C18D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7526C18[];
extern void _ZN8S7526C183v17Ev();
static  VTBL_ENTRY vtc_S7526C18[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C18[0]),
  (VTBL_ENTRY)&_ZN8S7526C183v17Ev,
};
extern VTBL_ENTRY _ZTI8S7526C18[];
extern  VTBL_ENTRY _ZTV8S7526C18[];
Class_Descriptor cd_S7526C18 = {  "S7526C18", // class name
  0,0,//no base classes
  &(vtc_S7526C18[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI8S7526C18),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7526C18),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7526C1  : S7526C2 , S7526C3 , S19277C17 , virtual S7526C6 {
  void *s7526c1f0;
  __tsi64 s7526c1f1;
  __tsi64 s7526c1f2;
  __tsi64 s7526c1f3;
  __tsi64 s7526c1f4;
  ::S7526C18 s7526c1f5;
  virtual  ~S7526C1(); // _ZN7S7526C1D2Ev
  S7526C1(); // tgen
};
//SIG(1 S7526C1) C1{ BC2{ VBC3{ v1} v2 v3 v4 Fp[3] FC4{} Fp} BC3 BC5{ m Fl Fc} VBC6{ VBC7{ VBC8{ BC3 Fc[5] FC2[2] Fi Fp[7] FC2 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v5 Fp FL Fp[6] FC3 FC9{ BC3 v12 Fc FL Fi[3] FC8} Fp Fi} VBC10{ BC2 BC11{ VBC2 BC7 v6 Fp FC3 FL[8] FC2 Fp} VBC12{ VBC3 BC13{ BC2 v7 v8 Fp FC14{ BC15{ BC16{ v18} Fc[5] FC17{ VBC16 v19 v20 v21 Fp[3] FC4 Fp}[2] Fi Fp[7] FC17 FC16 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC16 VBC17 Fi Fp} Fi Fp Fi[2]} VBC7 vd v9 Fp[2] Fi[9] FC9 FC3[9] FL FD Fp FL Fl FL} VBC18{ v10 v11 Fp[2] Fi[2] Fp[15] Fi FC7} VBC9 v13 Fs FC4 Fc Fp[2] Fi[2] FL} VBC19{ BC12 BC9 vd v14 Fp FL[3] Fi FL} vd v15 v16 Fs FU20{ m FD Fi Fi[3] Fc Fc[2] FL} Fi[9]} vd Fp FL FL FL FL FC21{ v17 Fp Fp Fc Fc[9] FL FD FL:8 Fp FD}}


 S7526C1 ::~S7526C1(){ note_dtor("S7526C1", this);}
S7526C1 ::S7526C1(){ note_ctor("S7526C1", this);} // tgen

static void Test_S7526C1()
{
  extern Class_Descriptor cd_S7526C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(335,818)];
    init_test(&cd_S7526C1, buf);
    S7526C1 *dp, &lv = *(dp=new (buf) S7526C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5344,3268), "sizeof(S7526C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7526C1)");
    /*is_ambiguous_... S7526C1::S7526C2 */ AMB_check_base_class_offset(lv, (S7526C3*)(S7526C2*), 0, "S7526C1");
    /*is_ambiguous_... S7526C10::S7526C2 */ AMB_check_base_class_offset(lv, (S7526C3*)(S7526C2*)(S7526C10*), 0, "S7526C1");
    /*is_ambiguous_... S7526C1::S7526C2 */ AMB_check_base_class_offset(lv, (S7526C3*)(S7526C2*), 0, "S7526C1");
    /*is_ambiguous_... S7526C1::S7526C12 */ AMB_check_base_class_offset(lv, (S7526C3*)(S7526C12*), 0, "S7526C1");
    /*is_ambiguous_... S7526C1::S7526C12 */ AMB_check_base_class_offset(lv, (S7526C3*)(S7526C2*)(S7526C13*)(S7526C12*), 0, "S7526C1");
    /*is_ambiguous_... S7526C12::S7526C3 */ AMB_check_base_class_offset(lv, (S7526C3*)(S7526C12*)(S7526C16*), 0, "S7526C1");
    check_base_class_offset(lv, (S7526C3*)(S7526C2*)(S7526C13*)(S7526C12*)(S7526C16*), 0, "S7526C1");
    /*is_ambiguous_... S7526C1::S7526C2 */ AMB_check_base_class_offset(lv, (S7526C2*), 0, "S7526C1");
    /*is_ambiguous_... S7526C1::S7526C3 */ AMB_check_base_class_offset(lv, (S7526C3*), ABISELECT(48,24), "S7526C1");
    check_base_class_offset(lv, (S19277C17*), ABISELECT(56,28), "S7526C1");
    check_base_class_offset(lv, (S7526C3*)(S7526C8*), ABISELECT(720,456), "S7526C1");
    /*is_ambiguous_... S7526C1::S7526C7 */ AMB_check_base_class_offset(lv, (S7526C8*)(S7526C7*), ABISELECT(720,456), "S7526C1");
    check_base_class_offset(lv, (S7526C8*)(S7526C7*)(S7526C11*)(S7526C10*), ABISELECT(720,456), "S7526C1");
    /*is_ambiguous_... S7526C6::S7526C7 */ AMB_check_base_class_offset(lv, (S7526C7*)(S7526C6*), ABISELECT(280,192), "S7526C1");
    /*is_ambiguous_... S7526C1::S7526C12 */ AMB_check_base_class_offset(lv, (S7526C7*)(S7526C12*), ABISELECT(280,192), "S7526C1");
    check_base_class_offset(lv, (S7526C7*)(S7526C12*)(S7526C16*), ABISELECT(280,192), "S7526C1");
    /*is_ambiguous_... S7526C10::S7526C2 */ AMB_check_base_class_offset(lv, (S7526C2*)(S7526C10*), ABISELECT(1024,640), "S7526C1");
    check_base_class_offset(lv, (S7526C2*)(S7526C11*)(S7526C10*), ABISELECT(1688,1056), "S7526C1");
    check_base_class_offset(lv, (S7526C7*)(S7526C11*)(S7526C10*), ABISELECT(1072,664), "S7526C1");
    check_base_class_offset(lv, (S7526C11*)(S7526C10*), ABISELECT(1072,664), "S7526C1");
    /*is_ambiguous_... S7526C1::S7526C12 */ AMB_check_base_class_offset(lv, (S7526C2*)(S7526C13*)(S7526C12*), ABISELECT(1744,1080), "S7526C1");
    /*is_ambiguous_... S7526C1::S7526C12 */ AMB_check_base_class_offset(lv, (S7526C13*)(S7526C12*), ABISELECT(1744,1080), "S7526C1");
    check_base_class_offset(lv, (S7526C12*)(S7526C10*), ABISELECT(1744,1080), "S7526C1");
    check_base_class_offset(lv, (S7526C15*)(S7526C10*), ABISELECT(2720,1676), "S7526C1");
    /*is_ambiguous_... S7526C1::S7526C9 */ AMB_check_base_class_offset(lv, (S7526C3*)(S7526C9*), ABISELECT(3624,2208), "S7526C1");
    check_base_class_offset(lv, (S7526C9*)(S7526C10*), ABISELECT(3624,2208), "S7526C1");
    check_base_class_offset(lv, (S7526C10*)(S7526C6*), ABISELECT(1024,640), "S7526C1");
    check_base_class_offset(lv, (S7526C2*)(S7526C13*)(S7526C12*)(S7526C16*), ABISELECT(3968,2420), "S7526C1");
    check_base_class_offset(lv, (S7526C13*)(S7526C12*)(S7526C16*), ABISELECT(3968,2420), "S7526C1");
    check_base_class_offset(lv, (S7526C12*)(S7526C16*), ABISELECT(3968,2420), "S7526C1");
    check_base_class_offset(lv, (S7526C3*)(S7526C9*)(S7526C16*), ABISELECT(4944,3016), "S7526C1");
    check_base_class_offset(lv, (S7526C9*)(S7526C16*), ABISELECT(4944,3016), "S7526C1");
    check_base_class_offset(lv, (S7526C16*)(S7526C6*), ABISELECT(3968,2420), "S7526C1");
    check_base_class_offset(lv, (S7526C6*), ABISELECT(208,136), "S7526C1");
    check_field_offset(lv, s7526c1f0, ABISELECT(72,36), "S7526C1.s7526c1f0");
    check_field_offset(lv, s7526c1f1, ABISELECT(80,40), "S7526C1.s7526c1f1");
    check_field_offset(lv, s7526c1f2, ABISELECT(88,48), "S7526C1.s7526c1f2");
    check_field_offset(lv, s7526c1f3, ABISELECT(96,56), "S7526C1.s7526c1f3");
    check_field_offset(lv, s7526c1f4, ABISELECT(104,64), "S7526C1.s7526c1f4");
    check_field_offset(lv, s7526c1f5, ABISELECT(112,72), "S7526C1.s7526c1f5");
    test_class_info(&lv, &cd_S7526C1);
    dp->~S7526C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7526C1(Test_S7526C1, "S7526C1", ABISELECT(5344,3268));

#else // __cplusplus

extern void _ZN7S7526C1C1Ev();
extern void _ZN7S7526C1D2Ev();
Name_Map name_map_S7526C1[] = {
  NSPAIR(_ZN7S7526C1C1Ev),
  NSPAIR(_ZN7S7526C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C2;
extern VTBL_ENTRY _ZTI7S7526C2[];
extern  VTBL_ENTRY _ZTV7S7526C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C2[];
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S19277C17;
extern VTBL_ENTRY _ZTI9S19277C17[];
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C8;
extern VTBL_ENTRY _ZTI7S7526C8[];
extern  VTBL_ENTRY _ZTV7S7526C8[];
extern Class_Descriptor cd_S7526C7;
extern VTBL_ENTRY _ZTI7S7526C7[];
extern  VTBL_ENTRY _ZTV7S7526C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C7[];
extern Class_Descriptor cd_S7526C2;
extern VTBL_ENTRY _ZTI7S7526C2[];
extern  VTBL_ENTRY _ZTV7S7526C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C2[];
extern Class_Descriptor cd_S7526C2;
extern VTBL_ENTRY _ZTI7S7526C2[];
extern  VTBL_ENTRY _ZTV7S7526C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C2[];
extern Class_Descriptor cd_S7526C7;
extern VTBL_ENTRY _ZTI7S7526C7[];
extern  VTBL_ENTRY _ZTV7S7526C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C7[];
extern Class_Descriptor cd_S7526C11;
extern VTBL_ENTRY _ZTI8S7526C11[];
extern  VTBL_ENTRY _ZTV8S7526C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C11[];
extern Class_Descriptor cd_S7526C2;
extern VTBL_ENTRY _ZTI7S7526C2[];
extern  VTBL_ENTRY _ZTV7S7526C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C2[];
extern Class_Descriptor cd_S7526C13;
extern VTBL_ENTRY _ZTI8S7526C13[];
extern  VTBL_ENTRY _ZTV8S7526C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C13[];
extern Class_Descriptor cd_S7526C12;
extern VTBL_ENTRY _ZTI8S7526C12[];
extern  VTBL_ENTRY _ZTV8S7526C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C12[];
extern Class_Descriptor cd_S7526C15;
extern VTBL_ENTRY _ZTI8S7526C15[];
extern  VTBL_ENTRY _ZTV8S7526C15[];
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C9;
extern VTBL_ENTRY _ZTI7S7526C9[];
extern  VTBL_ENTRY _ZTV7S7526C9[];
extern Class_Descriptor cd_S7526C10;
extern VTBL_ENTRY _ZTI8S7526C10[];
extern  VTBL_ENTRY _ZTV8S7526C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C10[];
extern Class_Descriptor cd_S7526C2;
extern VTBL_ENTRY _ZTI7S7526C2[];
extern  VTBL_ENTRY _ZTV7S7526C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C2[];
extern Class_Descriptor cd_S7526C13;
extern VTBL_ENTRY _ZTI8S7526C13[];
extern  VTBL_ENTRY _ZTV8S7526C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C13[];
extern Class_Descriptor cd_S7526C12;
extern VTBL_ENTRY _ZTI8S7526C12[];
extern  VTBL_ENTRY _ZTV8S7526C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C12[];
extern Class_Descriptor cd_S7526C3;
extern VTBL_ENTRY _ZTI7S7526C3[];
extern  VTBL_ENTRY _ZTV7S7526C3[];
extern Class_Descriptor cd_S7526C9;
extern VTBL_ENTRY _ZTI7S7526C9[];
extern  VTBL_ENTRY _ZTV7S7526C9[];
extern Class_Descriptor cd_S7526C16;
extern VTBL_ENTRY _ZTI8S7526C16[];
extern  VTBL_ENTRY _ZTV8S7526C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7526C16[];
extern Class_Descriptor cd_S7526C6;
extern VTBL_ENTRY _ZTI7S7526C6[];
extern  VTBL_ENTRY _ZTV7S7526C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C6[];
static Base_Class bases_S7526C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7526C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7526C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7526C3,    ABISELECT(48,24), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19277C17,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7526C3,    ABISELECT(720,456), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7526C8,    ABISELECT(720,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7526C7,    ABISELECT(280,192), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7526C2,    ABISELECT(1024,640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7526C2,    ABISELECT(1688,1056), //bcp->offset
    82, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7526C7,    ABISELECT(1072,664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7526C11,    ABISELECT(1072,664), //bcp->offset
    75, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7526C2,    ABISELECT(1744,1080), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7526C13,    ABISELECT(1744,1080), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7526C12,    ABISELECT(1744,1080), //bcp->offset
    93, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7526C15,    ABISELECT(2720,1676), //bcp->offset
    115, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7526C3,    ABISELECT(3624,2208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7526C9,    ABISELECT(3624,2208), //bcp->offset
    121, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7526C10,    ABISELECT(1024,640), //bcp->offset
    51, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S7526C2,    ABISELECT(3968,2420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7526C13,    ABISELECT(3968,2420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7526C12,    ABISELECT(3968,2420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7526C3,    ABISELECT(4944,3016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7526C9,    ABISELECT(4944,3016), //bcp->offset
    152, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7526C16,    ABISELECT(3968,2420), //bcp->offset
    127, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S7526C6,    ABISELECT(208,136), //bcp->offset
    22, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7526C1[];
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN7S7526C1D1Ev();
extern void _ZN7S7526C1D0Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C32v1Ev();
extern void ABISELECT(_ZTv0_n104_N7S7526C1D1Ev,_ZTv0_n52_N7S7526C1D1Ev)();
extern void ABISELECT(_ZThn208_N7S7526C1D1Ev,_ZThn136_N7S7526C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7526C1D0Ev,_ZTv0_n52_N7S7526C1D0Ev)();
extern void ABISELECT(_ZThn208_N7S7526C1D0Ev,_ZThn136_N7S7526C1D0Ev)() __attribute__((weak));
extern void _ZN7S7526C63v15Ev();
extern void _ZN7S7526C63v16Ev();
extern void _ZN7S7526C72v5Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C103v13Ev();
extern void ABISELECT(_ZTv0_n120_N7S7526C1D1Ev,_ZTv0_n60_N7S7526C1D1Ev)();
extern void ABISELECT(_ZThn1024_N7S7526C1D1Ev,_ZThn640_N7S7526C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S7526C1D0Ev,_ZTv0_n60_N7S7526C1D0Ev)();
extern void ABISELECT(_ZThn1024_N7S7526C1D0Ev,_ZThn640_N7S7526C1D0Ev)() __attribute__((weak));
extern void _ZN7S7526C72v5Ev();
extern void _ZN8S7526C112v6Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
extern void ABISELECT(_ZTv0_n96_N7S7526C1D1Ev,_ZTv0_n48_N7S7526C1D1Ev)();
extern void ABISELECT(_ZThn1744_N7S7526C1D1Ev,_ZThn1080_N7S7526C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7526C1D0Ev,_ZTv0_n48_N7S7526C1D0Ev)();
extern void ABISELECT(_ZThn1744_N7S7526C1D0Ev,_ZThn1080_N7S7526C1D0Ev)() __attribute__((weak));
extern void _ZN8S7526C122v9Ev();
extern void _ZN8S7526C153v10Ev();
extern void _ZN8S7526C153v11Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C93v12Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
extern void ABISELECT(_ZTv0_n96_N7S7526C1D1Ev,_ZTv0_n48_N7S7526C1D1Ev)();
extern void ABISELECT(_ZThn3968_N7S7526C1D1Ev,_ZThn2420_N7S7526C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7526C1D0Ev,_ZTv0_n48_N7S7526C1D0Ev)();
extern void ABISELECT(_ZThn3968_N7S7526C1D0Ev,_ZThn2420_N7S7526C1D0Ev)() __attribute__((weak));
extern void _ZN8S7526C122v9Ev();
extern void _ZN8S7526C163v14Ev();
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C93v12Ev();
static  VTBL_ENTRY vtc_S7526C1[] = {
  ABISELECT(3968,2420),
  ABISELECT(3624,2208),
  ABISELECT(2720,1676),
  ABISELECT(1744,1080),
  ABISELECT(1688,1056),
  ABISELECT(1024,640),
  ABISELECT(720,456),
  ABISELECT(280,192),
  ABISELECT(208,136),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C1[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN7S7526C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7526C1D0Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7526C1[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  0,
  0,
  ABISELECT(-208,-136),
  ABISELECT(3760,2284),
  ABISELECT(3416,2072),
  ABISELECT(2512,1540),
  ABISELECT(1536,944),
  ABISELECT(1480,920),
  ABISELECT(-208,-136),
  ABISELECT(816,504),
  ABISELECT(512,320),
  ABISELECT(72,56),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI7S7526C1[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7526C1D1Ev,_ZTv0_n52_N7S7526C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7526C1D0Ev,_ZTv0_n52_N7S7526C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7526C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7526C63v16Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-280,-192),
  (VTBL_ENTRY)&(_ZTI7S7526C1[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
  0,
  ABISELECT(-720,-456),
  (VTBL_ENTRY)&(_ZTI7S7526C1[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-1024,-640),
  0,
  0,
  0,
  0,
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-1024,-640),
  ABISELECT(-1024,-640),
  ABISELECT(-1024,-640),
  (VTBL_ENTRY)&(_ZTI7S7526C1[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C103v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7526C1D1Ev,_ZTv0_n60_N7S7526C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7526C1D0Ev,_ZTv0_n60_N7S7526C1D0Ev),
  ABISELECT(-1072,-664),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-1072,-664),
  (VTBL_ENTRY)&(_ZTI7S7526C1[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7526C112v6Ev,
  0,
  0,
  0,
  ABISELECT(-1688,-1056),
  ABISELECT(-1688,-1056),
  ABISELECT(-1688,-1056),
  (VTBL_ENTRY)&(_ZTI7S7526C1[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  0,
  ABISELECT(-1744,-1080),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1744,-1080),
  ABISELECT(-1744,-1080),
  ABISELECT(-1744,-1080),
  (VTBL_ENTRY)&(_ZTI7S7526C1[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7526C1D1Ev,_ZTv0_n48_N7S7526C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7526C1D0Ev,_ZTv0_n48_N7S7526C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7526C122v9Ev,
  0,
  0,
  ABISELECT(-2720,-1676),
  (VTBL_ENTRY)&(_ZTI7S7526C1[0]),
  (VTBL_ENTRY)&_ZN8S7526C153v10Ev,
  (VTBL_ENTRY)&_ZN8S7526C153v11Ev,
  0,
  0,
  ABISELECT(-3624,-2208),
  (VTBL_ENTRY)&(_ZTI7S7526C1[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C93v12Ev,
  ABISELECT(976,596),
  0,
  0,
  ABISELECT(-3968,-2420),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3968,-2420),
  ABISELECT(-3968,-2420),
  ABISELECT(-3968,-2420),
  (VTBL_ENTRY)&(_ZTI7S7526C1[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7526C1D1Ev,_ZTv0_n48_N7S7526C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7526C1D0Ev,_ZTv0_n48_N7S7526C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7526C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7526C163v14Ev,
  ABISELECT(-4944,-3016),
  (VTBL_ENTRY)&(_ZTI7S7526C1[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C93v12Ev,
};
extern VTBL_ENTRY _ZTV7S7526C1[];
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C2__A__7S7526C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C6D1Ev();
extern void _ZN7S7526C6D0Ev();
extern void _ZN7S7526C63v15Ev();
extern void _ZN7S7526C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C6__7S7526C1[] = {
  ABISELECT(3760,2284),
  ABISELECT(3416,2072),
  ABISELECT(2512,1540),
  ABISELECT(1536,944),
  ABISELECT(1480,920),
  ABISELECT(-208,-136),
  ABISELECT(816,504),
  ABISELECT(512,320),
  ABISELECT(72,56),
  ABISELECT(-208,-136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7526C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7526C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7526C63v16Ev,
};
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C7__7S7526C6__7S7526C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-72,-56),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__7S7526C6__7S7526C1[] = {
  0,
  ABISELECT(-512,-320),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C103v13Ev();
extern void ABISELECT(_ZTv0_n120_N7S7526C6D1Ev,_ZTv0_n60_N7S7526C6D1Ev)();
extern void ABISELECT(_ZThn816_N7S7526C6D1Ev,_ZThn504_N7S7526C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S7526C6D0Ev,_ZTv0_n60_N7S7526C6D0Ev)();
extern void ABISELECT(_ZThn816_N7S7526C6D0Ev,_ZThn504_N7S7526C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7526C10__7S7526C6__7S7526C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-816,-504),
  0,
  0,
  0,
  0,
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-1024,-640),
  ABISELECT(-1024,-640),
  ABISELECT(-816,-504),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C103v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7526C6D1Ev,_ZTv0_n60_N7S7526C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7526C6D0Ev,_ZTv0_n60_N7S7526C6D0Ev),
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__A1__7S7526C6__7S7526C1[] = {
  0,
  ABISELECT(208,136),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C72v5Ev();
extern void _ZN8S7526C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C118S7526C10__7S7526C6__7S7526C1[] = {
  ABISELECT(-1072,-664),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-864,-528),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7526C112v6Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C2__A1__7S7526C6__7S7526C1[] = {
  0,
  0,
  0,
  ABISELECT(-1688,-1056),
  ABISELECT(-1688,-1056),
  ABISELECT(-1480,-920),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
extern void ABISELECT(_ZTv0_n96_N7S7526C6D1Ev,_ZTv0_n48_N7S7526C6D1Ev)();
extern void ABISELECT(_ZThn1536_N7S7526C6D1Ev,_ZThn944_N7S7526C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7526C6D0Ev,_ZTv0_n48_N7S7526C6D0Ev)();
extern void ABISELECT(_ZThn1536_N7S7526C6D0Ev,_ZThn944_N7S7526C6D0Ev)() __attribute__((weak));
extern void _ZN8S7526C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C12__7S7526C6__7S7526C1[] = {
  0,
  ABISELECT(-1536,-944),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1744,-1080),
  ABISELECT(-1744,-1080),
  ABISELECT(-1536,-944),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7526C6D1Ev,_ZTv0_n48_N7S7526C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7526C6D0Ev,_ZTv0_n48_N7S7526C6D0Ev),
  (VTBL_ENTRY)&_ZN8S7526C122v9Ev,
};
extern void _ZN8S7526C153v10Ev();
extern void _ZN8S7526C153v11Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C15__7S7526C6__7S7526C1[] = {
  0,
  0,
  ABISELECT(-2512,-1540),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN8S7526C153v10Ev,
  (VTBL_ENTRY)&_ZN8S7526C153v11Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C93v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C9__7S7526C6__7S7526C1[] = {
  0,
  0,
  ABISELECT(-3416,-2072),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C93v12Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
extern void ABISELECT(_ZTv0_n96_N7S7526C6D1Ev,_ZTv0_n48_N7S7526C6D1Ev)();
extern void ABISELECT(_ZThn3760_N7S7526C6D1Ev,_ZThn2284_N7S7526C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7526C6D0Ev,_ZTv0_n48_N7S7526C6D0Ev)();
extern void ABISELECT(_ZThn3760_N7S7526C6D0Ev,_ZThn2284_N7S7526C6D0Ev)() __attribute__((weak));
extern void _ZN8S7526C122v9Ev();
extern void _ZN8S7526C163v14Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C16__7S7526C6__7S7526C1[] = {
  ABISELECT(976,596),
  0,
  0,
  ABISELECT(-3760,-2284),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3968,-2420),
  ABISELECT(-3968,-2420),
  ABISELECT(-3760,-2284),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7526C6D1Ev,_ZTv0_n48_N7S7526C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7526C6D0Ev,_ZTv0_n48_N7S7526C6D0Ev),
  (VTBL_ENTRY)&_ZN8S7526C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7526C163v14Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C93v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C98S7526C16__A1__7S7526C6__7S7526C1[] = {
  ABISELECT(-4736,-2880),
  (VTBL_ENTRY)&(_ZTI7S7526C6[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C93v12Ev,
};
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C7__7S7526C1[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__7S7526C7__7S7526C1[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C103v13Ev();
extern void _ZN8S7526C10D1Ev();
extern void _ZN8S7526C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C10__7S7526C1[] = {
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-1024,-640),
  ABISELECT(-1024,-640),
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C103v13Ev,
  (VTBL_ENTRY)&_ZN8S7526C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7526C10D0Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C28S7526C10__A1__7S7526C1[] = {
  ABISELECT(-1024,-640),
  ABISELECT(-1024,-640),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__7S7526C28S7526C10__A1__7S7526C1[] = {
  0,
  ABISELECT(1024,640),
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C72v5Ev();
extern void _ZN8S7526C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C118S7526C10__7S7526C1[] = {
  ABISELECT(-1072,-664),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C11[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7526C112v6Ev,
};
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C78S7526C118S7526C10__A1__7S7526C1[] = {
  ABISELECT(-352,-208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__7S7526C78S7526C118S7526C10__A1__7S7526C1[] = {
  0,
  ABISELECT(352,208),
  (VTBL_ENTRY)&(_ZTI7S7526C7[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C2__8S7526C118S7526C10__7S7526C1[] = {
  0,
  0,
  0,
  ABISELECT(-1688,-1056),
  ABISELECT(-1688,-1056),
  ABISELECT(-616,-392),
  (VTBL_ENTRY)&(_ZTI8S7526C11[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__8S7526C118S7526C10__7S7526C1[] = {
  0,
  ABISELECT(1072,664),
  (VTBL_ENTRY)&(_ZTI8S7526C11[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__A1__8S7526C118S7526C10__7S7526C1[] = {
  0,
  ABISELECT(352,208),
  (VTBL_ENTRY)&(_ZTI8S7526C11[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__8S7526C10__7S7526C1[] = {
  0,
  ABISELECT(1024,640),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C72v5Ev();
extern void _ZN8S7526C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C11__8S7526C10__7S7526C1[] = {
  ABISELECT(-1072,-664),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
  (VTBL_ENTRY)&_ZN8S7526C112v6Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C2__A1__8S7526C10__7S7526C1[] = {
  0,
  0,
  0,
  ABISELECT(-1688,-1056),
  ABISELECT(-1688,-1056),
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__A1__8S7526C10__7S7526C1[] = {
  0,
  ABISELECT(304,184),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
extern void ABISELECT(_ZTv0_n96_N8S7526C10D1Ev,_ZTv0_n48_N8S7526C10D1Ev)();
extern void ABISELECT(_ZThn720_N8S7526C10D1Ev,_ZThn440_N8S7526C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S7526C10D0Ev,_ZTv0_n48_N8S7526C10D0Ev)();
extern void ABISELECT(_ZThn720_N8S7526C10D0Ev,_ZThn440_N8S7526C10D0Ev)() __attribute__((weak));
extern void _ZN8S7526C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C12__8S7526C10__7S7526C1[] = {
  0,
  ABISELECT(-720,-440),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1744,-1080),
  ABISELECT(-1744,-1080),
  ABISELECT(-720,-440),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7526C10D1Ev,_ZTv0_n48_N8S7526C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7526C10D0Ev,_ZTv0_n48_N8S7526C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7526C122v9Ev,
};
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C7__A1__8S7526C10__7S7526C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(744,448),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN8S7526C153v10Ev();
extern void _ZN8S7526C153v11Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C15__8S7526C10__7S7526C1[] = {
  0,
  0,
  ABISELECT(-1696,-1036),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN8S7526C153v10Ev,
  (VTBL_ENTRY)&_ZN8S7526C153v11Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C93v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C9__8S7526C10__7S7526C1[] = {
  0,
  0,
  ABISELECT(-2600,-1568),
  (VTBL_ENTRY)&(_ZTI8S7526C10[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C93v12Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C2__A2__7S7526C1[] = {
  ABISELECT(-1688,-1056),
  ABISELECT(-1688,-1056),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__7S7526C2__A2__7S7526C1[] = {
  0,
  ABISELECT(1688,1056),
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
extern void _ZN8S7526C12D1Ev();
extern void _ZN8S7526C12D0Ev();
extern void _ZN8S7526C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C12__7S7526C1[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1744,-1080),
  ABISELECT(-1744,-1080),
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7526C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7526C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7526C122v9Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C138S7526C12__7S7526C1[] = {
  ABISELECT(-1744,-1080),
  ABISELECT(-1744,-1080),
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C13[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C28S7526C138S7526C12__A3__7S7526C1[] = {
  ABISELECT(-1744,-1080),
  ABISELECT(-1744,-1080),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__7S7526C28S7526C138S7526C12__A3__7S7526C1[] = {
  0,
  ABISELECT(1744,1080),
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__8S7526C138S7526C12__7S7526C1[] = {
  0,
  ABISELECT(1744,1080),
  (VTBL_ENTRY)&(_ZTI8S7526C13[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__8S7526C12__7S7526C1[] = {
  0,
  ABISELECT(1744,1080),
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C7__8S7526C12__7S7526C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(1464,888),
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__A1__8S7526C12__7S7526C1[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
extern void _ZN8S7526C16D1Ev();
extern void _ZN8S7526C16D0Ev();
extern void _ZN8S7526C122v9Ev();
extern void _ZN8S7526C163v14Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C16__7S7526C1[] = {
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3968,-2420),
  ABISELECT(-3968,-2420),
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C16[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7526C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7526C16D0Ev,
  (VTBL_ENTRY)&_ZN8S7526C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7526C163v14Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
extern void _ZN8S7526C12D1Ev();
extern void _ZN8S7526C12D0Ev();
extern void _ZN8S7526C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C128S7526C16__A1__7S7526C1[] = {
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3968,-2420),
  ABISELECT(-3968,-2420),
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
  (VTBL_ENTRY)&_ZN8S7526C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7526C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7526C122v9Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
extern void _ZN8S7526C132v7Ev();
extern void _ZN8S7526C132v8Ev();
static  VTBL_ENTRY _tg__ZTV8S7526C138S7526C128S7526C16__A1__7S7526C1[] = {
  ABISELECT(-3968,-2420),
  ABISELECT(-3968,-2420),
  0,
  (VTBL_ENTRY)&(_ZTI8S7526C13[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7526C132v8Ev,
};
extern void _ZN7S7526C32v1Ev();
extern void _ZN7S7526C22v2Ev();
extern void _ZN7S7526C22v3Ev();
extern void _ZN7S7526C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C28S7526C138S7526C128S7526C16__A4__7S7526C1[] = {
  ABISELECT(-3968,-2420),
  ABISELECT(-3968,-2420),
  0,
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7526C22v4Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__7S7526C28S7526C138S7526C128S7526C16__A4__7S7526C1[] = {
  0,
  ABISELECT(3968,2420),
  (VTBL_ENTRY)&(_ZTI7S7526C2[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__8S7526C138S7526C128S7526C16__A1__7S7526C1[] = {
  0,
  ABISELECT(3968,2420),
  (VTBL_ENTRY)&(_ZTI8S7526C13[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__8S7526C128S7526C16__A1__7S7526C1[] = {
  0,
  ABISELECT(3968,2420),
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C7__8S7526C128S7526C16__A1__7S7526C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(3688,2228),
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__A1__8S7526C128S7526C16__A1__7S7526C1[] = {
  0,
  ABISELECT(3248,1964),
  (VTBL_ENTRY)&(_ZTI8S7526C12[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C3__8S7526C16__7S7526C1[] = {
  0,
  ABISELECT(3968,2420),
  (VTBL_ENTRY)&(_ZTI8S7526C16[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
extern void _ZN7S7526C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C7__8S7526C16__7S7526C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(3688,2228),
  (VTBL_ENTRY)&(_ZTI8S7526C16[0]),
  (VTBL_ENTRY)&_ZN7S7526C72v5Ev,
};
extern void _ZN7S7526C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7526C37S7526C8__A1__8S7526C16__7S7526C1[] = {
  0,
  ABISELECT(3248,1964),
  (VTBL_ENTRY)&(_ZTI8S7526C16[0]),
  (VTBL_ENTRY)&_ZN7S7526C32v1Ev,
};
static  VTT_ENTRY vtt_S7526C1[] = {
  {&(_ZTV7S7526C1[13]),  13,156},
  {&(_tg__ZTV7S7526C2__A__7S7526C1[4]),  4,8},
  {&(_tg__ZTV7S7526C2__A__7S7526C1[4]),  4,8},
  {&(_ZTV7S7526C1[13]),  13,156},
  {&(_ZTV7S7526C1[37]),  37,156},
  {&(_ZTV7S7526C1[46]),  46,156},
  {&(_ZTV7S7526C1[50]),  50,156},
  {&(_ZTV7S7526C1[68]),  68,156},
  {&(_ZTV7S7526C1[80]),  80,156},
  {&(_ZTV7S7526C1[89]),  89,156},
  {&(_ZTV7S7526C1[106]),  106,156},
  {&(_ZTV7S7526C1[119]),  119,156},
  {&(_ZTV7S7526C1[125]),  125,156},
  {&(_ZTV7S7526C1[142]),  142,156},
  {&(_ZTV7S7526C1[154]),  154,156},
  {&(_tg__ZTV7S7526C6__7S7526C1[12]),  12,17},
  {&(_tg__ZTV7S7526C7__7S7526C6__7S7526C1[4]),  4,5},
  {&(_tg__ZTV7S7526C37S7526C8__7S7526C6__7S7526C1[3]),  3,4},
  {&(_tg__ZTV8S7526C10__7S7526C6__7S7526C1[17]),  17,24},
  {&(_tg__ZTV7S7526C3__A1__7S7526C6__7S7526C1[3]),  3,4},
  {&(_tg__ZTV8S7526C118S7526C10__7S7526C6__7S7526C1[5]),  5,7},
  {&(_tg__ZTV7S7526C2__A1__7S7526C6__7S7526C1[7]),  7,11},
  {&(_tg__ZTV8S7526C12__7S7526C6__7S7526C1[13]),  13,22},
  {&(_tg__ZTV8S7526C15__7S7526C6__7S7526C1[4]),  4,6},
  {&(_tg__ZTV7S7526C9__7S7526C6__7S7526C1[4]),  4,6},
  {&(_tg__ZTV8S7526C16__7S7526C6__7S7526C1[15]),  15,25},
  {&(_tg__ZTV7S7526C98S7526C16__A1__7S7526C6__7S7526C1[2]),  2,4},
  {&(_tg__ZTV7S7526C7__7S7526C1[3]),  3,4},
  {&(_tg__ZTV7S7526C37S7526C8__7S7526C7__7S7526C1[3]),  3,4},
  {&(_tg__ZTV8S7526C10__7S7526C1[10]),  10,17},
  {&(_tg__ZTV7S7526C28S7526C10__A1__7S7526C1[4]),  4,8},
  {&(_tg__ZTV7S7526C3__7S7526C28S7526C10__A1__7S7526C1[3]),  3,4},
  {&(_tg__ZTV8S7526C118S7526C10__7S7526C1[5]),  5,7},
  {&(_tg__ZTV7S7526C78S7526C118S7526C10__A1__7S7526C1[3]),  3,4},
  {&(_tg__ZTV7S7526C37S7526C8__7S7526C78S7526C118S7526C10__A1__7S7526C1[3]),  3,4},
  {&(_tg__ZTV7S7526C2__8S7526C118S7526C10__7S7526C1[7]),  7,11},
  {&(_tg__ZTV7S7526C3__8S7526C118S7526C10__7S7526C1[3]),  3,4},
  {&(_tg__ZTV7S7526C37S7526C8__A1__8S7526C118S7526C10__7S7526C1[3]),  3,4},
  {&(_tg__ZTV7S7526C3__8S7526C10__7S7526C1[3]),  3,4},
  {&(_tg__ZTV8S7526C11__8S7526C10__7S7526C1[5]),  5,7},
  {&(_tg__ZTV7S7526C2__A1__8S7526C10__7S7526C1[7]),  7,11},
  {&(_tg__ZTV7S7526C37S7526C8__A1__8S7526C10__7S7526C1[3]),  3,4},
  {&(_tg__ZTV8S7526C12__8S7526C10__7S7526C1[13]),  13,22},
  {&(_tg__ZTV7S7526C7__A1__8S7526C10__7S7526C1[4]),  4,5},
  {&(_tg__ZTV8S7526C15__8S7526C10__7S7526C1[4]),  4,6},
  {&(_tg__ZTV7S7526C9__8S7526C10__7S7526C1[4]),  4,6},
  {&(_tg__ZTV7S7526C2__A2__7S7526C1[4]),  4,8},
  {&(_tg__ZTV7S7526C3__7S7526C2__A2__7S7526C1[3]),  3,4},
  {&(_tg__ZTV8S7526C12__7S7526C1[6]),  6,15},
  {&(_tg__ZTV8S7526C138S7526C12__7S7526C1[4]),  4,10},
  {&(_tg__ZTV7S7526C28S7526C138S7526C12__A3__7S7526C1[4]),  4,8},
  {&(_tg__ZTV7S7526C3__7S7526C28S7526C138S7526C12__A3__7S7526C1[3]),  3,4},
  {&(_tg__ZTV7S7526C3__8S7526C138S7526C12__7S7526C1[3]),  3,4},
  {&(_tg__ZTV7S7526C3__8S7526C12__7S7526C1[3]),  3,4},
  {&(_tg__ZTV7S7526C7__8S7526C12__7S7526C1[4]),  4,5},
  {&(_tg__ZTV7S7526C37S7526C8__A1__8S7526C12__7S7526C1[3]),  3,4},
  {&(_tg__ZTV8S7526C16__7S7526C1[6]),  6,16},
  {&(_tg__ZTV8S7526C128S7526C16__A1__7S7526C1[6]),  6,15},
  {&(_tg__ZTV8S7526C138S7526C128S7526C16__A1__7S7526C1[4]),  4,10},
  {&(_tg__ZTV7S7526C28S7526C138S7526C128S7526C16__A4__7S7526C1[4]),  4,8},
  {&(_tg__ZTV7S7526C3__7S7526C28S7526C138S7526C128S7526C16__A4__7S7526C1[3]),  3,4},
  {&(_tg__ZTV7S7526C3__8S7526C138S7526C128S7526C16__A1__7S7526C1[3]),  3,4},
  {&(_tg__ZTV7S7526C3__8S7526C128S7526C16__A1__7S7526C1[3]),  3,4},
  {&(_tg__ZTV7S7526C7__8S7526C128S7526C16__A1__7S7526C1[4]),  4,5},
  {&(_tg__ZTV7S7526C37S7526C8__A1__8S7526C128S7526C16__A1__7S7526C1[3]),  3,4},
  {&(_tg__ZTV7S7526C3__8S7526C16__7S7526C1[3]),  3,4},
  {&(_tg__ZTV7S7526C7__8S7526C16__7S7526C1[4]),  4,5},
  {&(_tg__ZTV7S7526C37S7526C8__A1__8S7526C16__7S7526C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7526C1[];
extern  VTBL_ENTRY _ZTV7S7526C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7526C1[];
static VTBL_ENTRY alt_thunk_names68[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7526C10D0Ev,_ZTv0_n48_N8S7526C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S7526C10D0Ev,_ZThn440_N8S7526C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7526C10D1Ev,_ZTv0_n48_N8S7526C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S7526C10D1Ev,_ZThn440_N8S7526C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7526C6D0Ev,_ZTv0_n48_N7S7526C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3760_N7S7526C6D0Ev,_ZThn2284_N7S7526C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N7S7526C6D0Ev,_ZThn944_N7S7526C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7526C6D1Ev,_ZTv0_n48_N7S7526C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3760_N7S7526C6D1Ev,_ZThn2284_N7S7526C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N7S7526C6D1Ev,_ZThn944_N7S7526C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7526C6D0Ev,_ZTv0_n60_N7S7526C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N7S7526C6D0Ev,_ZThn504_N7S7526C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7526C6D1Ev,_ZTv0_n60_N7S7526C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N7S7526C6D1Ev,_ZThn504_N7S7526C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7526C1D0Ev,_ZTv0_n48_N7S7526C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3968_N7S7526C1D0Ev,_ZThn2420_N7S7526C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1744_N7S7526C1D0Ev,_ZThn1080_N7S7526C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7526C1D1Ev,_ZTv0_n48_N7S7526C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3968_N7S7526C1D1Ev,_ZThn2420_N7S7526C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1744_N7S7526C1D1Ev,_ZThn1080_N7S7526C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7526C1D0Ev,_ZTv0_n60_N7S7526C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7526C1D0Ev,_ZThn640_N7S7526C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7526C1D1Ev,_ZTv0_n60_N7S7526C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7526C1D1Ev,_ZThn640_N7S7526C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7526C1D0Ev,_ZTv0_n52_N7S7526C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7526C1D0Ev,_ZThn136_N7S7526C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7526C1D1Ev,_ZTv0_n52_N7S7526C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7526C1D1Ev,_ZThn136_N7S7526C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7526C1 = {  "S7526C1", // class name
  bases_S7526C1, 25,
  &(vtc_S7526C1[0]), // expected_vtbl_contents
  &(vtt_S7526C1[0]), // expected_vtt_contents
  ABISELECT(5344,3268), // object size
  NSPAIRA(_ZTI7S7526C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7526C1),156, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7526C1),68, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names68,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7704C5  {
  virtual void  v2(); // _ZN7S7704C52v2Ev
  ~S7704C5(); // tgen
  S7704C5(); // tgen
};
//SIG(-1 S7704C5) C1{ v1}


void  S7704C5 ::v2(){vfunc_called(this, "_ZN7S7704C52v2Ev");}
S7704C5 ::~S7704C5(){ note_dtor("S7704C5", this);} // tgen
S7704C5 ::S7704C5(){ note_ctor("S7704C5", this);} // tgen

static void Test_S7704C5()
{
  extern Class_Descriptor cd_S7704C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7704C5, buf);
    S7704C5 *dp, &lv = *(dp=new (buf) S7704C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7704C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7704C5)");
    test_class_info(&lv, &cd_S7704C5);
    dp->~S7704C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7704C5(Test_S7704C5, "S7704C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7704C5C1Ev();
extern void _ZN7S7704C5D1Ev();
Name_Map name_map_S7704C5[] = {
  NSPAIR(_ZN7S7704C5C1Ev),
  NSPAIR(_ZN7S7704C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7704C5[];
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY vtc_S7704C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C5[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
Class_Descriptor cd_S7704C5 = {  "S7704C5", // class name
  0,0,//no base classes
  &(vtc_S7704C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7704C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7704C5),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7704C6  : virtual S7704C5 {
  void *s7704c6f0[3];
  ::S2489C12_nt s7704c6f1;
  void *s7704c6f2;
  virtual void  v3(); // _ZN7S7704C62v3Ev
  virtual void  v4(); // _ZN7S7704C62v4Ev
  virtual void  v5(); // _ZN7S7704C62v5Ev
  ~S7704C6(); // tgen
  S7704C6(); // tgen
};
//SIG(-1 S7704C6) C1{ VBC2{ v4} v1 v2 v3 Fp[3] FC3{} Fp}


void  S7704C6 ::v3(){vfunc_called(this, "_ZN7S7704C62v3Ev");}
void  S7704C6 ::v4(){vfunc_called(this, "_ZN7S7704C62v4Ev");}
void  S7704C6 ::v5(){vfunc_called(this, "_ZN7S7704C62v5Ev");}
S7704C6 ::~S7704C6(){ note_dtor("S7704C6", this);} // tgen
S7704C6 ::S7704C6(){ note_ctor("S7704C6", this);} // tgen

static void Test_S7704C6()
{
  extern Class_Descriptor cd_S7704C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7704C6, buf);
    S7704C6 *dp, &lv = *(dp=new (buf) S7704C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7704C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7704C6)");
    check_base_class_offset(lv, (S7704C5*), 0, "S7704C6");
    check_field_offset(lv, s7704c6f0, ABISELECT(8,4), "S7704C6.s7704c6f0");
    check_field_offset(lv, s7704c6f1, ABISELECT(32,16), "S7704C6.s7704c6f1");
    check_field_offset(lv, s7704c6f2, ABISELECT(40,20), "S7704C6.s7704c6f2");
    test_class_info(&lv, &cd_S7704C6);
    dp->~S7704C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7704C6(Test_S7704C6, "S7704C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7704C6C1Ev();
extern void _ZN7S7704C6D1Ev();
Name_Map name_map_S7704C6[] = {
  NSPAIR(_ZN7S7704C6C1Ev),
  NSPAIR(_ZN7S7704C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
static Base_Class bases_S7704C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7704C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7704C6[];
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY vtc_S7704C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern VTBL_ENTRY _ZTV7S7704C6[];
static  VTT_ENTRY vtt_S7704C6[] = {
  {&(_ZTV7S7704C6[4]),  4,8},
  {&(_ZTV7S7704C6[4]),  4,8},
};
extern VTBL_ENTRY _ZTI7S7704C6[];
extern  VTBL_ENTRY _ZTV7S7704C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C6[];
Class_Descriptor cd_S7704C6 = {  "S7704C6", // class name
  bases_S7704C6, 1,
  &(vtc_S7704C6[0]), // expected_vtbl_contents
  &(vtt_S7704C6[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7704C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7704C6),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7704C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7704C4  : S7704C5 {
  char s7704c4f0[5];
  ::S7704C6 s7704c4f1[2];
  int s7704c4f2;
  void *s7704c4f3[7];
  ::S7704C6 s7704c4f4;
  ::S7704C5 s7704c4f5;
  char s7704c4f6;
  int s7704c4f7;
  short s7704c4f8[5];
  int s7704c4f9[8];
  __tsi64 s7704c4f10;
  char s7704c4f11:8;
  ~S7704C4(); // tgen
  S7704C4(); // tgen
};
//SIG(-1 S7704C4) C1{ BC2{ v1} Fc[5] FC3{ VBC2 v2 v3 v4 Fp[3] FC4{} Fp}[2] Fi Fp[7] FC3 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}


S7704C4 ::~S7704C4(){ note_dtor("S7704C4", this);} // tgen
S7704C4 ::S7704C4(){ note_ctor("S7704C4", this);} // tgen

static void Test_S7704C4()
{
  extern Class_Descriptor cd_S7704C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,47)];
    init_test(&cd_S7704C4, buf);
    S7704C4 *dp, &lv = *(dp=new (buf) S7704C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,184), "sizeof(S7704C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7704C4)");
    check_base_class_offset(lv, (S7704C5*), 0, "S7704C4");
    check_field_offset(lv, s7704c4f0, ABISELECT(8,4), "S7704C4.s7704c4f0");
    check_field_offset(lv, s7704c4f1, ABISELECT(16,12), "S7704C4.s7704c4f1");
    check_field_offset(lv, s7704c4f2, ABISELECT(112,60), "S7704C4.s7704c4f2");
    check_field_offset(lv, s7704c4f3, ABISELECT(120,64), "S7704C4.s7704c4f3");
    check_field_offset(lv, s7704c4f4, ABISELECT(176,92), "S7704C4.s7704c4f4");
    check_field_offset(lv, s7704c4f5, ABISELECT(224,116), "S7704C4.s7704c4f5");
    check_field_offset(lv, s7704c4f6, ABISELECT(232,120), "S7704C4.s7704c4f6");
    check_field_offset(lv, s7704c4f7, ABISELECT(236,124), "S7704C4.s7704c4f7");
    check_field_offset(lv, s7704c4f8, ABISELECT(240,128), "S7704C4.s7704c4f8");
    check_field_offset(lv, s7704c4f9, ABISELECT(252,140), "S7704C4.s7704c4f9");
    check_field_offset(lv, s7704c4f10, ABISELECT(288,172), "S7704C4.s7704c4f10");
    set_bf_and_test(lv, s7704c4f11, ABISELECT(296,180), 0, 8, 1, "S7704C4");
    set_bf_and_test(lv, s7704c4f11, ABISELECT(296,180), 0, 8, hide_sll(1LL<<7), "S7704C4");
    test_class_info(&lv, &cd_S7704C4);
    dp->~S7704C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7704C4(Test_S7704C4, "S7704C4", ABISELECT(304,184));

#else // __cplusplus

extern void _ZN7S7704C4C1Ev();
extern void _ZN7S7704C4D1Ev();
Name_Map name_map_S7704C4[] = {
  NSPAIR(_ZN7S7704C4C1Ev),
  NSPAIR(_ZN7S7704C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
static Base_Class bases_S7704C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7704C5,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7704C4[];
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY vtc_S7704C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C4[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern VTBL_ENTRY _ZTI7S7704C4[];
extern  VTBL_ENTRY _ZTV7S7704C4[];
Class_Descriptor cd_S7704C4 = {  "S7704C4", // class name
  bases_S7704C4, 1,
  &(vtc_S7704C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,184), // object size
  NSPAIRA(_ZTI7S7704C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7704C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7704C8  : S7704C5 {
  char s7704c8f0;
  __tsi64 s7704c8f1;
  int s7704c8f2[3];
  ::S7704C4 s7704c8f3;
  virtual void  v13(); // _ZN7S7704C83v13Ev
  ~S7704C8(); // tgen
  S7704C8(); // tgen
};
//SIG(-1 S7704C8) C1{ BC2{ v2} v1 Fc FL Fi[3] FC3{ BC2 Fc[5] FC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}}


void  S7704C8 ::v13(){vfunc_called(this, "_ZN7S7704C83v13Ev");}
S7704C8 ::~S7704C8(){ note_dtor("S7704C8", this);} // tgen
S7704C8 ::S7704C8(){ note_ctor("S7704C8", this);} // tgen

static void Test_S7704C8()
{
  extern Class_Descriptor cd_S7704C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,54)];
    init_test(&cd_S7704C8, buf);
    S7704C8 *dp, &lv = *(dp=new (buf) S7704C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,212), "sizeof(S7704C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7704C8)");
    check_base_class_offset(lv, (S7704C5*), 0, "S7704C8");
    check_field_offset(lv, s7704c8f0, ABISELECT(8,4), "S7704C8.s7704c8f0");
    check_field_offset(lv, s7704c8f1, ABISELECT(16,8), "S7704C8.s7704c8f1");
    check_field_offset(lv, s7704c8f2, ABISELECT(24,16), "S7704C8.s7704c8f2");
    check_field_offset(lv, s7704c8f3, ABISELECT(40,28), "S7704C8.s7704c8f3");
    test_class_info(&lv, &cd_S7704C8);
    dp->~S7704C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7704C8(Test_S7704C8, "S7704C8", ABISELECT(344,212));

#else // __cplusplus

extern void _ZN7S7704C8C1Ev();
extern void _ZN7S7704C8D1Ev();
Name_Map name_map_S7704C8[] = {
  NSPAIR(_ZN7S7704C8C1Ev),
  NSPAIR(_ZN7S7704C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
static Base_Class bases_S7704C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7704C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7704C8[];
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C83v13Ev();
static  VTBL_ENTRY vtc_S7704C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C8[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C83v13Ev,
};
extern VTBL_ENTRY _ZTI7S7704C8[];
extern  VTBL_ENTRY _ZTV7S7704C8[];
Class_Descriptor cd_S7704C8 = {  "S7704C8", // class name
  bases_S7704C8, 1,
  &(vtc_S7704C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,212), // object size
  NSPAIRA(_ZTI7S7704C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7704C8),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7704C3  : virtual S7704C4 {
  void *s7704c3f0;
  __tsi64 s7704c3f1;
  void *s7704c3f2[6];
  ::S7704C5 s7704c3f3;
  ::S7704C8 s7704c3f4;
  void *s7704c3f5;
  int s7704c3f6;
  virtual void  v6(); // _ZN7S7704C32v6Ev
  ~S7704C3(); // tgen
  S7704C3(); // tgen
};
//SIG(-1 S7704C3) C1{ VBC2{ BC3{ v2} Fc[5] FC4{ VBC3 v4 v5 v6 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v1 Fp FL Fp[6] FC3 FC6{ BC3 v3 Fc FL Fi[3] FC2} Fp Fi}


void  S7704C3 ::v6(){vfunc_called(this, "_ZN7S7704C32v6Ev");}
S7704C3 ::~S7704C3(){ note_dtor("S7704C3", this);} // tgen
S7704C3 ::S7704C3(){ note_ctor("S7704C3", this);} // tgen

static void Test_S7704C3()
{
  extern Class_Descriptor cd_S7704C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(94,113)];
    init_test(&cd_S7704C3, buf);
    S7704C3 *dp, &lv = *(dp=new (buf) S7704C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(744,448), "sizeof(S7704C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7704C3)");
    check_base_class_offset(lv, (S7704C5*)(S7704C4*), ABISELECT(440,264), "S7704C3");
    check_base_class_offset(lv, (S7704C4*), ABISELECT(440,264), "S7704C3");
    check_field_offset(lv, s7704c3f0, ABISELECT(8,4), "S7704C3.s7704c3f0");
    check_field_offset(lv, s7704c3f1, ABISELECT(16,8), "S7704C3.s7704c3f1");
    check_field_offset(lv, s7704c3f2, ABISELECT(24,16), "S7704C3.s7704c3f2");
    check_field_offset(lv, s7704c3f3, ABISELECT(72,40), "S7704C3.s7704c3f3");
    check_field_offset(lv, s7704c3f4, ABISELECT(80,44), "S7704C3.s7704c3f4");
    check_field_offset(lv, s7704c3f5, ABISELECT(424,256), "S7704C3.s7704c3f5");
    check_field_offset(lv, s7704c3f6, ABISELECT(432,260), "S7704C3.s7704c3f6");
    test_class_info(&lv, &cd_S7704C3);
    dp->~S7704C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7704C3(Test_S7704C3, "S7704C3", ABISELECT(744,448));

#else // __cplusplus

extern void _ZN7S7704C3C1Ev();
extern void _ZN7S7704C3D1Ev();
Name_Map name_map_S7704C3[] = {
  NSPAIR(_ZN7S7704C3C1Ev),
  NSPAIR(_ZN7S7704C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C4;
extern VTBL_ENTRY _ZTI7S7704C4[];
extern  VTBL_ENTRY _ZTV7S7704C4[];
static Base_Class bases_S7704C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7704C5,    ABISELECT(440,264), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7704C4,    ABISELECT(440,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7704C3[];
extern void _ZN7S7704C32v6Ev();
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY vtc_S7704C3[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern VTBL_ENTRY _ZTV7S7704C3[];
static  VTT_ENTRY vtt_S7704C3[] = {
  {&(_ZTV7S7704C3[3]),  3,8},
  {&(_ZTV7S7704C3[7]),  7,8},
};
extern VTBL_ENTRY _ZTI7S7704C3[];
extern  VTBL_ENTRY _ZTV7S7704C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C3[];
Class_Descriptor cd_S7704C3 = {  "S7704C3", // class name
  bases_S7704C3, 2,
  &(vtc_S7704C3[0]), // expected_vtbl_contents
  &(vtt_S7704C3[0]), // expected_vtt_contents
  ABISELECT(744,448), // object size
  NSPAIRA(_ZTI7S7704C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7704C3),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7704C3),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7704C10  : virtual S7704C6 , S7704C3 {
  void *s7704c10f0;
  ::S7704C5 s7704c10f1;
  __tsi64 s7704c10f2[8];
  ::S7704C6 s7704c10f3;
  void *s7704c10f4;
  virtual void  v7(); // _ZN8S7704C102v7Ev
  ~S7704C10(); // tgen
  S7704C10(); // tgen
};
//SIG(-1 S7704C10) C1{ VBC2{ VBC3{ v2} v3 v4 v5 Fp[3] FC4{} Fp} BC5{ VBC6{ BC3 Fc[5] FC2[2] Fi Fp[7] FC2 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v6 Fp FL Fp[6] FC3 FC7{ BC3 v7 Fc FL Fi[3] FC6} Fp Fi} v1 Fp FC3 FL[8] FC2 Fp}


void  S7704C10 ::v7(){vfunc_called(this, "_ZN8S7704C102v7Ev");}
S7704C10 ::~S7704C10(){ note_dtor("S7704C10", this);} // tgen
S7704C10 ::S7704C10(){ note_ctor("S7704C10", this);} // tgen

static void Test_S7704C10()
{
  extern Class_Descriptor cd_S7704C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(117,144)];
    init_test(&cd_S7704C10, buf);
    S7704C10 *dp, &lv = *(dp=new (buf) S7704C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(928,572), "sizeof(S7704C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7704C10)");
    check_base_class_offset(lv, (S7704C5*)(S7704C6*), ABISELECT(576,364), "S7704C10");
    check_base_class_offset(lv, (S7704C6*), ABISELECT(576,364), "S7704C10");
    check_base_class_offset(lv, (S7704C5*)(S7704C4*), ABISELECT(624,388), "S7704C10");
    check_base_class_offset(lv, (S7704C4*)(S7704C3*), ABISELECT(624,388), "S7704C10");
    check_base_class_offset(lv, (S7704C3*), 0, "S7704C10");
    check_field_offset(lv, s7704c10f0, ABISELECT(440,264), "S7704C10.s7704c10f0");
    check_field_offset(lv, s7704c10f1, ABISELECT(448,268), "S7704C10.s7704c10f1");
    check_field_offset(lv, s7704c10f2, ABISELECT(456,272), "S7704C10.s7704c10f2");
    check_field_offset(lv, s7704c10f3, ABISELECT(520,336), "S7704C10.s7704c10f3");
    check_field_offset(lv, s7704c10f4, ABISELECT(568,360), "S7704C10.s7704c10f4");
    test_class_info(&lv, &cd_S7704C10);
    dp->~S7704C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7704C10(Test_S7704C10, "S7704C10", ABISELECT(928,572));

#else // __cplusplus

extern void _ZN8S7704C10C1Ev();
extern void _ZN8S7704C10D1Ev();
Name_Map name_map_S7704C10[] = {
  NSPAIR(_ZN8S7704C10C1Ev),
  NSPAIR(_ZN8S7704C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C6;
extern VTBL_ENTRY _ZTI7S7704C6[];
extern  VTBL_ENTRY _ZTV7S7704C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C6[];
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C4;
extern VTBL_ENTRY _ZTI7S7704C4[];
extern  VTBL_ENTRY _ZTV7S7704C4[];
extern Class_Descriptor cd_S7704C3;
extern VTBL_ENTRY _ZTI7S7704C3[];
extern  VTBL_ENTRY _ZTV7S7704C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C3[];
static Base_Class bases_S7704C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7704C5,    ABISELECT(576,364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7704C6,    ABISELECT(576,364), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7704C5,    ABISELECT(624,388), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7704C4,    ABISELECT(624,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7704C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7704C10[];
extern void _ZN7S7704C32v6Ev();
extern void _ZN8S7704C102v7Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY vtc_S7704C10[] = {
  ABISELECT(576,364),
  ABISELECT(576,364),
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C10[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7704C102v7Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-576,-364),
  (VTBL_ENTRY)&(_ZTI8S7704C10[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI8S7704C10[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S7704C10[];
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C3__8S7704C10[] = {
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__7S7704C3__8S7704C10[] = {
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C6__8S7704C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
static  VTT_ENTRY vtt_S7704C10[] = {
  {&(_ZTV8S7704C10[5]),  5,22},
  {&(_tg__ZTV7S7704C3__8S7704C10[3]),  3,4},
  {&(_tg__ZTV7S7704C57S7704C4__7S7704C3__8S7704C10[3]),  3,4},
  {&(_ZTV8S7704C10[14]),  14,22},
  {&(_ZTV8S7704C10[14]),  14,22},
  {&(_ZTV8S7704C10[21]),  21,22},
  {&(_tg__ZTV7S7704C6__8S7704C10[4]),  4,8},
  {&(_tg__ZTV7S7704C6__8S7704C10[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S7704C10[];
extern  VTBL_ENTRY _ZTV8S7704C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C10[];
Class_Descriptor cd_S7704C10 = {  "S7704C10", // class name
  bases_S7704C10, 5,
  &(vtc_S7704C10[0]), // expected_vtbl_contents
  &(vtt_S7704C10[0]), // expected_vtt_contents
  ABISELECT(928,572), // object size
  NSPAIRA(_ZTI8S7704C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7704C10),22, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7704C10),8, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7704C12  : S7704C6 {
  void *s7704c12f0;
  ::S19277C8 s7704c12f1;
  int s7704c12f2;
  void *s7704c12f3;
  int s7704c12f4[2];
  virtual void  v8(); // _ZN8S7704C122v8Ev
  virtual void  v9(); // _ZN8S7704C122v9Ev
  ~S7704C12(); // tgen
  S7704C12(); // tgen
};
//SIG(-1 S7704C12) C1{ BC2{ VBC3{ v3} v4 v5 v6 Fp[3] FC4{} Fp} v1 v2 Fp FC5{ BC6{ BC7{ v7} Fc[5] FC8{ VBC7 v8 v9 v10 Fp[3] FC4 Fp}[2] Fi Fp[7] FC8 FC7 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC7 VBC8 Fi Fp} Fi Fp Fi[2]}


void  S7704C12 ::v8(){vfunc_called(this, "_ZN8S7704C122v8Ev");}
void  S7704C12 ::v9(){vfunc_called(this, "_ZN8S7704C122v9Ev");}
S7704C12 ::~S7704C12(){ note_dtor("S7704C12", this);} // tgen
S7704C12 ::S7704C12(){ note_ctor("S7704C12", this);} // tgen

static void Test_S7704C12()
{
  extern Class_Descriptor cd_S7704C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(56,66)];
    init_test(&cd_S7704C12, buf);
    S7704C12 *dp, &lv = *(dp=new (buf) S7704C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(440,260), "sizeof(S7704C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7704C12)");
    check_base_class_offset(lv, (S7704C5*)(S7704C6*), 0, "S7704C12");
    check_base_class_offset(lv, (S7704C6*), 0, "S7704C12");
    check_field_offset(lv, s7704c12f0, ABISELECT(48,24), "S7704C12.s7704c12f0");
    check_field_offset(lv, s7704c12f1, ABISELECT(56,28), "S7704C12.s7704c12f1");
    check_field_offset(lv, s7704c12f2, ABISELECT(416,244), "S7704C12.s7704c12f2");
    check_field_offset(lv, s7704c12f3, ABISELECT(424,248), "S7704C12.s7704c12f3");
    check_field_offset(lv, s7704c12f4, ABISELECT(432,252), "S7704C12.s7704c12f4");
    test_class_info(&lv, &cd_S7704C12);
    dp->~S7704C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7704C12(Test_S7704C12, "S7704C12", ABISELECT(440,260));

#else // __cplusplus

extern void _ZN8S7704C12C1Ev();
extern void _ZN8S7704C12D1Ev();
Name_Map name_map_S7704C12[] = {
  NSPAIR(_ZN8S7704C12C1Ev),
  NSPAIR(_ZN8S7704C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C6;
extern VTBL_ENTRY _ZTI7S7704C6[];
extern  VTBL_ENTRY _ZTV7S7704C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C6[];
static Base_Class bases_S7704C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7704C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7704C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7704C12[];
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
static  VTBL_ENTRY vtc_S7704C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C12[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
};
extern VTBL_ENTRY _ZTV8S7704C12[];
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C6__8S7704C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
static  VTT_ENTRY vtt_S7704C12[] = {
  {&(_ZTV8S7704C12[4]),  4,10},
  {&(_tg__ZTV7S7704C6__8S7704C12[4]),  4,8},
  {&(_tg__ZTV7S7704C6__8S7704C12[4]),  4,8},
  {&(_ZTV8S7704C12[4]),  4,10},
};
extern VTBL_ENTRY _ZTI8S7704C12[];
extern  VTBL_ENTRY _ZTV8S7704C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C12[];
Class_Descriptor cd_S7704C12 = {  "S7704C12", // class name
  bases_S7704C12, 2,
  &(vtc_S7704C12[0]), // expected_vtbl_contents
  &(vtt_S7704C12[0]), // expected_vtt_contents
  ABISELECT(440,260), // object size
  NSPAIRA(_ZTI8S7704C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7704C12),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7704C12),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7704C11  : virtual S7704C5 , S7704C12 , virtual S7704C3 {
  void *s7704c11f0[2];
  int s7704c11f1[9];
  ::S7704C8 s7704c11f2;
  ::S7704C5 s7704c11f3[9];
  __tsi64 s7704c11f4;
  long double s7704c11f5;
  void *s7704c11f6;
  __tsi64 s7704c11f7;
  long s7704c11f8;
  __tsi64 s7704c11f9;
  virtual  ~S7704C11(); // _ZN8S7704C11D2Ev
  virtual void  v10(); // _ZN8S7704C113v10Ev
  S7704C11(); // tgen
};
//SIG(-1 S7704C11) C1{ VBC2{ v2} BC3{ BC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp} v6 v7 Fp FC6{ BC7{ BC8{ v9} Fc[5] FC9{ VBC8 v10 v11 v12 Fp[3] FC5 Fp}[2] Fi Fp[7] FC9 FC8 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC8 VBC9 Fi Fp} Fi Fp Fi[2]} VBC10{ VBC11{ BC2 Fc[5] FC4[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC2 FC12{ BC2 v13 Fc FL Fi[3] FC11} Fp Fi} vd v1 Fp[2] Fi[9] FC12 FC2[9] FL FD Fp FL Fl FL}


 S7704C11 ::~S7704C11(){ note_dtor("S7704C11", this);}
void  S7704C11 ::v10(){vfunc_called(this, "_ZN8S7704C113v10Ev");}
S7704C11 ::S7704C11(){ note_ctor("S7704C11", this);} // tgen

static void Test_S7704C11()
{
  extern Class_Descriptor cd_S7704C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(109,262)];
    init_test(&cd_S7704C11, buf);
    S7704C11 *dp, &lv = *(dp=new (buf) S7704C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1728,1044), "sizeof(S7704C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7704C11)");
    /*is_ambiguous_... S7704C11::S7704C5 */ AMB_check_base_class_offset(lv, (S7704C5*), 0, "S7704C11");
    check_base_class_offset(lv, (S7704C5*)(S7704C6*)(S7704C12*), 0, "S7704C11");
    check_base_class_offset(lv, (S7704C6*)(S7704C12*), 0, "S7704C11");
    check_base_class_offset(lv, (S7704C12*), 0, "S7704C11");
    check_base_class_offset(lv, (S7704C5*)(S7704C4*), ABISELECT(1416,860), "S7704C11");
    check_base_class_offset(lv, (S7704C4*)(S7704C3*), ABISELECT(1416,860), "S7704C11");
    check_base_class_offset(lv, (S7704C3*), ABISELECT(976,596), "S7704C11");
    check_field_offset(lv, s7704c11f0, ABISELECT(440,260), "S7704C11.s7704c11f0");
    check_field_offset(lv, s7704c11f1, ABISELECT(456,268), "S7704C11.s7704c11f1");
    check_field_offset(lv, s7704c11f2, ABISELECT(496,304), "S7704C11.s7704c11f2");
    check_field_offset(lv, s7704c11f3, ABISELECT(840,516), "S7704C11.s7704c11f3");
    check_field_offset(lv, s7704c11f4, ABISELECT(912,552), "S7704C11.s7704c11f4");
    check_field_offset(lv, s7704c11f5, ABISELECT(928,560), "S7704C11.s7704c11f5");
    check_field_offset(lv, s7704c11f6, ABISELECT(944,572), "S7704C11.s7704c11f6");
    check_field_offset(lv, s7704c11f7, ABISELECT(952,576), "S7704C11.s7704c11f7");
    check_field_offset(lv, s7704c11f8, ABISELECT(960,584), "S7704C11.s7704c11f8");
    check_field_offset(lv, s7704c11f9, ABISELECT(968,588), "S7704C11.s7704c11f9");
    test_class_info(&lv, &cd_S7704C11);
    dp->~S7704C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7704C11(Test_S7704C11, "S7704C11", ABISELECT(1728,1044));

#else // __cplusplus

extern void _ZN8S7704C11C1Ev();
extern void _ZN8S7704C11D2Ev();
Name_Map name_map_S7704C11[] = {
  NSPAIR(_ZN8S7704C11C1Ev),
  NSPAIR(_ZN8S7704C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C6;
extern VTBL_ENTRY _ZTI7S7704C6[];
extern  VTBL_ENTRY _ZTV7S7704C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C6[];
extern Class_Descriptor cd_S7704C12;
extern VTBL_ENTRY _ZTI8S7704C12[];
extern  VTBL_ENTRY _ZTV8S7704C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C12[];
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C4;
extern VTBL_ENTRY _ZTI7S7704C4[];
extern  VTBL_ENTRY _ZTV7S7704C4[];
extern Class_Descriptor cd_S7704C3;
extern VTBL_ENTRY _ZTI7S7704C3[];
extern  VTBL_ENTRY _ZTV7S7704C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C3[];
static Base_Class bases_S7704C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7704C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7704C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7704C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7704C5,    ABISELECT(1416,860), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7704C4,    ABISELECT(1416,860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7704C3,    ABISELECT(976,596), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7704C11[];
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
extern void _ZN8S7704C11D1Ev();
extern void _ZN8S7704C11D0Ev();
extern void _ZN8S7704C113v10Ev();
extern void _ZN7S7704C32v6Ev();
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY vtc_S7704C11[] = {
  ABISELECT(1416,860),
  ABISELECT(976,596),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7704C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7704C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7704C113v10Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
  0,
  ABISELECT(-1416,-860),
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S7704C11[];
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C12__8S7704C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C12[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C68S7704C12__8S7704C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C3__8S7704C11[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__7S7704C3__8S7704C11[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
static  VTT_ENTRY vtt_S7704C11[] = {
  {&(_ZTV8S7704C11[6]),  6,24},
  {&(_tg__ZTV8S7704C12__8S7704C11[4]),  4,10},
  {&(_tg__ZTV7S7704C68S7704C12__8S7704C11[4]),  4,8},
  {&(_tg__ZTV7S7704C68S7704C12__8S7704C11[4]),  4,8},
  {&(_tg__ZTV8S7704C12__8S7704C11[4]),  4,10},
  {&(_ZTV8S7704C11[6]),  6,24},
  {&(_ZTV8S7704C11[19]),  19,24},
  {&(_ZTV8S7704C11[23]),  23,24},
  {&(_tg__ZTV7S7704C3__8S7704C11[3]),  3,4},
  {&(_tg__ZTV7S7704C57S7704C4__7S7704C3__8S7704C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7704C11[];
extern  VTBL_ENTRY _ZTV8S7704C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C11[];
Class_Descriptor cd_S7704C11 = {  "S7704C11", // class name
  bases_S7704C11, 6,
  &(vtc_S7704C11[0]), // expected_vtbl_contents
  &(vtt_S7704C11[0]), // expected_vtt_contents
  ABISELECT(1728,1044), // object size
  NSPAIRA(_ZTI8S7704C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7704C11),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7704C11),10, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7704C14  {
  void *s7704c14f0[2];
  int s7704c14f1[2];
  void *s7704c14f2[15];
  int s7704c14f3;
  ::S7704C3 s7704c14f4;
  virtual void  v11(); // _ZN8S7704C143v11Ev
  virtual void  v12(); // _ZN8S7704C143v12Ev
  ~S7704C14(); // tgen
  S7704C14(); // tgen
};
//SIG(-1 S7704C14) C1{ v1 v2 Fp[2] Fi[2] Fp[15] Fi FC2{ VBC3{ BC4{ v4} Fc[5] FC5{ VBC4 v6 v7 v8 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v3 Fp FL Fp[6] FC4 FC7{ BC4 v5 Fc FL Fi[3] FC3} Fp Fi}}


void  S7704C14 ::v11(){vfunc_called(this, "_ZN8S7704C143v11Ev");}
void  S7704C14 ::v12(){vfunc_called(this, "_ZN8S7704C143v12Ev");}
S7704C14 ::~S7704C14(){ note_dtor("S7704C14", this);} // tgen
S7704C14 ::S7704C14(){ note_ctor("S7704C14", this);} // tgen

static void Test_S7704C14()
{
  extern Class_Descriptor cd_S7704C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(114,134)];
    init_test(&cd_S7704C14, buf);
    S7704C14 *dp, &lv = *(dp=new (buf) S7704C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(904,532), "sizeof(S7704C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7704C14)");
    check_field_offset(lv, s7704c14f0, ABISELECT(8,4), "S7704C14.s7704c14f0");
    check_field_offset(lv, s7704c14f1, ABISELECT(24,12), "S7704C14.s7704c14f1");
    check_field_offset(lv, s7704c14f2, ABISELECT(32,20), "S7704C14.s7704c14f2");
    check_field_offset(lv, s7704c14f3, ABISELECT(152,80), "S7704C14.s7704c14f3");
    check_field_offset(lv, s7704c14f4, ABISELECT(160,84), "S7704C14.s7704c14f4");
    test_class_info(&lv, &cd_S7704C14);
    dp->~S7704C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7704C14(Test_S7704C14, "S7704C14", ABISELECT(904,532));

#else // __cplusplus

extern void _ZN8S7704C14C1Ev();
extern void _ZN8S7704C14D1Ev();
Name_Map name_map_S7704C14[] = {
  NSPAIR(_ZN8S7704C14C1Ev),
  NSPAIR(_ZN8S7704C14D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7704C14[];
extern void _ZN8S7704C143v11Ev();
extern void _ZN8S7704C143v12Ev();
static  VTBL_ENTRY vtc_S7704C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C14[0]),
  (VTBL_ENTRY)&_ZN8S7704C143v11Ev,
  (VTBL_ENTRY)&_ZN8S7704C143v12Ev,
};
extern VTBL_ENTRY _ZTI8S7704C14[];
extern  VTBL_ENTRY _ZTV8S7704C14[];
Class_Descriptor cd_S7704C14 = {  "S7704C14", // class name
  0,0,//no base classes
  &(vtc_S7704C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(904,532), // object size
  NSPAIRA(_ZTI8S7704C14),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7704C14),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7704C9  : S7704C6 , S7704C10 , virtual S7704C11 , virtual S7704C14 , virtual S7704C8 {
  short s7704c9f0;
  ::S2489C12_nt s7704c9f1;
  char s7704c9f2;
  void *s7704c9f3[2];
  int s7704c9f4[2];
  __tsi64 s7704c9f5;
  virtual void  v14(); // _ZN7S7704C93v14Ev
  ~S7704C9(); // tgen
  S7704C9(); // tgen
};
//SIG(-1 S7704C9) C1{ BC2{ VBC3{ v2} v3 v4 v5 Fp[3] FC4{} Fp} BC5{ VBC2 BC6{ VBC7{ BC3 Fc[5] FC2[2] Fi Fp[7] FC2 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v6 Fp FL Fp[6] FC3 FC8{ BC3 v13 Fc FL Fi[3] FC7} Fp Fi} v7 Fp FC3 FL[8] FC2 Fp} VBC9{ VBC3 BC10{ BC2 v8 v9 Fp FC11{ BC12{ BC13{ v14} Fc[5] FC14{ VBC13 v15 v16 v17 Fp[3] FC4 Fp}[2] Fi Fp[7] FC14 FC13 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC13 VBC14 Fi Fp} Fi Fp Fi[2]} VBC6 vd v10 Fp[2] Fi[9] FC8 FC3[9] FL FD Fp FL Fl FL} VBC15{ v11 v12 Fp[2] Fi[2] Fp[15] Fi FC6} VBC8 v1 Fs FC4 Fc Fp[2] Fi[2] FL}


void  S7704C9 ::v14(){vfunc_called(this, "_ZN7S7704C93v14Ev");}
S7704C9 ::~S7704C9(){ note_dtor("S7704C9", this);} // tgen
S7704C9 ::S7704C9(){ note_ctor("S7704C9", this);} // tgen

static void Test_S7704C9()
{
  extern Class_Descriptor cd_S7704C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(232,558)];
    init_test(&cd_S7704C9, buf);
    S7704C9 *dp, &lv = *(dp=new (buf) S7704C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3696,2228), "sizeof(S7704C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7704C9)");
    /*is_ambiguous_... S7704C9::S7704C6 */ AMB_check_base_class_offset(lv, (S7704C5*)(S7704C6*), 0, "S7704C9");
    /*is_ambiguous_... S7704C9::S7704C6 */ AMB_check_base_class_offset(lv, (S7704C5*)(S7704C6*), 0, "S7704C9");
    /*is_ambiguous_... S7704C11::S7704C5 */ AMB_check_base_class_offset(lv, (S7704C5*)(S7704C11*), 0, "S7704C9");
    check_base_class_offset(lv, (S7704C5*)(S7704C6*)(S7704C12*)(S7704C11*), 0, "S7704C9");
    /*is_ambiguous_... S7704C9::S7704C6 */ AMB_check_base_class_offset(lv, (S7704C6*), 0, "S7704C9");
    check_base_class_offset(lv, (S7704C6*)(S7704C10*), ABISELECT(664,416), "S7704C9");
    check_base_class_offset(lv, (S7704C5*)(S7704C4*), ABISELECT(712,440), "S7704C9");
    check_base_class_offset(lv, (S7704C4*)(S7704C3*)(S7704C10*), ABISELECT(712,440), "S7704C9");
    /*is_ambiguous_... S7704C9::S7704C3 */ AMB_check_base_class_offset(lv, (S7704C4*)(S7704C3*), ABISELECT(712,440), "S7704C9");
    check_base_class_offset(lv, (S7704C3*)(S7704C10*), ABISELECT(48,24), "S7704C9");
    check_base_class_offset(lv, (S7704C10*), ABISELECT(48,24), "S7704C9");
    check_base_class_offset(lv, (S7704C6*)(S7704C12*)(S7704C11*), ABISELECT(1024,624), "S7704C9");
    check_base_class_offset(lv, (S7704C12*)(S7704C11*), ABISELECT(1024,624), "S7704C9");
    check_base_class_offset(lv, (S7704C3*)(S7704C11*), ABISELECT(2000,1220), "S7704C9");
    check_base_class_offset(lv, (S7704C11*), ABISELECT(1024,624), "S7704C9");
    check_base_class_offset(lv, (S7704C14*), ABISELECT(2440,1484), "S7704C9");
    check_base_class_offset(lv, (S7704C5*)(S7704C8*), ABISELECT(3344,2016), "S7704C9");
    check_base_class_offset(lv, (S7704C8*), ABISELECT(3344,2016), "S7704C9");
    check_field_offset(lv, s7704c9f0, ABISELECT(624,388), "S7704C9.s7704c9f0");
    check_field_offset(lv, s7704c9f1, ABISELECT(626,390), "S7704C9.s7704c9f1");
    check_field_offset(lv, s7704c9f2, ABISELECT(627,391), "S7704C9.s7704c9f2");
    check_field_offset(lv, s7704c9f3, ABISELECT(632,392), "S7704C9.s7704c9f3");
    check_field_offset(lv, s7704c9f4, ABISELECT(648,400), "S7704C9.s7704c9f4");
    check_field_offset(lv, s7704c9f5, ABISELECT(656,408), "S7704C9.s7704c9f5");
    test_class_info(&lv, &cd_S7704C9);
    dp->~S7704C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7704C9(Test_S7704C9, "S7704C9", ABISELECT(3696,2228));

#else // __cplusplus

extern void _ZN7S7704C9C1Ev();
extern void _ZN7S7704C9D1Ev();
Name_Map name_map_S7704C9[] = {
  NSPAIR(_ZN7S7704C9C1Ev),
  NSPAIR(_ZN7S7704C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C6;
extern VTBL_ENTRY _ZTI7S7704C6[];
extern  VTBL_ENTRY _ZTV7S7704C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C6[];
extern Class_Descriptor cd_S7704C6;
extern VTBL_ENTRY _ZTI7S7704C6[];
extern  VTBL_ENTRY _ZTV7S7704C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C6[];
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C4;
extern VTBL_ENTRY _ZTI7S7704C4[];
extern  VTBL_ENTRY _ZTV7S7704C4[];
extern Class_Descriptor cd_S7704C3;
extern VTBL_ENTRY _ZTI7S7704C3[];
extern  VTBL_ENTRY _ZTV7S7704C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C3[];
extern Class_Descriptor cd_S7704C10;
extern VTBL_ENTRY _ZTI8S7704C10[];
extern  VTBL_ENTRY _ZTV8S7704C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C10[];
extern Class_Descriptor cd_S7704C6;
extern VTBL_ENTRY _ZTI7S7704C6[];
extern  VTBL_ENTRY _ZTV7S7704C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C6[];
extern Class_Descriptor cd_S7704C12;
extern VTBL_ENTRY _ZTI8S7704C12[];
extern  VTBL_ENTRY _ZTV8S7704C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C12[];
extern Class_Descriptor cd_S7704C3;
extern VTBL_ENTRY _ZTI7S7704C3[];
extern  VTBL_ENTRY _ZTV7S7704C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C3[];
extern Class_Descriptor cd_S7704C11;
extern VTBL_ENTRY _ZTI8S7704C11[];
extern  VTBL_ENTRY _ZTV8S7704C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C11[];
extern Class_Descriptor cd_S7704C14;
extern VTBL_ENTRY _ZTI8S7704C14[];
extern  VTBL_ENTRY _ZTV8S7704C14[];
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C8;
extern VTBL_ENTRY _ZTI7S7704C8[];
extern  VTBL_ENTRY _ZTV7S7704C8[];
static Base_Class bases_S7704C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7704C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7704C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7704C6,    ABISELECT(664,416), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7704C5,    ABISELECT(712,440), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7704C4,    ABISELECT(712,440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7704C3,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7704C10,    ABISELECT(48,24), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7704C6,    ABISELECT(1024,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7704C12,    ABISELECT(1024,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7704C3,    ABISELECT(2000,1220), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7704C11,    ABISELECT(1024,624), //bcp->offset
    39, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7704C14,    ABISELECT(2440,1484), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7704C5,    ABISELECT(3344,2016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7704C8,    ABISELECT(3344,2016), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7704C9[];
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN7S7704C93v14Ev();
extern void _ZN7S7704C9D1Ev();
extern void _ZN7S7704C9D0Ev();
extern void _ZN7S7704C32v6Ev();
extern void _ZN8S7704C102v7Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
extern void ABISELECT(_ZTv0_n96_N7S7704C9D1Ev,_ZTv0_n48_N7S7704C9D1Ev)();
extern void ABISELECT(_ZThn1024_N7S7704C9D1Ev,_ZThn624_N7S7704C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7704C9D0Ev,_ZTv0_n48_N7S7704C9D0Ev)();
extern void ABISELECT(_ZThn1024_N7S7704C9D0Ev,_ZThn624_N7S7704C9D0Ev)() __attribute__((weak));
extern void _ZN8S7704C113v10Ev();
extern void _ZN7S7704C32v6Ev();
extern void _ZN8S7704C143v11Ev();
extern void _ZN8S7704C143v12Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C83v13Ev();
static  VTBL_ENTRY vtc_S7704C9[] = {
  ABISELECT(3344,2016),
  ABISELECT(2440,1484),
  ABISELECT(2000,1220),
  ABISELECT(1024,624),
  ABISELECT(712,440),
  ABISELECT(664,416),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7704C93v14Ev,
  (VTBL_ENTRY)&_ZN7S7704C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7704C9D0Ev,
  ABISELECT(-48,-24),
  ABISELECT(616,392),
  ABISELECT(664,416),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7704C102v7Ev,
  0,
  0,
  0,
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  0,
  ABISELECT(-712,-440),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  0,
  ABISELECT(-1024,-624),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-184),
  ABISELECT(976,596),
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7704C9D1Ev,_ZTv0_n48_N7S7704C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7704C9D0Ev,_ZTv0_n48_N7S7704C9D0Ev),
  (VTBL_ENTRY)&_ZN8S7704C113v10Ev,
  0,
  ABISELECT(-1288,-780),
  ABISELECT(-2000,-1220),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
  0,
  0,
  ABISELECT(-2440,-1484),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN8S7704C143v11Ev,
  (VTBL_ENTRY)&_ZN8S7704C143v12Ev,
  0,
  0,
  ABISELECT(-3344,-2016),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C83v13Ev,
};
extern VTBL_ENTRY _ZTV7S7704C9[];
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C6__A__7S7704C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern void _ZN7S7704C32v6Ev();
extern void _ZN8S7704C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C10__7S7704C9[] = {
  ABISELECT(-48,-24),
  ABISELECT(616,392),
  ABISELECT(664,416),
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C10[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7704C102v7Ev,
};
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C38S7704C10__7S7704C9[] = {
  ABISELECT(664,416),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__7S7704C38S7704C10__7S7704C9[] = {
  0,
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C6__8S7704C10__7S7704C9[] = {
  0,
  0,
  0,
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  ABISELECT(-616,-392),
  (VTBL_ENTRY)&(_ZTI8S7704C10[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__8S7704C10__7S7704C9[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S7704C10[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__A1__8S7704C10__7S7704C9[] = {
  0,
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI8S7704C10[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C6__A1__7S7704C9[] = {
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__7S7704C6__A1__7S7704C9[] = {
  0,
  ABISELECT(664,416),
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
extern void _ZN8S7704C11D1Ev();
extern void _ZN8S7704C11D0Ev();
extern void _ZN8S7704C113v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C11__7S7704C9[] = {
  ABISELECT(-312,-184),
  ABISELECT(976,596),
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7704C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7704C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7704C113v10Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C128S7704C11__7S7704C9[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C12[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C68S7704C128S7704C11__A2__7S7704C9[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__7S7704C68S7704C128S7704C11__A2__7S7704C9[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__8S7704C128S7704C11__7S7704C9[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S7704C12[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__8S7704C11__7S7704C9[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C3__8S7704C11__7S7704C9[] = {
  0,
  ABISELECT(-1288,-780),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__A1__8S7704C11__7S7704C9[] = {
  0,
  ABISELECT(312,184),
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C3__A1__7S7704C9[] = {
  ABISELECT(-1288,-780),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__7S7704C3__A1__7S7704C9[] = {
  0,
  ABISELECT(1288,780),
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
static  VTT_ENTRY vtt_S7704C9[] = {
  {&(_ZTV7S7704C9[10]),  10,78},
  {&(_tg__ZTV7S7704C6__A__7S7704C9[4]),  4,8},
  {&(_tg__ZTV7S7704C6__A__7S7704C9[4]),  4,8},
  {&(_tg__ZTV8S7704C10__7S7704C9[5]),  5,7},
  {&(_tg__ZTV7S7704C38S7704C10__7S7704C9[3]),  3,4},
  {&(_tg__ZTV7S7704C57S7704C4__7S7704C38S7704C10__7S7704C9[3]),  3,4},
  {&(_tg__ZTV7S7704C6__8S7704C10__7S7704C9[7]),  7,11},
  {&(_tg__ZTV7S7704C5__8S7704C10__7S7704C9[3]),  3,4},
  {&(_tg__ZTV7S7704C57S7704C4__A1__8S7704C10__7S7704C9[3]),  3,4},
  {&(_ZTV7S7704C9[10]),  10,78},
  {&(_ZTV7S7704C9[22]),  22,78},
  {&(_ZTV7S7704C9[31]),  31,78},
  {&(_ZTV7S7704C9[38]),  38,78},
  {&(_ZTV7S7704C9[52]),  52,78},
  {&(_ZTV7S7704C9[65]),  65,78},
  {&(_ZTV7S7704C9[70]),  70,78},
  {&(_ZTV7S7704C9[76]),  76,78},
  {&(_tg__ZTV7S7704C6__A1__7S7704C9[4]),  4,8},
  {&(_tg__ZTV7S7704C5__7S7704C6__A1__7S7704C9[3]),  3,4},
  {&(_tg__ZTV8S7704C11__7S7704C9[6]),  6,15},
  {&(_tg__ZTV8S7704C128S7704C11__7S7704C9[4]),  4,10},
  {&(_tg__ZTV7S7704C68S7704C128S7704C11__A2__7S7704C9[4]),  4,8},
  {&(_tg__ZTV7S7704C5__7S7704C68S7704C128S7704C11__A2__7S7704C9[3]),  3,4},
  {&(_tg__ZTV7S7704C5__8S7704C128S7704C11__7S7704C9[3]),  3,4},
  {&(_tg__ZTV7S7704C5__8S7704C11__7S7704C9[3]),  3,4},
  {&(_tg__ZTV7S7704C3__8S7704C11__7S7704C9[4]),  4,5},
  {&(_tg__ZTV7S7704C57S7704C4__A1__8S7704C11__7S7704C9[3]),  3,4},
  {&(_tg__ZTV7S7704C3__A1__7S7704C9[3]),  3,4},
  {&(_tg__ZTV7S7704C57S7704C4__7S7704C3__A1__7S7704C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7704C9[];
extern  VTBL_ENTRY _ZTV7S7704C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C9[];
static VTBL_ENTRY alt_thunk_names69[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7704C9D0Ev,_ZTv0_n48_N7S7704C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7704C9D0Ev,_ZThn624_N7S7704C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7704C9D1Ev,_ZTv0_n48_N7S7704C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7704C9D1Ev,_ZThn624_N7S7704C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7704C9 = {  "S7704C9", // class name
  bases_S7704C9, 14,
  &(vtc_S7704C9[0]), // expected_vtbl_contents
  &(vtt_S7704C9[0]), // expected_vtt_contents
  ABISELECT(3696,2228), // object size
  NSPAIRA(_ZTI7S7704C9),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7704C9),78, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7704C9),29, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names69,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7704C15  : S7704C11 , S7704C8 {
  void *s7704c15f0;
  long s7704c15f1[2];
  __tsi64 s7704c15f2;
  int s7704c15f3;
  __tsi64 s7704c15f4;
  virtual  ~S7704C15(); // _ZN8S7704C15D2Ev
  virtual void  v15(); // _ZN8S7704C153v15Ev
  S7704C15(); // tgen
};
//SIG(-1 S7704C15) C1{ BC2{ VBC3{ v2} BC4{ BC5{ VBC3 v3 v4 v5 Fp[3] FC6{} Fp} v6 v7 Fp FC7{ BC8{ BC9{ v11} Fc[5] FC10{ VBC9 v12 v13 v14 Fp[3] FC6 Fp}[2] Fi Fp[7] FC10 FC9 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC9 VBC10 Fi Fp} Fi Fp Fi[2]} VBC11{ VBC12{ BC3 Fc[5] FC5[2] Fi Fp[7] FC5 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC3 FC13{ BC3 v10 Fc FL Fi[3] FC12} Fp Fi} vd v9 Fp[2] Fi[9] FC13 FC3[9] FL FD Fp FL Fl FL} BC13 vd v1 Fp Fl[2] FL Fi FL}


 S7704C15 ::~S7704C15(){ note_dtor("S7704C15", this);}
void  S7704C15 ::v15(){vfunc_called(this, "_ZN8S7704C153v15Ev");}
S7704C15 ::S7704C15(){ note_ctor("S7704C15", this);} // tgen

static void Test_S7704C15()
{
  extern Class_Descriptor cd_S7704C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(133,323)];
    init_test(&cd_S7704C15, buf);
    S7704C15 *dp, &lv = *(dp=new (buf) S7704C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2112,1288), "sizeof(S7704C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7704C15)");
    /*is_ambiguous_... S7704C11::S7704C5 */ AMB_check_base_class_offset(lv, (S7704C5*)(S7704C11*), 0, "S7704C15");
    check_base_class_offset(lv, (S7704C5*)(S7704C6*)(S7704C12*)(S7704C11*), 0, "S7704C15");
    check_base_class_offset(lv, (S7704C6*)(S7704C12*)(S7704C11*), 0, "S7704C15");
    check_base_class_offset(lv, (S7704C12*)(S7704C11*), 0, "S7704C15");
    check_base_class_offset(lv, (S7704C5*)(S7704C4*), ABISELECT(1808,1104), "S7704C15");
    check_base_class_offset(lv, (S7704C4*)(S7704C3*), ABISELECT(1808,1104), "S7704C15");
    check_base_class_offset(lv, (S7704C3*)(S7704C11*), ABISELECT(1368,840), "S7704C15");
    check_base_class_offset(lv, (S7704C11*), 0, "S7704C15");
    check_base_class_offset(lv, (S7704C5*)(S7704C8*), ABISELECT(976,596), "S7704C15");
    check_base_class_offset(lv, (S7704C8*), ABISELECT(976,596), "S7704C15");
    check_field_offset(lv, s7704c15f0, ABISELECT(1320,808), "S7704C15.s7704c15f0");
    check_field_offset(lv, s7704c15f1, ABISELECT(1328,812), "S7704C15.s7704c15f1");
    check_field_offset(lv, s7704c15f2, ABISELECT(1344,820), "S7704C15.s7704c15f2");
    check_field_offset(lv, s7704c15f3, ABISELECT(1352,828), "S7704C15.s7704c15f3");
    check_field_offset(lv, s7704c15f4, ABISELECT(1360,832), "S7704C15.s7704c15f4");
    test_class_info(&lv, &cd_S7704C15);
    dp->~S7704C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7704C15(Test_S7704C15, "S7704C15", ABISELECT(2112,1288));

#else // __cplusplus

extern void _ZN8S7704C15C1Ev();
extern void _ZN8S7704C15D2Ev();
Name_Map name_map_S7704C15[] = {
  NSPAIR(_ZN8S7704C15C1Ev),
  NSPAIR(_ZN8S7704C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C6;
extern VTBL_ENTRY _ZTI7S7704C6[];
extern  VTBL_ENTRY _ZTV7S7704C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C6[];
extern Class_Descriptor cd_S7704C12;
extern VTBL_ENTRY _ZTI8S7704C12[];
extern  VTBL_ENTRY _ZTV8S7704C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C12[];
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C4;
extern VTBL_ENTRY _ZTI7S7704C4[];
extern  VTBL_ENTRY _ZTV7S7704C4[];
extern Class_Descriptor cd_S7704C3;
extern VTBL_ENTRY _ZTI7S7704C3[];
extern  VTBL_ENTRY _ZTV7S7704C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C3[];
extern Class_Descriptor cd_S7704C11;
extern VTBL_ENTRY _ZTI8S7704C11[];
extern  VTBL_ENTRY _ZTV8S7704C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C11[];
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C8;
extern VTBL_ENTRY _ZTI7S7704C8[];
extern  VTBL_ENTRY _ZTV7S7704C8[];
static Base_Class bases_S7704C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7704C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7704C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7704C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7704C5,    ABISELECT(1808,1104), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7704C4,    ABISELECT(1808,1104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7704C3,    ABISELECT(1368,840), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7704C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7704C5,    ABISELECT(976,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7704C8,    ABISELECT(976,596), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7704C15[];
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
extern void _ZN8S7704C15D1Ev();
extern void _ZN8S7704C15D0Ev();
extern void _ZN8S7704C113v10Ev();
extern void _ZN8S7704C153v15Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C83v13Ev();
extern void _ZN7S7704C32v6Ev();
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY vtc_S7704C15[] = {
  ABISELECT(1808,1104),
  ABISELECT(1368,840),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C15[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7704C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7704C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7704C113v10Ev,
  (VTBL_ENTRY)&_ZN8S7704C153v15Ev,
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S7704C15[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C83v13Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-1368,-840),
  (VTBL_ENTRY)&(_ZTI8S7704C15[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
  0,
  ABISELECT(-1808,-1104),
  (VTBL_ENTRY)&(_ZTI8S7704C15[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S7704C15[];
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
extern void _ZN8S7704C11D1Ev();
extern void _ZN8S7704C11D0Ev();
extern void _ZN8S7704C113v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C11__8S7704C15[] = {
  ABISELECT(1808,1104),
  ABISELECT(1368,840),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7704C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7704C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7704C113v10Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C128S7704C11__8S7704C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C12[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C68S7704C128S7704C11__8S7704C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C3__8S7704C11__8S7704C15[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-1368,-840),
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__A1__8S7704C11__8S7704C15[] = {
  0,
  ABISELECT(-1808,-1104),
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C3__8S7704C15[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__7S7704C3__8S7704C15[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
static  VTT_ENTRY vtt_S7704C15[] = {
  {&(_ZTV8S7704C15[6]),  6,29},
  {&(_tg__ZTV8S7704C11__8S7704C15[6]),  6,15},
  {&(_tg__ZTV8S7704C128S7704C11__8S7704C15[4]),  4,10},
  {&(_tg__ZTV7S7704C68S7704C128S7704C11__8S7704C15[4]),  4,8},
  {&(_tg__ZTV7S7704C68S7704C128S7704C11__8S7704C15[4]),  4,8},
  {&(_tg__ZTV8S7704C128S7704C11__8S7704C15[4]),  4,10},
  {&(_tg__ZTV8S7704C11__8S7704C15[6]),  6,15},
  {&(_tg__ZTV7S7704C3__8S7704C11__8S7704C15[4]),  4,5},
  {&(_tg__ZTV7S7704C57S7704C4__A1__8S7704C11__8S7704C15[3]),  3,4},
  {&(_ZTV8S7704C15[6]),  6,29},
  {&(_ZTV8S7704C15[24]),  24,29},
  {&(_ZTV8S7704C15[28]),  28,29},
  {&(_tg__ZTV7S7704C3__8S7704C15[3]),  3,4},
  {&(_tg__ZTV7S7704C57S7704C4__7S7704C3__8S7704C15[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7704C15[];
extern  VTBL_ENTRY _ZTV8S7704C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C15[];
Class_Descriptor cd_S7704C15 = {  "S7704C15", // class name
  bases_S7704C15, 9,
  &(vtc_S7704C15[0]), // expected_vtbl_contents
  &(vtt_S7704C15[0]), // expected_vtt_contents
  ABISELECT(2112,1288), // object size
  NSPAIRA(_ZTI8S7704C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7704C15),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7704C15),14, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7704C2  : virtual S7704C3 , virtual S7704C9 , virtual S7704C15 {
  short s7704c2f0;
  ::S7525C17 s7704c2f1;
  int s7704c2f2[9];
  virtual  ~S7704C2(); // _ZN7S7704C2D2Ev
  virtual void  v16(); // _ZN7S7704C23v16Ev
  virtual void  v17(); // _ZN7S7704C23v17Ev
  S7704C2(); // tgen
};
//SIG(-1 S7704C2) C1{ VBC2{ VBC3{ BC4{ v3} Fc[5] FC5{ VBC4 v5 v6 v7 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v4 Fp FL Fp[6] FC4 FC7{ BC4 v14 Fc FL Fi[3] FC3} Fp Fi} VBC8{ BC5 BC9{ VBC5 BC2 v8 Fp FC4 FL[8] FC5 Fp} VBC10{ VBC4 BC11{ BC5 v9 v10 Fp FC12{ BC13{ BC14{ v17} Fc[5] FC15{ VBC14 v18 v19 v20 Fp[3] FC6 Fp}[2] Fi Fp[7] FC15 FC14 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC14 VBC15 Fi Fp} Fi Fp Fi[2]} VBC2 vd v11 Fp[2] Fi[9] FC7 FC4[9] FL FD Fp FL Fl FL} VBC16{ v12 v13 Fp[2] Fi[2] Fp[15] Fi FC2} VBC7 v15 Fs FC6 Fc Fp[2] Fi[2] FL} VBC17{ BC10 BC7 vd v16 Fp Fl[2] FL Fi FL} vd v1 v2 Fs FU18{ m FD Fi Fi[3] Fc Fc[2] FL} Fi[9]}


 S7704C2 ::~S7704C2(){ note_dtor("S7704C2", this);}
void  S7704C2 ::v16(){vfunc_called(this, "_ZN7S7704C23v16Ev");}
void  S7704C2 ::v17(){vfunc_called(this, "_ZN7S7704C23v17Ev");}
S7704C2 ::S7704C2(){ note_ctor("S7704C2", this);} // tgen

static void Test_S7704C2()
{
  extern Class_Descriptor cd_S7704C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(322,782)];
    init_test(&cd_S7704C2, buf);
    S7704C2 *dp, &lv = *(dp=new (buf) S7704C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5136,3124), "sizeof(S7704C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7704C2)");
    check_base_class_offset(lv, (S7704C5*)(S7704C4*), ABISELECT(512,320), "S7704C2");
    /*is_ambiguous_... S7704C2::S7704C3 */ AMB_check_base_class_offset(lv, (S7704C4*)(S7704C3*), ABISELECT(512,320), "S7704C2");
    check_base_class_offset(lv, (S7704C4*)(S7704C3*)(S7704C10*)(S7704C9*), ABISELECT(512,320), "S7704C2");
    /*is_ambiguous_... S7704C2::S7704C3 */ AMB_check_base_class_offset(lv, (S7704C3*), ABISELECT(72,56), "S7704C2");
    /*is_ambiguous_... S7704C2::S7704C11 */ AMB_check_base_class_offset(lv, (S7704C3*)(S7704C11*), ABISELECT(72,56), "S7704C2");
    check_base_class_offset(lv, (S7704C3*)(S7704C11*)(S7704C15*), ABISELECT(72,56), "S7704C2");
    /*is_ambiguous_... S7704C9::S7704C6 */ AMB_check_base_class_offset(lv, (S7704C5*)(S7704C6*)(S7704C9*), 0, "S7704C2");
    /*is_ambiguous_... S7704C2::S7704C6 */ AMB_check_base_class_offset(lv, (S7704C5*)(S7704C6*), 0, "S7704C2");
    /*is_ambiguous_... S7704C2::S7704C11 */ AMB_check_base_class_offset(lv, (S7704C5*)(S7704C11*), 0, "S7704C2");
    /*is_ambiguous_... S7704C2::S7704C11 */ AMB_check_base_class_offset(lv, (S7704C5*)(S7704C6*)(S7704C12*)(S7704C11*), 0, "S7704C2");
    /*is_ambiguous_... S7704C11::S7704C5 */ AMB_check_base_class_offset(lv, (S7704C5*)(S7704C11*)(S7704C15*), 0, "S7704C2");
    check_base_class_offset(lv, (S7704C5*)(S7704C6*)(S7704C12*)(S7704C11*)(S7704C15*), 0, "S7704C2");
    /*is_ambiguous_... S7704C9::S7704C6 */ AMB_check_base_class_offset(lv, (S7704C6*)(S7704C9*), ABISELECT(816,504), "S7704C2");
    check_base_class_offset(lv, (S7704C6*)(S7704C10*)(S7704C9*), ABISELECT(1480,920), "S7704C2");
    check_base_class_offset(lv, (S7704C3*)(S7704C10*)(S7704C9*), ABISELECT(864,528), "S7704C2");
    check_base_class_offset(lv, (S7704C10*)(S7704C9*), ABISELECT(864,528), "S7704C2");
    /*is_ambiguous_... S7704C2::S7704C11 */ AMB_check_base_class_offset(lv, (S7704C6*)(S7704C12*)(S7704C11*), ABISELECT(1536,944), "S7704C2");
    /*is_ambiguous_... S7704C2::S7704C11 */ AMB_check_base_class_offset(lv, (S7704C12*)(S7704C11*), ABISELECT(1536,944), "S7704C2");
    check_base_class_offset(lv, (S7704C11*)(S7704C9*), ABISELECT(1536,944), "S7704C2");
    check_base_class_offset(lv, (S7704C14*)(S7704C9*), ABISELECT(2512,1540), "S7704C2");
    /*is_ambiguous_... S7704C2::S7704C8 */ AMB_check_base_class_offset(lv, (S7704C5*)(S7704C8*), ABISELECT(3416,2072), "S7704C2");
    check_base_class_offset(lv, (S7704C8*)(S7704C9*), ABISELECT(3416,2072), "S7704C2");
    check_base_class_offset(lv, (S7704C9*), ABISELECT(816,504), "S7704C2");
    check_base_class_offset(lv, (S7704C6*)(S7704C12*)(S7704C11*)(S7704C15*), ABISELECT(3760,2284), "S7704C2");
    check_base_class_offset(lv, (S7704C12*)(S7704C11*)(S7704C15*), ABISELECT(3760,2284), "S7704C2");
    check_base_class_offset(lv, (S7704C11*)(S7704C15*), ABISELECT(3760,2284), "S7704C2");
    check_base_class_offset(lv, (S7704C5*)(S7704C8*)(S7704C15*), ABISELECT(4736,2880), "S7704C2");
    check_base_class_offset(lv, (S7704C8*)(S7704C15*), ABISELECT(4736,2880), "S7704C2");
    check_base_class_offset(lv, (S7704C15*), ABISELECT(3760,2284), "S7704C2");
    check_field_offset(lv, s7704c2f0, ABISELECT(8,4), "S7704C2.s7704c2f0");
    check_field_offset(lv, s7704c2f1, ABISELECT(16,8), "S7704C2.s7704c2f1");
    check_field_offset(lv, s7704c2f2, ABISELECT(32,20), "S7704C2.s7704c2f2");
    test_class_info(&lv, &cd_S7704C2);
    dp->~S7704C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7704C2(Test_S7704C2, "S7704C2", ABISELECT(5136,3124));

#else // __cplusplus

extern void _ZN7S7704C2C1Ev();
extern void _ZN7S7704C2D2Ev();
Name_Map name_map_S7704C2[] = {
  NSPAIR(_ZN7S7704C2C1Ev),
  NSPAIR(_ZN7S7704C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C4;
extern VTBL_ENTRY _ZTI7S7704C4[];
extern  VTBL_ENTRY _ZTV7S7704C4[];
extern Class_Descriptor cd_S7704C3;
extern VTBL_ENTRY _ZTI7S7704C3[];
extern  VTBL_ENTRY _ZTV7S7704C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C3[];
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C6;
extern VTBL_ENTRY _ZTI7S7704C6[];
extern  VTBL_ENTRY _ZTV7S7704C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C6[];
extern Class_Descriptor cd_S7704C6;
extern VTBL_ENTRY _ZTI7S7704C6[];
extern  VTBL_ENTRY _ZTV7S7704C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C6[];
extern Class_Descriptor cd_S7704C3;
extern VTBL_ENTRY _ZTI7S7704C3[];
extern  VTBL_ENTRY _ZTV7S7704C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C3[];
extern Class_Descriptor cd_S7704C10;
extern VTBL_ENTRY _ZTI8S7704C10[];
extern  VTBL_ENTRY _ZTV8S7704C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C10[];
extern Class_Descriptor cd_S7704C6;
extern VTBL_ENTRY _ZTI7S7704C6[];
extern  VTBL_ENTRY _ZTV7S7704C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C6[];
extern Class_Descriptor cd_S7704C12;
extern VTBL_ENTRY _ZTI8S7704C12[];
extern  VTBL_ENTRY _ZTV8S7704C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C12[];
extern Class_Descriptor cd_S7704C11;
extern VTBL_ENTRY _ZTI8S7704C11[];
extern  VTBL_ENTRY _ZTV8S7704C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C11[];
extern Class_Descriptor cd_S7704C14;
extern VTBL_ENTRY _ZTI8S7704C14[];
extern  VTBL_ENTRY _ZTV8S7704C14[];
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C8;
extern VTBL_ENTRY _ZTI7S7704C8[];
extern  VTBL_ENTRY _ZTV7S7704C8[];
extern Class_Descriptor cd_S7704C9;
extern VTBL_ENTRY _ZTI7S7704C9[];
extern  VTBL_ENTRY _ZTV7S7704C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C9[];
extern Class_Descriptor cd_S7704C6;
extern VTBL_ENTRY _ZTI7S7704C6[];
extern  VTBL_ENTRY _ZTV7S7704C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C6[];
extern Class_Descriptor cd_S7704C12;
extern VTBL_ENTRY _ZTI8S7704C12[];
extern  VTBL_ENTRY _ZTV8S7704C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C12[];
extern Class_Descriptor cd_S7704C11;
extern VTBL_ENTRY _ZTI8S7704C11[];
extern  VTBL_ENTRY _ZTV8S7704C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C11[];
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C8;
extern VTBL_ENTRY _ZTI7S7704C8[];
extern  VTBL_ENTRY _ZTV7S7704C8[];
extern Class_Descriptor cd_S7704C15;
extern VTBL_ENTRY _ZTI8S7704C15[];
extern  VTBL_ENTRY _ZTV8S7704C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C15[];
static Base_Class bases_S7704C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7704C5,    ABISELECT(512,320), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7704C4,    ABISELECT(512,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7704C3,    ABISELECT(72,56), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7704C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7704C6,    ABISELECT(816,504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7704C6,    ABISELECT(1480,920), //bcp->offset
    57, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7704C3,    ABISELECT(864,528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7704C10,    ABISELECT(864,528), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7704C6,    ABISELECT(1536,944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7704C12,    ABISELECT(1536,944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7704C11,    ABISELECT(1536,944), //bcp->offset
    68, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7704C14,    ABISELECT(2512,1540), //bcp->offset
    90, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7704C5,    ABISELECT(3416,2072), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7704C8,    ABISELECT(3416,2072), //bcp->offset
    96, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7704C9,    ABISELECT(816,504), //bcp->offset
    26, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7704C6,    ABISELECT(3760,2284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7704C12,    ABISELECT(3760,2284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7704C11,    ABISELECT(3760,2284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7704C5,    ABISELECT(4736,2880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7704C8,    ABISELECT(4736,2880), //bcp->offset
    127, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7704C15,    ABISELECT(3760,2284), //bcp->offset
    102, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7704C2[];
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C2D1Ev();
extern void _ZN7S7704C2D0Ev();
extern void _ZN7S7704C23v16Ev();
extern void _ZN7S7704C23v17Ev();
extern void _ZN7S7704C32v6Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN7S7704C93v14Ev();
extern void ABISELECT(_ZTv0_n120_N7S7704C2D1Ev,_ZTv0_n60_N7S7704C2D1Ev)();
extern void ABISELECT(_ZThn816_N7S7704C2D1Ev,_ZThn504_N7S7704C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S7704C2D0Ev,_ZTv0_n60_N7S7704C2D0Ev)();
extern void ABISELECT(_ZThn816_N7S7704C2D0Ev,_ZThn504_N7S7704C2D0Ev)() __attribute__((weak));
extern void _ZN7S7704C32v6Ev();
extern void _ZN8S7704C102v7Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
extern void ABISELECT(_ZTv0_n96_N7S7704C2D1Ev,_ZTv0_n48_N7S7704C2D1Ev)();
extern void ABISELECT(_ZThn1536_N7S7704C2D1Ev,_ZThn944_N7S7704C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7704C2D0Ev,_ZTv0_n48_N7S7704C2D0Ev)();
extern void ABISELECT(_ZThn1536_N7S7704C2D0Ev,_ZThn944_N7S7704C2D0Ev)() __attribute__((weak));
extern void _ZN8S7704C113v10Ev();
extern void _ZN8S7704C143v11Ev();
extern void _ZN8S7704C143v12Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C83v13Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
extern void ABISELECT(_ZTv0_n96_N7S7704C2D1Ev,_ZTv0_n48_N7S7704C2D1Ev)();
extern void ABISELECT(_ZThn3760_N7S7704C2D1Ev,_ZThn2284_N7S7704C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7704C2D0Ev,_ZTv0_n48_N7S7704C2D0Ev)();
extern void ABISELECT(_ZThn3760_N7S7704C2D0Ev,_ZThn2284_N7S7704C2D0Ev)() __attribute__((weak));
extern void _ZN8S7704C113v10Ev();
extern void _ZN8S7704C153v15Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C83v13Ev();
static  VTBL_ENTRY vtc_S7704C2[] = {
  ABISELECT(3760,2284),
  ABISELECT(3416,2072),
  ABISELECT(2512,1540),
  ABISELECT(1536,944),
  ABISELECT(1480,920),
  0,
  ABISELECT(816,504),
  ABISELECT(512,320),
  ABISELECT(72,56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7704C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7704C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7704C23v17Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-72,-56),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
  0,
  ABISELECT(-512,-320),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-816,-504),
  0,
  0,
  0,
  0,
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-816,-504),
  ABISELECT(-816,-504),
  ABISELECT(-816,-504),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7704C93v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7704C2D1Ev,_ZTv0_n60_N7S7704C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7704C2D0Ev,_ZTv0_n60_N7S7704C2D0Ev),
  ABISELECT(-864,-528),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-864,-528),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7704C102v7Ev,
  0,
  0,
  0,
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  0,
  ABISELECT(-1536,-944),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7704C2D1Ev,_ZTv0_n48_N7S7704C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7704C2D0Ev,_ZTv0_n48_N7S7704C2D0Ev),
  (VTBL_ENTRY)&_ZN8S7704C113v10Ev,
  0,
  0,
  ABISELECT(-2512,-1540),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN8S7704C143v11Ev,
  (VTBL_ENTRY)&_ZN8S7704C143v12Ev,
  0,
  0,
  ABISELECT(-3416,-2072),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C83v13Ev,
  ABISELECT(976,596),
  0,
  0,
  ABISELECT(-3760,-2284),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7704C2D1Ev,_ZTv0_n48_N7S7704C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7704C2D0Ev,_ZTv0_n48_N7S7704C2D0Ev),
  (VTBL_ENTRY)&_ZN8S7704C113v10Ev,
  (VTBL_ENTRY)&_ZN8S7704C153v15Ev,
  ABISELECT(-4736,-2880),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C83v13Ev,
};
extern VTBL_ENTRY _ZTV7S7704C2[];
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C3__7S7704C2[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__7S7704C3__7S7704C2[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN7S7704C93v14Ev();
extern void _ZN7S7704C9D1Ev();
extern void _ZN7S7704C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C9__7S7704C2[] = {
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-816,-504),
  ABISELECT(-816,-504),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7704C93v14Ev,
  (VTBL_ENTRY)&_ZN7S7704C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7704C9D0Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C67S7704C9__7S7704C2[] = {
  ABISELECT(-816,-504),
  ABISELECT(-816,-504),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__7S7704C67S7704C9__7S7704C2[] = {
  0,
  ABISELECT(816,504),
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C32v6Ev();
extern void _ZN8S7704C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C107S7704C9__7S7704C2[] = {
  ABISELECT(-864,-528),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C10[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7704C102v7Ev,
};
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C38S7704C107S7704C9__A1__7S7704C2[] = {
  ABISELECT(-352,-208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__7S7704C38S7704C107S7704C9__A1__7S7704C2[] = {
  0,
  ABISELECT(352,208),
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C6__8S7704C107S7704C9__7S7704C2[] = {
  0,
  0,
  0,
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  ABISELECT(-616,-392),
  (VTBL_ENTRY)&(_ZTI8S7704C10[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__8S7704C107S7704C9__7S7704C2[] = {
  0,
  ABISELECT(864,528),
  (VTBL_ENTRY)&(_ZTI8S7704C10[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__A1__8S7704C107S7704C9__7S7704C2[] = {
  0,
  ABISELECT(352,208),
  (VTBL_ENTRY)&(_ZTI8S7704C10[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__7S7704C9__7S7704C2[] = {
  0,
  ABISELECT(816,504),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C32v6Ev();
extern void _ZN8S7704C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C10__7S7704C9__7S7704C2[] = {
  ABISELECT(-864,-528),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7704C102v7Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C6__A1__7S7704C9__7S7704C2[] = {
  0,
  0,
  0,
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__A1__7S7704C9__7S7704C2[] = {
  0,
  ABISELECT(304,184),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
extern void ABISELECT(_ZTv0_n96_N7S7704C9D1Ev,_ZTv0_n48_N7S7704C9D1Ev)();
extern void ABISELECT(_ZThn720_N7S7704C9D1Ev,_ZThn440_N7S7704C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7704C9D0Ev,_ZTv0_n48_N7S7704C9D0Ev)();
extern void ABISELECT(_ZThn720_N7S7704C9D0Ev,_ZThn440_N7S7704C9D0Ev)() __attribute__((weak));
extern void _ZN8S7704C113v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C11__7S7704C9__7S7704C2[] = {
  0,
  ABISELECT(-720,-440),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  ABISELECT(-720,-440),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7704C9D1Ev,_ZTv0_n48_N7S7704C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7704C9D0Ev,_ZTv0_n48_N7S7704C9D0Ev),
  (VTBL_ENTRY)&_ZN8S7704C113v10Ev,
};
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C3__A1__7S7704C9__7S7704C2[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(744,448),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN8S7704C143v11Ev();
extern void _ZN8S7704C143v12Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C14__7S7704C9__7S7704C2[] = {
  0,
  0,
  ABISELECT(-1696,-1036),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN8S7704C143v11Ev,
  (VTBL_ENTRY)&_ZN8S7704C143v12Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C83v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C8__7S7704C9__7S7704C2[] = {
  0,
  0,
  ABISELECT(-2600,-1568),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C83v13Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C6__A1__7S7704C2[] = {
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__7S7704C6__A1__7S7704C2[] = {
  0,
  ABISELECT(1480,920),
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
extern void _ZN8S7704C11D1Ev();
extern void _ZN8S7704C11D0Ev();
extern void _ZN8S7704C113v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C11__7S7704C2[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7704C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7704C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7704C113v10Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C128S7704C11__7S7704C2[] = {
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C12[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C68S7704C128S7704C11__A2__7S7704C2[] = {
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__7S7704C68S7704C128S7704C11__A2__7S7704C2[] = {
  0,
  ABISELECT(1536,944),
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__8S7704C128S7704C11__7S7704C2[] = {
  0,
  ABISELECT(1536,944),
  (VTBL_ENTRY)&(_ZTI8S7704C12[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__8S7704C11__7S7704C2[] = {
  0,
  ABISELECT(1536,944),
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C3__8S7704C11__7S7704C2[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(1464,888),
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__A1__8S7704C11__7S7704C2[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
extern void _ZN8S7704C15D1Ev();
extern void _ZN8S7704C15D0Ev();
extern void _ZN8S7704C113v10Ev();
extern void _ZN8S7704C153v15Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C15__7S7704C2[] = {
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C15[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7704C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7704C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7704C113v10Ev,
  (VTBL_ENTRY)&_ZN8S7704C153v15Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
extern void _ZN8S7704C11D1Ev();
extern void _ZN8S7704C11D0Ev();
extern void _ZN8S7704C113v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C118S7704C15__A1__7S7704C2[] = {
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7704C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7704C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7704C113v10Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C128S7704C118S7704C15__A1__7S7704C2[] = {
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C12[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C68S7704C128S7704C118S7704C15__A3__7S7704C2[] = {
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__7S7704C68S7704C128S7704C118S7704C15__A3__7S7704C2[] = {
  0,
  ABISELECT(3760,2284),
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__8S7704C128S7704C118S7704C15__A1__7S7704C2[] = {
  0,
  ABISELECT(3760,2284),
  (VTBL_ENTRY)&(_ZTI8S7704C12[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__8S7704C118S7704C15__A1__7S7704C2[] = {
  0,
  ABISELECT(3760,2284),
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C3__8S7704C118S7704C15__A1__7S7704C2[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(3688,2228),
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__A1__8S7704C118S7704C15__A1__7S7704C2[] = {
  0,
  ABISELECT(3248,1964),
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__8S7704C15__7S7704C2[] = {
  0,
  ABISELECT(3760,2284),
  (VTBL_ENTRY)&(_ZTI8S7704C15[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C3__8S7704C15__7S7704C2[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(3688,2228),
  (VTBL_ENTRY)&(_ZTI8S7704C15[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__A1__8S7704C15__7S7704C2[] = {
  0,
  ABISELECT(3248,1964),
  (VTBL_ENTRY)&(_ZTI8S7704C15[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
static  VTT_ENTRY vtt_S7704C2[] = {
  {&(_ZTV7S7704C2[12]),  12,131},
  {&(_ZTV7S7704C2[21]),  21,131},
  {&(_ZTV7S7704C2[25]),  25,131},
  {&(_ZTV7S7704C2[43]),  43,131},
  {&(_ZTV7S7704C2[12]),  12,131},
  {&(_ZTV7S7704C2[55]),  55,131},
  {&(_ZTV7S7704C2[64]),  64,131},
  {&(_ZTV7S7704C2[81]),  81,131},
  {&(_ZTV7S7704C2[94]),  94,131},
  {&(_ZTV7S7704C2[100]),  100,131},
  {&(_ZTV7S7704C2[117]),  117,131},
  {&(_ZTV7S7704C2[129]),  129,131},
  {&(_tg__ZTV7S7704C3__7S7704C2[3]),  3,4},
  {&(_tg__ZTV7S7704C57S7704C4__7S7704C3__7S7704C2[3]),  3,4},
  {&(_tg__ZTV7S7704C9__7S7704C2[10]),  10,17},
  {&(_tg__ZTV7S7704C67S7704C9__7S7704C2[4]),  4,8},
  {&(_tg__ZTV7S7704C5__7S7704C67S7704C9__7S7704C2[3]),  3,4},
  {&(_tg__ZTV8S7704C107S7704C9__7S7704C2[5]),  5,7},
  {&(_tg__ZTV7S7704C38S7704C107S7704C9__A1__7S7704C2[3]),  3,4},
  {&(_tg__ZTV7S7704C57S7704C4__7S7704C38S7704C107S7704C9__A1__7S7704C2[3]),  3,4},
  {&(_tg__ZTV7S7704C6__8S7704C107S7704C9__7S7704C2[7]),  7,11},
  {&(_tg__ZTV7S7704C5__8S7704C107S7704C9__7S7704C2[3]),  3,4},
  {&(_tg__ZTV7S7704C57S7704C4__A1__8S7704C107S7704C9__7S7704C2[3]),  3,4},
  {&(_tg__ZTV7S7704C5__7S7704C9__7S7704C2[3]),  3,4},
  {&(_tg__ZTV8S7704C10__7S7704C9__7S7704C2[5]),  5,7},
  {&(_tg__ZTV7S7704C6__A1__7S7704C9__7S7704C2[7]),  7,11},
  {&(_tg__ZTV7S7704C57S7704C4__A1__7S7704C9__7S7704C2[3]),  3,4},
  {&(_tg__ZTV8S7704C11__7S7704C9__7S7704C2[13]),  13,22},
  {&(_tg__ZTV7S7704C3__A1__7S7704C9__7S7704C2[4]),  4,5},
  {&(_tg__ZTV8S7704C14__7S7704C9__7S7704C2[4]),  4,6},
  {&(_tg__ZTV7S7704C8__7S7704C9__7S7704C2[4]),  4,6},
  {&(_tg__ZTV7S7704C6__A1__7S7704C2[4]),  4,8},
  {&(_tg__ZTV7S7704C5__7S7704C6__A1__7S7704C2[3]),  3,4},
  {&(_tg__ZTV8S7704C11__7S7704C2[6]),  6,15},
  {&(_tg__ZTV8S7704C128S7704C11__7S7704C2[4]),  4,10},
  {&(_tg__ZTV7S7704C68S7704C128S7704C11__A2__7S7704C2[4]),  4,8},
  {&(_tg__ZTV7S7704C5__7S7704C68S7704C128S7704C11__A2__7S7704C2[3]),  3,4},
  {&(_tg__ZTV7S7704C5__8S7704C128S7704C11__7S7704C2[3]),  3,4},
  {&(_tg__ZTV7S7704C5__8S7704C11__7S7704C2[3]),  3,4},
  {&(_tg__ZTV7S7704C3__8S7704C11__7S7704C2[4]),  4,5},
  {&(_tg__ZTV7S7704C57S7704C4__A1__8S7704C11__7S7704C2[3]),  3,4},
  {&(_tg__ZTV8S7704C15__7S7704C2[6]),  6,16},
  {&(_tg__ZTV8S7704C118S7704C15__A1__7S7704C2[6]),  6,15},
  {&(_tg__ZTV8S7704C128S7704C118S7704C15__A1__7S7704C2[4]),  4,10},
  {&(_tg__ZTV7S7704C68S7704C128S7704C118S7704C15__A3__7S7704C2[4]),  4,8},
  {&(_tg__ZTV7S7704C5__7S7704C68S7704C128S7704C118S7704C15__A3__7S7704C2[3]),  3,4},
  {&(_tg__ZTV7S7704C5__8S7704C128S7704C118S7704C15__A1__7S7704C2[3]),  3,4},
  {&(_tg__ZTV7S7704C5__8S7704C118S7704C15__A1__7S7704C2[3]),  3,4},
  {&(_tg__ZTV7S7704C3__8S7704C118S7704C15__A1__7S7704C2[4]),  4,5},
  {&(_tg__ZTV7S7704C57S7704C4__A1__8S7704C118S7704C15__A1__7S7704C2[3]),  3,4},
  {&(_tg__ZTV7S7704C5__8S7704C15__7S7704C2[3]),  3,4},
  {&(_tg__ZTV7S7704C3__8S7704C15__7S7704C2[4]),  4,5},
  {&(_tg__ZTV7S7704C57S7704C4__A1__8S7704C15__7S7704C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7704C2[];
extern  VTBL_ENTRY _ZTV7S7704C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C2[];
static VTBL_ENTRY alt_thunk_names70[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7704C9D0Ev,_ZTv0_n48_N7S7704C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S7704C9D0Ev,_ZThn440_N7S7704C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7704C9D1Ev,_ZTv0_n48_N7S7704C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S7704C9D1Ev,_ZThn440_N7S7704C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7704C2D0Ev,_ZTv0_n48_N7S7704C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3760_N7S7704C2D0Ev,_ZThn2284_N7S7704C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N7S7704C2D0Ev,_ZThn944_N7S7704C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7704C2D1Ev,_ZTv0_n48_N7S7704C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3760_N7S7704C2D1Ev,_ZThn2284_N7S7704C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N7S7704C2D1Ev,_ZThn944_N7S7704C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7704C2D0Ev,_ZTv0_n60_N7S7704C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N7S7704C2D0Ev,_ZThn504_N7S7704C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7704C2D1Ev,_ZTv0_n60_N7S7704C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N7S7704C2D1Ev,_ZThn504_N7S7704C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7704C2 = {  "S7704C2", // class name
  bases_S7704C2, 21,
  &(vtc_S7704C2[0]), // expected_vtbl_contents
  &(vtt_S7704C2[0]), // expected_vtt_contents
  ABISELECT(5136,3124), // object size
  NSPAIRA(_ZTI7S7704C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7704C2),131, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7704C2),53, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names70,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7704C1  : S7704C2 {
  ::S19277C20 s7704c1f0;
  void *s7704c1f1[5];
  virtual void  v1(); // _ZN7S7704C12v1Ev
  ~S7704C1(); // tgen
  S7704C1(); // tgen
};
//SIG(1 S7704C1) C1{ BC2{ VBC3{ VBC4{ BC5{ v2} Fc[5] FC6{ VBC5 v4 v5 v6 Fp[3] FC7{} Fp}[2] Fi Fp[7] FC6 FC5 Fc Fi Fs[5] Fi[8] FL Fc:8} v3 Fp FL Fp[6] FC5 FC8{ BC5 v13 Fc FL Fi[3] FC4} Fp Fi} VBC9{ BC6 BC10{ VBC6 BC3 v7 Fp FC5 FL[8] FC6 Fp} VBC11{ VBC5 BC12{ BC6 v8 v9 Fp FC13{ BC14{ BC15{ v18} Fc[5] FC16{ VBC15 v19 v20 v21 Fp[3] FC7 Fp}[2] Fi Fp[7] FC16 FC15 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC15 VBC16 Fi Fp} Fi Fp Fi[2]} VBC3 vd v10 Fp[2] Fi[9] FC8 FC5[9] FL FD Fp FL Fl FL} VBC17{ v11 v12 Fp[2] Fi[2] Fp[15] Fi FC3} VBC8 v14 Fs FC7 Fc Fp[2] Fi[2] FL} VBC18{ BC11 BC8 vd v15 Fp Fl[2] FL Fi FL} vd v16 v17 Fs FU19{ m FD Fi Fi[3] Fc Fc[2] FL} Fi[9]} v1 FU20{ m Fp FL FL Fi:27 Fs:16 Fs Fp} Fp[5]}


void  S7704C1 ::v1(){vfunc_called(this, "_ZN7S7704C12v1Ev");}
S7704C1 ::~S7704C1(){ note_dtor("S7704C1", this);} // tgen
S7704C1 ::S7704C1(){ note_ctor("S7704C1", this);} // tgen

static void Test_S7704C1()
{
  extern Class_Descriptor cd_S7704C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(325,789)];
    init_test(&cd_S7704C1, buf);
    S7704C1 *dp, &lv = *(dp=new (buf) S7704C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5184,3152), "sizeof(S7704C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7704C1)");
    check_base_class_offset(lv, (S7704C5*)(S7704C4*), ABISELECT(560,348), "S7704C1");
    /*is_ambiguous_... S7704C1::S7704C3 */ AMB_check_base_class_offset(lv, (S7704C4*)(S7704C3*), ABISELECT(560,348), "S7704C1");
    check_base_class_offset(lv, (S7704C4*)(S7704C3*)(S7704C10*)(S7704C9*), ABISELECT(560,348), "S7704C1");
    /*is_ambiguous_... S7704C2::S7704C3 */ AMB_check_base_class_offset(lv, (S7704C3*)(S7704C2*), ABISELECT(120,84), "S7704C1");
    /*is_ambiguous_... S7704C1::S7704C11 */ AMB_check_base_class_offset(lv, (S7704C3*)(S7704C11*), ABISELECT(120,84), "S7704C1");
    check_base_class_offset(lv, (S7704C3*)(S7704C11*)(S7704C15*), ABISELECT(120,84), "S7704C1");
    /*is_ambiguous_... S7704C9::S7704C6 */ AMB_check_base_class_offset(lv, (S7704C5*)(S7704C6*)(S7704C9*), 0, "S7704C1");
    /*is_ambiguous_... S7704C1::S7704C6 */ AMB_check_base_class_offset(lv, (S7704C5*)(S7704C6*), 0, "S7704C1");
    /*is_ambiguous_... S7704C1::S7704C11 */ AMB_check_base_class_offset(lv, (S7704C5*)(S7704C11*), 0, "S7704C1");
    /*is_ambiguous_... S7704C1::S7704C11 */ AMB_check_base_class_offset(lv, (S7704C5*)(S7704C6*)(S7704C12*)(S7704C11*), 0, "S7704C1");
    /*is_ambiguous_... S7704C11::S7704C5 */ AMB_check_base_class_offset(lv, (S7704C5*)(S7704C11*)(S7704C15*), 0, "S7704C1");
    check_base_class_offset(lv, (S7704C5*)(S7704C6*)(S7704C12*)(S7704C11*)(S7704C15*), 0, "S7704C1");
    /*is_ambiguous_... S7704C9::S7704C6 */ AMB_check_base_class_offset(lv, (S7704C6*)(S7704C9*), ABISELECT(864,532), "S7704C1");
    check_base_class_offset(lv, (S7704C6*)(S7704C10*)(S7704C9*), ABISELECT(1528,948), "S7704C1");
    check_base_class_offset(lv, (S7704C3*)(S7704C10*)(S7704C9*), ABISELECT(912,556), "S7704C1");
    check_base_class_offset(lv, (S7704C10*)(S7704C9*), ABISELECT(912,556), "S7704C1");
    /*is_ambiguous_... S7704C1::S7704C11 */ AMB_check_base_class_offset(lv, (S7704C6*)(S7704C12*)(S7704C11*), ABISELECT(1584,972), "S7704C1");
    /*is_ambiguous_... S7704C1::S7704C11 */ AMB_check_base_class_offset(lv, (S7704C12*)(S7704C11*), ABISELECT(1584,972), "S7704C1");
    check_base_class_offset(lv, (S7704C11*)(S7704C9*), ABISELECT(1584,972), "S7704C1");
    check_base_class_offset(lv, (S7704C14*)(S7704C9*), ABISELECT(2560,1568), "S7704C1");
    /*is_ambiguous_... S7704C1::S7704C8 */ AMB_check_base_class_offset(lv, (S7704C5*)(S7704C8*), ABISELECT(3464,2100), "S7704C1");
    check_base_class_offset(lv, (S7704C8*)(S7704C9*), ABISELECT(3464,2100), "S7704C1");
    check_base_class_offset(lv, (S7704C9*)(S7704C2*), ABISELECT(864,532), "S7704C1");
    check_base_class_offset(lv, (S7704C6*)(S7704C12*)(S7704C11*)(S7704C15*), ABISELECT(3808,2312), "S7704C1");
    check_base_class_offset(lv, (S7704C12*)(S7704C11*)(S7704C15*), ABISELECT(3808,2312), "S7704C1");
    check_base_class_offset(lv, (S7704C11*)(S7704C15*), ABISELECT(3808,2312), "S7704C1");
    check_base_class_offset(lv, (S7704C5*)(S7704C8*)(S7704C15*), ABISELECT(4784,2908), "S7704C1");
    check_base_class_offset(lv, (S7704C8*)(S7704C15*), ABISELECT(4784,2908), "S7704C1");
    check_base_class_offset(lv, (S7704C15*)(S7704C2*), ABISELECT(3808,2312), "S7704C1");
    check_base_class_offset(lv, (S7704C2*), 0, "S7704C1");
    check_field_offset(lv, s7704c1f0, ABISELECT(72,56), "S7704C1.s7704c1f0");
    check_field_offset(lv, s7704c1f1, ABISELECT(80,64), "S7704C1.s7704c1f1");
    test_class_info(&lv, &cd_S7704C1);
    dp->~S7704C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7704C1(Test_S7704C1, "S7704C1", ABISELECT(5184,3152));

#else // __cplusplus

extern void _ZN7S7704C1C1Ev();
extern void _ZN7S7704C1D1Ev();
Name_Map name_map_S7704C1[] = {
  NSPAIR(_ZN7S7704C1C1Ev),
  NSPAIR(_ZN7S7704C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C4;
extern VTBL_ENTRY _ZTI7S7704C4[];
extern  VTBL_ENTRY _ZTV7S7704C4[];
extern Class_Descriptor cd_S7704C3;
extern VTBL_ENTRY _ZTI7S7704C3[];
extern  VTBL_ENTRY _ZTV7S7704C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C3[];
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C6;
extern VTBL_ENTRY _ZTI7S7704C6[];
extern  VTBL_ENTRY _ZTV7S7704C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C6[];
extern Class_Descriptor cd_S7704C6;
extern VTBL_ENTRY _ZTI7S7704C6[];
extern  VTBL_ENTRY _ZTV7S7704C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C6[];
extern Class_Descriptor cd_S7704C3;
extern VTBL_ENTRY _ZTI7S7704C3[];
extern  VTBL_ENTRY _ZTV7S7704C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C3[];
extern Class_Descriptor cd_S7704C10;
extern VTBL_ENTRY _ZTI8S7704C10[];
extern  VTBL_ENTRY _ZTV8S7704C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C10[];
extern Class_Descriptor cd_S7704C6;
extern VTBL_ENTRY _ZTI7S7704C6[];
extern  VTBL_ENTRY _ZTV7S7704C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C6[];
extern Class_Descriptor cd_S7704C12;
extern VTBL_ENTRY _ZTI8S7704C12[];
extern  VTBL_ENTRY _ZTV8S7704C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C12[];
extern Class_Descriptor cd_S7704C11;
extern VTBL_ENTRY _ZTI8S7704C11[];
extern  VTBL_ENTRY _ZTV8S7704C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C11[];
extern Class_Descriptor cd_S7704C14;
extern VTBL_ENTRY _ZTI8S7704C14[];
extern  VTBL_ENTRY _ZTV8S7704C14[];
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C8;
extern VTBL_ENTRY _ZTI7S7704C8[];
extern  VTBL_ENTRY _ZTV7S7704C8[];
extern Class_Descriptor cd_S7704C9;
extern VTBL_ENTRY _ZTI7S7704C9[];
extern  VTBL_ENTRY _ZTV7S7704C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C9[];
extern Class_Descriptor cd_S7704C6;
extern VTBL_ENTRY _ZTI7S7704C6[];
extern  VTBL_ENTRY _ZTV7S7704C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C6[];
extern Class_Descriptor cd_S7704C12;
extern VTBL_ENTRY _ZTI8S7704C12[];
extern  VTBL_ENTRY _ZTV8S7704C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C12[];
extern Class_Descriptor cd_S7704C11;
extern VTBL_ENTRY _ZTI8S7704C11[];
extern  VTBL_ENTRY _ZTV8S7704C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C11[];
extern Class_Descriptor cd_S7704C5;
extern VTBL_ENTRY _ZTI7S7704C5[];
extern  VTBL_ENTRY _ZTV7S7704C5[];
extern Class_Descriptor cd_S7704C8;
extern VTBL_ENTRY _ZTI7S7704C8[];
extern  VTBL_ENTRY _ZTV7S7704C8[];
extern Class_Descriptor cd_S7704C15;
extern VTBL_ENTRY _ZTI8S7704C15[];
extern  VTBL_ENTRY _ZTV8S7704C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7704C15[];
extern Class_Descriptor cd_S7704C2;
extern VTBL_ENTRY _ZTI7S7704C2[];
extern  VTBL_ENTRY _ZTV7S7704C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C2[];
static Base_Class bases_S7704C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7704C5,    ABISELECT(560,348), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7704C4,    ABISELECT(560,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7704C3,    ABISELECT(120,84), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7704C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7704C6,    ABISELECT(864,532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7704C6,    ABISELECT(1528,948), //bcp->offset
    58, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7704C3,    ABISELECT(912,556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7704C10,    ABISELECT(912,556), //bcp->offset
    51, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7704C6,    ABISELECT(1584,972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7704C12,    ABISELECT(1584,972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7704C11,    ABISELECT(1584,972), //bcp->offset
    69, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7704C14,    ABISELECT(2560,1568), //bcp->offset
    91, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7704C5,    ABISELECT(3464,2100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7704C8,    ABISELECT(3464,2100), //bcp->offset
    97, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7704C9,    ABISELECT(864,532), //bcp->offset
    27, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7704C6,    ABISELECT(3808,2312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7704C12,    ABISELECT(3808,2312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7704C11,    ABISELECT(3808,2312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7704C5,    ABISELECT(4784,2908), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7704C8,    ABISELECT(4784,2908), //bcp->offset
    128, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7704C15,    ABISELECT(3808,2312), //bcp->offset
    103, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7704C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7704C1[];
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C1D1Ev();
extern void _ZN7S7704C1D0Ev();
extern void _ZN7S7704C23v16Ev();
extern void _ZN7S7704C23v17Ev();
extern void _ZN7S7704C12v1Ev();
extern void _ZN7S7704C32v6Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN7S7704C93v14Ev();
extern void ABISELECT(_ZTv0_n120_N7S7704C1D1Ev,_ZTv0_n60_N7S7704C1D1Ev)();
extern void ABISELECT(_ZThn864_N7S7704C1D1Ev,_ZThn532_N7S7704C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S7704C1D0Ev,_ZTv0_n60_N7S7704C1D0Ev)();
extern void ABISELECT(_ZThn864_N7S7704C1D0Ev,_ZThn532_N7S7704C1D0Ev)() __attribute__((weak));
extern void _ZN7S7704C32v6Ev();
extern void _ZN8S7704C102v7Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
extern void ABISELECT(_ZTv0_n96_N7S7704C1D1Ev,_ZTv0_n48_N7S7704C1D1Ev)();
extern void ABISELECT(_ZThn1584_N7S7704C1D1Ev,_ZThn972_N7S7704C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7704C1D0Ev,_ZTv0_n48_N7S7704C1D0Ev)();
extern void ABISELECT(_ZThn1584_N7S7704C1D0Ev,_ZThn972_N7S7704C1D0Ev)() __attribute__((weak));
extern void _ZN8S7704C113v10Ev();
extern void _ZN8S7704C143v11Ev();
extern void _ZN8S7704C143v12Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C83v13Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
extern void ABISELECT(_ZTv0_n96_N7S7704C1D1Ev,_ZTv0_n48_N7S7704C1D1Ev)();
extern void ABISELECT(_ZThn3808_N7S7704C1D1Ev,_ZThn2312_N7S7704C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7704C1D0Ev,_ZTv0_n48_N7S7704C1D0Ev)();
extern void ABISELECT(_ZThn3808_N7S7704C1D0Ev,_ZThn2312_N7S7704C1D0Ev)() __attribute__((weak));
extern void _ZN8S7704C113v10Ev();
extern void _ZN8S7704C153v15Ev();
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C83v13Ev();
static  VTBL_ENTRY vtc_S7704C1[] = {
  ABISELECT(3808,2312),
  ABISELECT(3464,2100),
  ABISELECT(2560,1568),
  ABISELECT(1584,972),
  ABISELECT(1528,948),
  0,
  ABISELECT(864,532),
  ABISELECT(560,348),
  ABISELECT(120,84),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C1[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7704C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7704C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7704C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7704C12v1Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI7S7704C1[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
  0,
  ABISELECT(-560,-348),
  (VTBL_ENTRY)&(_ZTI7S7704C1[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-864,-532),
  0,
  0,
  0,
  0,
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-864,-532),
  ABISELECT(-864,-532),
  ABISELECT(-864,-532),
  (VTBL_ENTRY)&(_ZTI7S7704C1[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7704C93v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7704C1D1Ev,_ZTv0_n60_N7S7704C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7704C1D0Ev,_ZTv0_n60_N7S7704C1D0Ev),
  ABISELECT(-912,-556),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-912,-556),
  (VTBL_ENTRY)&(_ZTI7S7704C1[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7704C102v7Ev,
  0,
  0,
  0,
  ABISELECT(-1528,-948),
  ABISELECT(-1528,-948),
  ABISELECT(-1528,-948),
  (VTBL_ENTRY)&(_ZTI7S7704C1[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  0,
  ABISELECT(-1584,-972),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1584,-972),
  ABISELECT(-1584,-972),
  ABISELECT(-1584,-972),
  (VTBL_ENTRY)&(_ZTI7S7704C1[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7704C1D1Ev,_ZTv0_n48_N7S7704C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7704C1D0Ev,_ZTv0_n48_N7S7704C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7704C113v10Ev,
  0,
  0,
  ABISELECT(-2560,-1568),
  (VTBL_ENTRY)&(_ZTI7S7704C1[0]),
  (VTBL_ENTRY)&_ZN8S7704C143v11Ev,
  (VTBL_ENTRY)&_ZN8S7704C143v12Ev,
  0,
  0,
  ABISELECT(-3464,-2100),
  (VTBL_ENTRY)&(_ZTI7S7704C1[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C83v13Ev,
  ABISELECT(976,596),
  0,
  0,
  ABISELECT(-3808,-2312),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3808,-2312),
  ABISELECT(-3808,-2312),
  ABISELECT(-3808,-2312),
  (VTBL_ENTRY)&(_ZTI7S7704C1[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7704C1D1Ev,_ZTv0_n48_N7S7704C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7704C1D0Ev,_ZTv0_n48_N7S7704C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7704C113v10Ev,
  (VTBL_ENTRY)&_ZN8S7704C153v15Ev,
  ABISELECT(-4784,-2908),
  (VTBL_ENTRY)&(_ZTI7S7704C1[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C83v13Ev,
};
extern VTBL_ENTRY _ZTV7S7704C1[];
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C2D1Ev();
extern void _ZN7S7704C2D0Ev();
extern void _ZN7S7704C23v16Ev();
extern void _ZN7S7704C23v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C2__7S7704C1[] = {
  ABISELECT(3808,2312),
  ABISELECT(3464,2100),
  ABISELECT(2560,1568),
  ABISELECT(1584,972),
  ABISELECT(1528,948),
  0,
  ABISELECT(864,532),
  ABISELECT(560,348),
  ABISELECT(120,84),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7704C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7704C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7704C23v17Ev,
};
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C3__7S7704C2__7S7704C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__7S7704C2__7S7704C1[] = {
  0,
  ABISELECT(-560,-348),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN7S7704C93v14Ev();
extern void ABISELECT(_ZTv0_n120_N7S7704C2D1Ev,_ZTv0_n60_N7S7704C2D1Ev)();
extern void ABISELECT(_ZThn864_N7S7704C2D1Ev,_ZThn532_N7S7704C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S7704C2D0Ev,_ZTv0_n60_N7S7704C2D0Ev)();
extern void ABISELECT(_ZThn864_N7S7704C2D0Ev,_ZThn532_N7S7704C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7704C9__7S7704C2__7S7704C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-864,-532),
  0,
  0,
  0,
  0,
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-864,-532),
  ABISELECT(-864,-532),
  ABISELECT(-864,-532),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7704C93v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7704C2D1Ev,_ZTv0_n60_N7S7704C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7704C2D0Ev,_ZTv0_n60_N7S7704C2D0Ev),
};
extern void _ZN7S7704C32v6Ev();
extern void _ZN8S7704C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C107S7704C9__7S7704C2__7S7704C1[] = {
  ABISELECT(-912,-556),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-912,-556),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7704C102v7Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C6__A1__7S7704C2__7S7704C1[] = {
  0,
  0,
  0,
  ABISELECT(-1528,-948),
  ABISELECT(-1528,-948),
  ABISELECT(-1528,-948),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
extern void ABISELECT(_ZTv0_n96_N7S7704C2D1Ev,_ZTv0_n48_N7S7704C2D1Ev)();
extern void ABISELECT(_ZThn1584_N7S7704C2D1Ev,_ZThn972_N7S7704C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7704C2D0Ev,_ZTv0_n48_N7S7704C2D0Ev)();
extern void ABISELECT(_ZThn1584_N7S7704C2D0Ev,_ZThn972_N7S7704C2D0Ev)() __attribute__((weak));
extern void _ZN8S7704C113v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C11__7S7704C2__7S7704C1[] = {
  0,
  ABISELECT(-1584,-972),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1584,-972),
  ABISELECT(-1584,-972),
  ABISELECT(-1584,-972),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7704C2D1Ev,_ZTv0_n48_N7S7704C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7704C2D0Ev,_ZTv0_n48_N7S7704C2D0Ev),
  (VTBL_ENTRY)&_ZN8S7704C113v10Ev,
};
extern void _ZN8S7704C143v11Ev();
extern void _ZN8S7704C143v12Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C14__7S7704C2__7S7704C1[] = {
  0,
  0,
  ABISELECT(-2560,-1568),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN8S7704C143v11Ev,
  (VTBL_ENTRY)&_ZN8S7704C143v12Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C83v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C8__7S7704C2__7S7704C1[] = {
  0,
  0,
  ABISELECT(-3464,-2100),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C83v13Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
extern void ABISELECT(_ZTv0_n96_N7S7704C2D1Ev,_ZTv0_n48_N7S7704C2D1Ev)();
extern void ABISELECT(_ZThn3808_N7S7704C2D1Ev,_ZThn2312_N7S7704C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7704C2D0Ev,_ZTv0_n48_N7S7704C2D0Ev)();
extern void ABISELECT(_ZThn3808_N7S7704C2D0Ev,_ZThn2312_N7S7704C2D0Ev)() __attribute__((weak));
extern void _ZN8S7704C113v10Ev();
extern void _ZN8S7704C153v15Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C15__7S7704C2__7S7704C1[] = {
  ABISELECT(976,596),
  0,
  0,
  ABISELECT(-3808,-2312),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3808,-2312),
  ABISELECT(-3808,-2312),
  ABISELECT(-3808,-2312),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7704C2D1Ev,_ZTv0_n48_N7S7704C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7704C2D0Ev,_ZTv0_n48_N7S7704C2D0Ev),
  (VTBL_ENTRY)&_ZN8S7704C113v10Ev,
  (VTBL_ENTRY)&_ZN8S7704C153v15Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C83v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C88S7704C15__A1__7S7704C2__7S7704C1[] = {
  ABISELECT(-4784,-2908),
  (VTBL_ENTRY)&(_ZTI7S7704C2[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C83v13Ev,
};
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C3__7S7704C1[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__7S7704C3__7S7704C1[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN7S7704C93v14Ev();
extern void _ZN7S7704C9D1Ev();
extern void _ZN7S7704C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C9__7S7704C1[] = {
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-864,-532),
  ABISELECT(-864,-532),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7704C93v14Ev,
  (VTBL_ENTRY)&_ZN7S7704C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7704C9D0Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C67S7704C9__7S7704C1[] = {
  ABISELECT(-864,-532),
  ABISELECT(-864,-532),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__7S7704C67S7704C9__7S7704C1[] = {
  0,
  ABISELECT(864,532),
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C32v6Ev();
extern void _ZN8S7704C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C107S7704C9__7S7704C1[] = {
  ABISELECT(-912,-556),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C10[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7704C102v7Ev,
};
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C38S7704C107S7704C9__A1__7S7704C1[] = {
  ABISELECT(-352,-208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__7S7704C38S7704C107S7704C9__A1__7S7704C1[] = {
  0,
  ABISELECT(352,208),
  (VTBL_ENTRY)&(_ZTI7S7704C3[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C6__8S7704C107S7704C9__7S7704C1[] = {
  0,
  0,
  0,
  ABISELECT(-1528,-948),
  ABISELECT(-1528,-948),
  ABISELECT(-616,-392),
  (VTBL_ENTRY)&(_ZTI8S7704C10[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__8S7704C107S7704C9__7S7704C1[] = {
  0,
  ABISELECT(912,556),
  (VTBL_ENTRY)&(_ZTI8S7704C10[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__A1__8S7704C107S7704C9__7S7704C1[] = {
  0,
  ABISELECT(352,208),
  (VTBL_ENTRY)&(_ZTI8S7704C10[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__7S7704C9__7S7704C1[] = {
  0,
  ABISELECT(864,532),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C32v6Ev();
extern void _ZN8S7704C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C10__7S7704C9__7S7704C1[] = {
  ABISELECT(-912,-556),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7704C102v7Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C6__A1__7S7704C9__7S7704C1[] = {
  0,
  0,
  0,
  ABISELECT(-1528,-948),
  ABISELECT(-1528,-948),
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__A1__7S7704C9__7S7704C1[] = {
  0,
  ABISELECT(304,184),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
extern void ABISELECT(_ZTv0_n96_N7S7704C9D1Ev,_ZTv0_n48_N7S7704C9D1Ev)();
extern void ABISELECT(_ZThn720_N7S7704C9D1Ev,_ZThn440_N7S7704C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7704C9D0Ev,_ZTv0_n48_N7S7704C9D0Ev)();
extern void ABISELECT(_ZThn720_N7S7704C9D0Ev,_ZThn440_N7S7704C9D0Ev)() __attribute__((weak));
extern void _ZN8S7704C113v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C11__7S7704C9__7S7704C1[] = {
  0,
  ABISELECT(-720,-440),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1584,-972),
  ABISELECT(-1584,-972),
  ABISELECT(-720,-440),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7704C9D1Ev,_ZTv0_n48_N7S7704C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7704C9D0Ev,_ZTv0_n48_N7S7704C9D0Ev),
  (VTBL_ENTRY)&_ZN8S7704C113v10Ev,
};
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C3__A1__7S7704C9__7S7704C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(744,448),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN8S7704C143v11Ev();
extern void _ZN8S7704C143v12Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C14__7S7704C9__7S7704C1[] = {
  0,
  0,
  ABISELECT(-1696,-1036),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN8S7704C143v11Ev,
  (VTBL_ENTRY)&_ZN8S7704C143v12Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C83v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C8__7S7704C9__7S7704C1[] = {
  0,
  0,
  ABISELECT(-2600,-1568),
  (VTBL_ENTRY)&(_ZTI7S7704C9[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C83v13Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C6__A1__7S7704C1[] = {
  ABISELECT(-1528,-948),
  ABISELECT(-1528,-948),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__7S7704C6__A1__7S7704C1[] = {
  0,
  ABISELECT(1528,948),
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
extern void _ZN8S7704C11D1Ev();
extern void _ZN8S7704C11D0Ev();
extern void _ZN8S7704C113v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C11__7S7704C1[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1584,-972),
  ABISELECT(-1584,-972),
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7704C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7704C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7704C113v10Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C128S7704C11__7S7704C1[] = {
  ABISELECT(-1584,-972),
  ABISELECT(-1584,-972),
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C12[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C68S7704C128S7704C11__A2__7S7704C1[] = {
  ABISELECT(-1584,-972),
  ABISELECT(-1584,-972),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__7S7704C68S7704C128S7704C11__A2__7S7704C1[] = {
  0,
  ABISELECT(1584,972),
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__8S7704C128S7704C11__7S7704C1[] = {
  0,
  ABISELECT(1584,972),
  (VTBL_ENTRY)&(_ZTI8S7704C12[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__8S7704C11__7S7704C1[] = {
  0,
  ABISELECT(1584,972),
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C3__8S7704C11__7S7704C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(1464,888),
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__A1__8S7704C11__7S7704C1[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
extern void _ZN8S7704C15D1Ev();
extern void _ZN8S7704C15D0Ev();
extern void _ZN8S7704C113v10Ev();
extern void _ZN8S7704C153v15Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C15__7S7704C1[] = {
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3808,-2312),
  ABISELECT(-3808,-2312),
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C15[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7704C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7704C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7704C113v10Ev,
  (VTBL_ENTRY)&_ZN8S7704C153v15Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
extern void _ZN8S7704C11D1Ev();
extern void _ZN8S7704C11D0Ev();
extern void _ZN8S7704C113v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C118S7704C15__A1__7S7704C1[] = {
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3808,-2312),
  ABISELECT(-3808,-2312),
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7704C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7704C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7704C113v10Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
extern void _ZN8S7704C122v8Ev();
extern void _ZN8S7704C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7704C128S7704C118S7704C15__A1__7S7704C1[] = {
  ABISELECT(-3808,-2312),
  ABISELECT(-3808,-2312),
  0,
  (VTBL_ENTRY)&(_ZTI8S7704C12[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7704C122v9Ev,
};
extern void _ZN7S7704C52v2Ev();
extern void _ZN7S7704C62v3Ev();
extern void _ZN7S7704C62v4Ev();
extern void _ZN7S7704C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C68S7704C128S7704C118S7704C15__A3__7S7704C1[] = {
  ABISELECT(-3808,-2312),
  ABISELECT(-3808,-2312),
  0,
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7704C62v5Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__7S7704C68S7704C128S7704C118S7704C15__A3__7S7704C1[] = {
  0,
  ABISELECT(3808,2312),
  (VTBL_ENTRY)&(_ZTI7S7704C6[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__8S7704C128S7704C118S7704C15__A1__7S7704C1[] = {
  0,
  ABISELECT(3808,2312),
  (VTBL_ENTRY)&(_ZTI8S7704C12[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__8S7704C118S7704C15__A1__7S7704C1[] = {
  0,
  ABISELECT(3808,2312),
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C3__8S7704C118S7704C15__A1__7S7704C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(3688,2228),
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__A1__8S7704C118S7704C15__A1__7S7704C1[] = {
  0,
  ABISELECT(3248,1964),
  (VTBL_ENTRY)&(_ZTI8S7704C11[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C5__8S7704C15__7S7704C1[] = {
  0,
  ABISELECT(3808,2312),
  (VTBL_ENTRY)&(_ZTI8S7704C15[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
extern void _ZN7S7704C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C3__8S7704C15__7S7704C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(3688,2228),
  (VTBL_ENTRY)&(_ZTI8S7704C15[0]),
  (VTBL_ENTRY)&_ZN7S7704C32v6Ev,
};
extern void _ZN7S7704C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7704C57S7704C4__A1__8S7704C15__7S7704C1[] = {
  0,
  ABISELECT(3248,1964),
  (VTBL_ENTRY)&(_ZTI8S7704C15[0]),
  (VTBL_ENTRY)&_ZN7S7704C52v2Ev,
};
static  VTT_ENTRY vtt_S7704C1[] = {
  {&(_ZTV7S7704C1[12]),  12,132},
  {&(_tg__ZTV7S7704C2__7S7704C1[12]),  12,17},
  {&(_tg__ZTV7S7704C3__7S7704C2__7S7704C1[4]),  4,5},
  {&(_tg__ZTV7S7704C57S7704C4__7S7704C2__7S7704C1[3]),  3,4},
  {&(_tg__ZTV7S7704C9__7S7704C2__7S7704C1[17]),  17,24},
  {&(_tg__ZTV7S7704C2__7S7704C1[12]),  12,17},
  {&(_tg__ZTV8S7704C107S7704C9__7S7704C2__7S7704C1[5]),  5,7},
  {&(_tg__ZTV7S7704C6__A1__7S7704C2__7S7704C1[7]),  7,11},
  {&(_tg__ZTV8S7704C11__7S7704C2__7S7704C1[13]),  13,22},
  {&(_tg__ZTV8S7704C14__7S7704C2__7S7704C1[4]),  4,6},
  {&(_tg__ZTV7S7704C8__7S7704C2__7S7704C1[4]),  4,6},
  {&(_tg__ZTV8S7704C15__7S7704C2__7S7704C1[15]),  15,25},
  {&(_tg__ZTV7S7704C88S7704C15__A1__7S7704C2__7S7704C1[2]),  2,4},
  {&(_ZTV7S7704C1[22]),  22,132},
  {&(_ZTV7S7704C1[26]),  26,132},
  {&(_ZTV7S7704C1[44]),  44,132},
  {&(_ZTV7S7704C1[12]),  12,132},
  {&(_ZTV7S7704C1[56]),  56,132},
  {&(_ZTV7S7704C1[65]),  65,132},
  {&(_ZTV7S7704C1[82]),  82,132},
  {&(_ZTV7S7704C1[95]),  95,132},
  {&(_ZTV7S7704C1[101]),  101,132},
  {&(_ZTV7S7704C1[118]),  118,132},
  {&(_ZTV7S7704C1[130]),  130,132},
  {&(_tg__ZTV7S7704C3__7S7704C1[3]),  3,4},
  {&(_tg__ZTV7S7704C57S7704C4__7S7704C3__7S7704C1[3]),  3,4},
  {&(_tg__ZTV7S7704C9__7S7704C1[10]),  10,17},
  {&(_tg__ZTV7S7704C67S7704C9__7S7704C1[4]),  4,8},
  {&(_tg__ZTV7S7704C5__7S7704C67S7704C9__7S7704C1[3]),  3,4},
  {&(_tg__ZTV8S7704C107S7704C9__7S7704C1[5]),  5,7},
  {&(_tg__ZTV7S7704C38S7704C107S7704C9__A1__7S7704C1[3]),  3,4},
  {&(_tg__ZTV7S7704C57S7704C4__7S7704C38S7704C107S7704C9__A1__7S7704C1[3]),  3,4},
  {&(_tg__ZTV7S7704C6__8S7704C107S7704C9__7S7704C1[7]),  7,11},
  {&(_tg__ZTV7S7704C5__8S7704C107S7704C9__7S7704C1[3]),  3,4},
  {&(_tg__ZTV7S7704C57S7704C4__A1__8S7704C107S7704C9__7S7704C1[3]),  3,4},
  {&(_tg__ZTV7S7704C5__7S7704C9__7S7704C1[3]),  3,4},
  {&(_tg__ZTV8S7704C10__7S7704C9__7S7704C1[5]),  5,7},
  {&(_tg__ZTV7S7704C6__A1__7S7704C9__7S7704C1[7]),  7,11},
  {&(_tg__ZTV7S7704C57S7704C4__A1__7S7704C9__7S7704C1[3]),  3,4},
  {&(_tg__ZTV8S7704C11__7S7704C9__7S7704C1[13]),  13,22},
  {&(_tg__ZTV7S7704C3__A1__7S7704C9__7S7704C1[4]),  4,5},
  {&(_tg__ZTV8S7704C14__7S7704C9__7S7704C1[4]),  4,6},
  {&(_tg__ZTV7S7704C8__7S7704C9__7S7704C1[4]),  4,6},
  {&(_tg__ZTV7S7704C6__A1__7S7704C1[4]),  4,8},
  {&(_tg__ZTV7S7704C5__7S7704C6__A1__7S7704C1[3]),  3,4},
  {&(_tg__ZTV8S7704C11__7S7704C1[6]),  6,15},
  {&(_tg__ZTV8S7704C128S7704C11__7S7704C1[4]),  4,10},
  {&(_tg__ZTV7S7704C68S7704C128S7704C11__A2__7S7704C1[4]),  4,8},
  {&(_tg__ZTV7S7704C5__7S7704C68S7704C128S7704C11__A2__7S7704C1[3]),  3,4},
  {&(_tg__ZTV7S7704C5__8S7704C128S7704C11__7S7704C1[3]),  3,4},
  {&(_tg__ZTV7S7704C5__8S7704C11__7S7704C1[3]),  3,4},
  {&(_tg__ZTV7S7704C3__8S7704C11__7S7704C1[4]),  4,5},
  {&(_tg__ZTV7S7704C57S7704C4__A1__8S7704C11__7S7704C1[3]),  3,4},
  {&(_tg__ZTV8S7704C15__7S7704C1[6]),  6,16},
  {&(_tg__ZTV8S7704C118S7704C15__A1__7S7704C1[6]),  6,15},
  {&(_tg__ZTV8S7704C128S7704C118S7704C15__A1__7S7704C1[4]),  4,10},
  {&(_tg__ZTV7S7704C68S7704C128S7704C118S7704C15__A3__7S7704C1[4]),  4,8},
  {&(_tg__ZTV7S7704C5__7S7704C68S7704C128S7704C118S7704C15__A3__7S7704C1[3]),  3,4},
  {&(_tg__ZTV7S7704C5__8S7704C128S7704C118S7704C15__A1__7S7704C1[3]),  3,4},
  {&(_tg__ZTV7S7704C5__8S7704C118S7704C15__A1__7S7704C1[3]),  3,4},
  {&(_tg__ZTV7S7704C3__8S7704C118S7704C15__A1__7S7704C1[4]),  4,5},
  {&(_tg__ZTV7S7704C57S7704C4__A1__8S7704C118S7704C15__A1__7S7704C1[3]),  3,4},
  {&(_tg__ZTV7S7704C5__8S7704C15__7S7704C1[3]),  3,4},
  {&(_tg__ZTV7S7704C3__8S7704C15__7S7704C1[4]),  4,5},
  {&(_tg__ZTV7S7704C57S7704C4__A1__8S7704C15__7S7704C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7704C1[];
extern  VTBL_ENTRY _ZTV7S7704C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7704C1[];
static VTBL_ENTRY alt_thunk_names71[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7704C9D0Ev,_ZTv0_n48_N7S7704C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S7704C9D0Ev,_ZThn440_N7S7704C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7704C9D1Ev,_ZTv0_n48_N7S7704C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S7704C9D1Ev,_ZThn440_N7S7704C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7704C2D0Ev,_ZTv0_n48_N7S7704C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3808_N7S7704C2D0Ev,_ZThn2312_N7S7704C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1584_N7S7704C2D0Ev,_ZThn972_N7S7704C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7704C2D1Ev,_ZTv0_n48_N7S7704C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3808_N7S7704C2D1Ev,_ZThn2312_N7S7704C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1584_N7S7704C2D1Ev,_ZThn972_N7S7704C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7704C2D0Ev,_ZTv0_n60_N7S7704C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N7S7704C2D0Ev,_ZThn532_N7S7704C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7704C2D1Ev,_ZTv0_n60_N7S7704C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N7S7704C2D1Ev,_ZThn532_N7S7704C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7704C1D0Ev,_ZTv0_n48_N7S7704C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3808_N7S7704C1D0Ev,_ZThn2312_N7S7704C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1584_N7S7704C1D0Ev,_ZThn972_N7S7704C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7704C1D1Ev,_ZTv0_n48_N7S7704C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3808_N7S7704C1D1Ev,_ZThn2312_N7S7704C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1584_N7S7704C1D1Ev,_ZThn972_N7S7704C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7704C1D0Ev,_ZTv0_n60_N7S7704C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N7S7704C1D0Ev,_ZThn532_N7S7704C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7704C1D1Ev,_ZTv0_n60_N7S7704C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N7S7704C1D1Ev,_ZThn532_N7S7704C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7704C1 = {  "S7704C1", // class name
  bases_S7704C1, 22,
  &(vtc_S7704C1[0]), // expected_vtbl_contents
  &(vtt_S7704C1[0]), // expected_vtt_contents
  ABISELECT(5184,3152), // object size
  NSPAIRA(_ZTI7S7704C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7704C1),132, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7704C1),65, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names71,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7705C5  {
  virtual void  v2(); // _ZN7S7705C52v2Ev
  ~S7705C5(); // tgen
  S7705C5(); // tgen
};
//SIG(-1 S7705C5) C1{ v1}


void  S7705C5 ::v2(){vfunc_called(this, "_ZN7S7705C52v2Ev");}
S7705C5 ::~S7705C5(){ note_dtor("S7705C5", this);} // tgen
S7705C5 ::S7705C5(){ note_ctor("S7705C5", this);} // tgen

static void Test_S7705C5()
{
  extern Class_Descriptor cd_S7705C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7705C5, buf);
    S7705C5 *dp, &lv = *(dp=new (buf) S7705C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7705C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7705C5)");
    test_class_info(&lv, &cd_S7705C5);
    dp->~S7705C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7705C5(Test_S7705C5, "S7705C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7705C5C1Ev();
extern void _ZN7S7705C5D1Ev();
Name_Map name_map_S7705C5[] = {
  NSPAIR(_ZN7S7705C5C1Ev),
  NSPAIR(_ZN7S7705C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7705C5[];
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY vtc_S7705C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C5[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
Class_Descriptor cd_S7705C5 = {  "S7705C5", // class name
  0,0,//no base classes
  &(vtc_S7705C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7705C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7705C5),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7705C6  : virtual S7705C5 {
  void *s7705c6f0[3];
  ::S2489C12_nt s7705c6f1;
  void *s7705c6f2;
  virtual void  v3(); // _ZN7S7705C62v3Ev
  virtual void  v4(); // _ZN7S7705C62v4Ev
  virtual void  v5(); // _ZN7S7705C62v5Ev
  ~S7705C6(); // tgen
  S7705C6(); // tgen
};
//SIG(-1 S7705C6) C1{ VBC2{ v4} v1 v2 v3 Fp[3] FC3{} Fp}


void  S7705C6 ::v3(){vfunc_called(this, "_ZN7S7705C62v3Ev");}
void  S7705C6 ::v4(){vfunc_called(this, "_ZN7S7705C62v4Ev");}
void  S7705C6 ::v5(){vfunc_called(this, "_ZN7S7705C62v5Ev");}
S7705C6 ::~S7705C6(){ note_dtor("S7705C6", this);} // tgen
S7705C6 ::S7705C6(){ note_ctor("S7705C6", this);} // tgen

static void Test_S7705C6()
{
  extern Class_Descriptor cd_S7705C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7705C6, buf);
    S7705C6 *dp, &lv = *(dp=new (buf) S7705C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7705C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7705C6)");
    check_base_class_offset(lv, (S7705C5*), 0, "S7705C6");
    check_field_offset(lv, s7705c6f0, ABISELECT(8,4), "S7705C6.s7705c6f0");
    check_field_offset(lv, s7705c6f1, ABISELECT(32,16), "S7705C6.s7705c6f1");
    check_field_offset(lv, s7705c6f2, ABISELECT(40,20), "S7705C6.s7705c6f2");
    test_class_info(&lv, &cd_S7705C6);
    dp->~S7705C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7705C6(Test_S7705C6, "S7705C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7705C6C1Ev();
extern void _ZN7S7705C6D1Ev();
Name_Map name_map_S7705C6[] = {
  NSPAIR(_ZN7S7705C6C1Ev),
  NSPAIR(_ZN7S7705C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
static Base_Class bases_S7705C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7705C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7705C6[];
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY vtc_S7705C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern VTBL_ENTRY _ZTV7S7705C6[];
static  VTT_ENTRY vtt_S7705C6[] = {
  {&(_ZTV7S7705C6[4]),  4,8},
  {&(_ZTV7S7705C6[4]),  4,8},
};
extern VTBL_ENTRY _ZTI7S7705C6[];
extern  VTBL_ENTRY _ZTV7S7705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C6[];
Class_Descriptor cd_S7705C6 = {  "S7705C6", // class name
  bases_S7705C6, 1,
  &(vtc_S7705C6[0]), // expected_vtbl_contents
  &(vtt_S7705C6[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7705C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7705C6),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7705C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7705C4  : S7705C5 {
  char s7705c4f0[5];
  ::S7705C6 s7705c4f1[2];
  int s7705c4f2;
  void *s7705c4f3[7];
  ::S7705C6 s7705c4f4;
  ::S7705C5 s7705c4f5;
  char s7705c4f6;
  int s7705c4f7;
  short s7705c4f8[5];
  int s7705c4f9[8];
  __tsi64 s7705c4f10;
  char s7705c4f11:8;
  ~S7705C4(); // tgen
  S7705C4(); // tgen
};
//SIG(-1 S7705C4) C1{ BC2{ v1} Fc[5] FC3{ VBC2 v2 v3 v4 Fp[3] FC4{} Fp}[2] Fi Fp[7] FC3 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}


S7705C4 ::~S7705C4(){ note_dtor("S7705C4", this);} // tgen
S7705C4 ::S7705C4(){ note_ctor("S7705C4", this);} // tgen

static void Test_S7705C4()
{
  extern Class_Descriptor cd_S7705C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,47)];
    init_test(&cd_S7705C4, buf);
    S7705C4 *dp, &lv = *(dp=new (buf) S7705C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,184), "sizeof(S7705C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7705C4)");
    check_base_class_offset(lv, (S7705C5*), 0, "S7705C4");
    check_field_offset(lv, s7705c4f0, ABISELECT(8,4), "S7705C4.s7705c4f0");
    check_field_offset(lv, s7705c4f1, ABISELECT(16,12), "S7705C4.s7705c4f1");
    check_field_offset(lv, s7705c4f2, ABISELECT(112,60), "S7705C4.s7705c4f2");
    check_field_offset(lv, s7705c4f3, ABISELECT(120,64), "S7705C4.s7705c4f3");
    check_field_offset(lv, s7705c4f4, ABISELECT(176,92), "S7705C4.s7705c4f4");
    check_field_offset(lv, s7705c4f5, ABISELECT(224,116), "S7705C4.s7705c4f5");
    check_field_offset(lv, s7705c4f6, ABISELECT(232,120), "S7705C4.s7705c4f6");
    check_field_offset(lv, s7705c4f7, ABISELECT(236,124), "S7705C4.s7705c4f7");
    check_field_offset(lv, s7705c4f8, ABISELECT(240,128), "S7705C4.s7705c4f8");
    check_field_offset(lv, s7705c4f9, ABISELECT(252,140), "S7705C4.s7705c4f9");
    check_field_offset(lv, s7705c4f10, ABISELECT(288,172), "S7705C4.s7705c4f10");
    set_bf_and_test(lv, s7705c4f11, ABISELECT(296,180), 0, 8, 1, "S7705C4");
    set_bf_and_test(lv, s7705c4f11, ABISELECT(296,180), 0, 8, hide_sll(1LL<<7), "S7705C4");
    test_class_info(&lv, &cd_S7705C4);
    dp->~S7705C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7705C4(Test_S7705C4, "S7705C4", ABISELECT(304,184));

#else // __cplusplus

extern void _ZN7S7705C4C1Ev();
extern void _ZN7S7705C4D1Ev();
Name_Map name_map_S7705C4[] = {
  NSPAIR(_ZN7S7705C4C1Ev),
  NSPAIR(_ZN7S7705C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
static Base_Class bases_S7705C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7705C5,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7705C4[];
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY vtc_S7705C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C4[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern VTBL_ENTRY _ZTI7S7705C4[];
extern  VTBL_ENTRY _ZTV7S7705C4[];
Class_Descriptor cd_S7705C4 = {  "S7705C4", // class name
  bases_S7705C4, 1,
  &(vtc_S7705C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,184), // object size
  NSPAIRA(_ZTI7S7705C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7705C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7705C8  : S7705C5 {
  char s7705c8f0;
  __tsi64 s7705c8f1;
  int s7705c8f2[3];
  ::S7705C4 s7705c8f3;
  virtual void  v13(); // _ZN7S7705C83v13Ev
  ~S7705C8(); // tgen
  S7705C8(); // tgen
};
//SIG(-1 S7705C8) C1{ BC2{ v2} v1 Fc FL Fi[3] FC3{ BC2 Fc[5] FC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}}


void  S7705C8 ::v13(){vfunc_called(this, "_ZN7S7705C83v13Ev");}
S7705C8 ::~S7705C8(){ note_dtor("S7705C8", this);} // tgen
S7705C8 ::S7705C8(){ note_ctor("S7705C8", this);} // tgen

static void Test_S7705C8()
{
  extern Class_Descriptor cd_S7705C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,54)];
    init_test(&cd_S7705C8, buf);
    S7705C8 *dp, &lv = *(dp=new (buf) S7705C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,212), "sizeof(S7705C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7705C8)");
    check_base_class_offset(lv, (S7705C5*), 0, "S7705C8");
    check_field_offset(lv, s7705c8f0, ABISELECT(8,4), "S7705C8.s7705c8f0");
    check_field_offset(lv, s7705c8f1, ABISELECT(16,8), "S7705C8.s7705c8f1");
    check_field_offset(lv, s7705c8f2, ABISELECT(24,16), "S7705C8.s7705c8f2");
    check_field_offset(lv, s7705c8f3, ABISELECT(40,28), "S7705C8.s7705c8f3");
    test_class_info(&lv, &cd_S7705C8);
    dp->~S7705C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7705C8(Test_S7705C8, "S7705C8", ABISELECT(344,212));

#else // __cplusplus

extern void _ZN7S7705C8C1Ev();
extern void _ZN7S7705C8D1Ev();
Name_Map name_map_S7705C8[] = {
  NSPAIR(_ZN7S7705C8C1Ev),
  NSPAIR(_ZN7S7705C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
static Base_Class bases_S7705C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7705C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7705C8[];
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C83v13Ev();
static  VTBL_ENTRY vtc_S7705C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C8[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C83v13Ev,
};
extern VTBL_ENTRY _ZTI7S7705C8[];
extern  VTBL_ENTRY _ZTV7S7705C8[];
Class_Descriptor cd_S7705C8 = {  "S7705C8", // class name
  bases_S7705C8, 1,
  &(vtc_S7705C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,212), // object size
  NSPAIRA(_ZTI7S7705C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7705C8),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7705C3  : virtual S7705C4 {
  void *s7705c3f0;
  __tsi64 s7705c3f1;
  void *s7705c3f2[6];
  ::S7705C5 s7705c3f3;
  ::S7705C8 s7705c3f4;
  void *s7705c3f5;
  int s7705c3f6;
  virtual void  v6(); // _ZN7S7705C32v6Ev
  ~S7705C3(); // tgen
  S7705C3(); // tgen
};
//SIG(-1 S7705C3) C1{ VBC2{ BC3{ v2} Fc[5] FC4{ VBC3 v4 v5 v6 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v1 Fp FL Fp[6] FC3 FC6{ BC3 v3 Fc FL Fi[3] FC2} Fp Fi}


void  S7705C3 ::v6(){vfunc_called(this, "_ZN7S7705C32v6Ev");}
S7705C3 ::~S7705C3(){ note_dtor("S7705C3", this);} // tgen
S7705C3 ::S7705C3(){ note_ctor("S7705C3", this);} // tgen

static void Test_S7705C3()
{
  extern Class_Descriptor cd_S7705C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(94,113)];
    init_test(&cd_S7705C3, buf);
    S7705C3 *dp, &lv = *(dp=new (buf) S7705C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(744,448), "sizeof(S7705C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7705C3)");
    check_base_class_offset(lv, (S7705C5*)(S7705C4*), ABISELECT(440,264), "S7705C3");
    check_base_class_offset(lv, (S7705C4*), ABISELECT(440,264), "S7705C3");
    check_field_offset(lv, s7705c3f0, ABISELECT(8,4), "S7705C3.s7705c3f0");
    check_field_offset(lv, s7705c3f1, ABISELECT(16,8), "S7705C3.s7705c3f1");
    check_field_offset(lv, s7705c3f2, ABISELECT(24,16), "S7705C3.s7705c3f2");
    check_field_offset(lv, s7705c3f3, ABISELECT(72,40), "S7705C3.s7705c3f3");
    check_field_offset(lv, s7705c3f4, ABISELECT(80,44), "S7705C3.s7705c3f4");
    check_field_offset(lv, s7705c3f5, ABISELECT(424,256), "S7705C3.s7705c3f5");
    check_field_offset(lv, s7705c3f6, ABISELECT(432,260), "S7705C3.s7705c3f6");
    test_class_info(&lv, &cd_S7705C3);
    dp->~S7705C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7705C3(Test_S7705C3, "S7705C3", ABISELECT(744,448));

#else // __cplusplus

extern void _ZN7S7705C3C1Ev();
extern void _ZN7S7705C3D1Ev();
Name_Map name_map_S7705C3[] = {
  NSPAIR(_ZN7S7705C3C1Ev),
  NSPAIR(_ZN7S7705C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C4;
extern VTBL_ENTRY _ZTI7S7705C4[];
extern  VTBL_ENTRY _ZTV7S7705C4[];
static Base_Class bases_S7705C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7705C5,    ABISELECT(440,264), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7705C4,    ABISELECT(440,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7705C3[];
extern void _ZN7S7705C32v6Ev();
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY vtc_S7705C3[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern VTBL_ENTRY _ZTV7S7705C3[];
static  VTT_ENTRY vtt_S7705C3[] = {
  {&(_ZTV7S7705C3[3]),  3,8},
  {&(_ZTV7S7705C3[7]),  7,8},
};
extern VTBL_ENTRY _ZTI7S7705C3[];
extern  VTBL_ENTRY _ZTV7S7705C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C3[];
Class_Descriptor cd_S7705C3 = {  "S7705C3", // class name
  bases_S7705C3, 2,
  &(vtc_S7705C3[0]), // expected_vtbl_contents
  &(vtt_S7705C3[0]), // expected_vtt_contents
  ABISELECT(744,448), // object size
  NSPAIRA(_ZTI7S7705C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7705C3),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7705C3),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7705C10  : virtual S7705C6 , S7705C3 {
  void *s7705c10f0;
  ::S7705C5 s7705c10f1;
  __tsi64 s7705c10f2[8];
  ::S7705C6 s7705c10f3;
  void *s7705c10f4;
  virtual void  v7(); // _ZN8S7705C102v7Ev
  ~S7705C10(); // tgen
  S7705C10(); // tgen
};
//SIG(-1 S7705C10) C1{ VBC2{ VBC3{ v2} v3 v4 v5 Fp[3] FC4{} Fp} BC5{ VBC6{ BC3 Fc[5] FC2[2] Fi Fp[7] FC2 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v6 Fp FL Fp[6] FC3 FC7{ BC3 v7 Fc FL Fi[3] FC6} Fp Fi} v1 Fp FC3 FL[8] FC2 Fp}


void  S7705C10 ::v7(){vfunc_called(this, "_ZN8S7705C102v7Ev");}
S7705C10 ::~S7705C10(){ note_dtor("S7705C10", this);} // tgen
S7705C10 ::S7705C10(){ note_ctor("S7705C10", this);} // tgen

static void Test_S7705C10()
{
  extern Class_Descriptor cd_S7705C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(117,144)];
    init_test(&cd_S7705C10, buf);
    S7705C10 *dp, &lv = *(dp=new (buf) S7705C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(928,572), "sizeof(S7705C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7705C10)");
    check_base_class_offset(lv, (S7705C5*)(S7705C6*), ABISELECT(576,364), "S7705C10");
    check_base_class_offset(lv, (S7705C6*), ABISELECT(576,364), "S7705C10");
    check_base_class_offset(lv, (S7705C5*)(S7705C4*), ABISELECT(624,388), "S7705C10");
    check_base_class_offset(lv, (S7705C4*)(S7705C3*), ABISELECT(624,388), "S7705C10");
    check_base_class_offset(lv, (S7705C3*), 0, "S7705C10");
    check_field_offset(lv, s7705c10f0, ABISELECT(440,264), "S7705C10.s7705c10f0");
    check_field_offset(lv, s7705c10f1, ABISELECT(448,268), "S7705C10.s7705c10f1");
    check_field_offset(lv, s7705c10f2, ABISELECT(456,272), "S7705C10.s7705c10f2");
    check_field_offset(lv, s7705c10f3, ABISELECT(520,336), "S7705C10.s7705c10f3");
    check_field_offset(lv, s7705c10f4, ABISELECT(568,360), "S7705C10.s7705c10f4");
    test_class_info(&lv, &cd_S7705C10);
    dp->~S7705C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7705C10(Test_S7705C10, "S7705C10", ABISELECT(928,572));

#else // __cplusplus

extern void _ZN8S7705C10C1Ev();
extern void _ZN8S7705C10D1Ev();
Name_Map name_map_S7705C10[] = {
  NSPAIR(_ZN8S7705C10C1Ev),
  NSPAIR(_ZN8S7705C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C6;
extern VTBL_ENTRY _ZTI7S7705C6[];
extern  VTBL_ENTRY _ZTV7S7705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C6[];
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C4;
extern VTBL_ENTRY _ZTI7S7705C4[];
extern  VTBL_ENTRY _ZTV7S7705C4[];
extern Class_Descriptor cd_S7705C3;
extern VTBL_ENTRY _ZTI7S7705C3[];
extern  VTBL_ENTRY _ZTV7S7705C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C3[];
static Base_Class bases_S7705C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7705C5,    ABISELECT(576,364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7705C6,    ABISELECT(576,364), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7705C5,    ABISELECT(624,388), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7705C4,    ABISELECT(624,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7705C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7705C10[];
extern void _ZN7S7705C32v6Ev();
extern void _ZN8S7705C102v7Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY vtc_S7705C10[] = {
  ABISELECT(576,364),
  ABISELECT(576,364),
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C10[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7705C102v7Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-576,-364),
  (VTBL_ENTRY)&(_ZTI8S7705C10[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI8S7705C10[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S7705C10[];
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C3__8S7705C10[] = {
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__7S7705C3__8S7705C10[] = {
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C6__8S7705C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
static  VTT_ENTRY vtt_S7705C10[] = {
  {&(_ZTV8S7705C10[5]),  5,22},
  {&(_tg__ZTV7S7705C3__8S7705C10[3]),  3,4},
  {&(_tg__ZTV7S7705C57S7705C4__7S7705C3__8S7705C10[3]),  3,4},
  {&(_ZTV8S7705C10[14]),  14,22},
  {&(_ZTV8S7705C10[14]),  14,22},
  {&(_ZTV8S7705C10[21]),  21,22},
  {&(_tg__ZTV7S7705C6__8S7705C10[4]),  4,8},
  {&(_tg__ZTV7S7705C6__8S7705C10[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S7705C10[];
extern  VTBL_ENTRY _ZTV8S7705C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C10[];
Class_Descriptor cd_S7705C10 = {  "S7705C10", // class name
  bases_S7705C10, 5,
  &(vtc_S7705C10[0]), // expected_vtbl_contents
  &(vtt_S7705C10[0]), // expected_vtt_contents
  ABISELECT(928,572), // object size
  NSPAIRA(_ZTI8S7705C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7705C10),22, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7705C10),8, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7705C12  : S7705C6 {
  void *s7705c12f0;
  ::S19277C8 s7705c12f1;
  int s7705c12f2;
  void *s7705c12f3;
  int s7705c12f4[2];
  virtual void  v8(); // _ZN8S7705C122v8Ev
  virtual void  v9(); // _ZN8S7705C122v9Ev
  ~S7705C12(); // tgen
  S7705C12(); // tgen
};
//SIG(-1 S7705C12) C1{ BC2{ VBC3{ v3} v4 v5 v6 Fp[3] FC4{} Fp} v1 v2 Fp FC5{ BC6{ BC7{ v7} Fc[5] FC8{ VBC7 v8 v9 v10 Fp[3] FC4 Fp}[2] Fi Fp[7] FC8 FC7 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC7 VBC8 Fi Fp} Fi Fp Fi[2]}


void  S7705C12 ::v8(){vfunc_called(this, "_ZN8S7705C122v8Ev");}
void  S7705C12 ::v9(){vfunc_called(this, "_ZN8S7705C122v9Ev");}
S7705C12 ::~S7705C12(){ note_dtor("S7705C12", this);} // tgen
S7705C12 ::S7705C12(){ note_ctor("S7705C12", this);} // tgen

static void Test_S7705C12()
{
  extern Class_Descriptor cd_S7705C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(56,66)];
    init_test(&cd_S7705C12, buf);
    S7705C12 *dp, &lv = *(dp=new (buf) S7705C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(440,260), "sizeof(S7705C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7705C12)");
    check_base_class_offset(lv, (S7705C5*)(S7705C6*), 0, "S7705C12");
    check_base_class_offset(lv, (S7705C6*), 0, "S7705C12");
    check_field_offset(lv, s7705c12f0, ABISELECT(48,24), "S7705C12.s7705c12f0");
    check_field_offset(lv, s7705c12f1, ABISELECT(56,28), "S7705C12.s7705c12f1");
    check_field_offset(lv, s7705c12f2, ABISELECT(416,244), "S7705C12.s7705c12f2");
    check_field_offset(lv, s7705c12f3, ABISELECT(424,248), "S7705C12.s7705c12f3");
    check_field_offset(lv, s7705c12f4, ABISELECT(432,252), "S7705C12.s7705c12f4");
    test_class_info(&lv, &cd_S7705C12);
    dp->~S7705C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7705C12(Test_S7705C12, "S7705C12", ABISELECT(440,260));

#else // __cplusplus

extern void _ZN8S7705C12C1Ev();
extern void _ZN8S7705C12D1Ev();
Name_Map name_map_S7705C12[] = {
  NSPAIR(_ZN8S7705C12C1Ev),
  NSPAIR(_ZN8S7705C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C6;
extern VTBL_ENTRY _ZTI7S7705C6[];
extern  VTBL_ENTRY _ZTV7S7705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C6[];
static Base_Class bases_S7705C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7705C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7705C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7705C12[];
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
static  VTBL_ENTRY vtc_S7705C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C12[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
};
extern VTBL_ENTRY _ZTV8S7705C12[];
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C6__8S7705C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
static  VTT_ENTRY vtt_S7705C12[] = {
  {&(_ZTV8S7705C12[4]),  4,10},
  {&(_tg__ZTV7S7705C6__8S7705C12[4]),  4,8},
  {&(_tg__ZTV7S7705C6__8S7705C12[4]),  4,8},
  {&(_ZTV8S7705C12[4]),  4,10},
};
extern VTBL_ENTRY _ZTI8S7705C12[];
extern  VTBL_ENTRY _ZTV8S7705C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C12[];
Class_Descriptor cd_S7705C12 = {  "S7705C12", // class name
  bases_S7705C12, 2,
  &(vtc_S7705C12[0]), // expected_vtbl_contents
  &(vtt_S7705C12[0]), // expected_vtt_contents
  ABISELECT(440,260), // object size
  NSPAIRA(_ZTI8S7705C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7705C12),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7705C12),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7705C11  : virtual S7705C5 , S7705C12 , virtual S7705C3 {
  void *s7705c11f0[2];
  int s7705c11f1[9];
  ::S7705C8 s7705c11f2;
  ::S7705C5 s7705c11f3[9];
  __tsi64 s7705c11f4;
  long double s7705c11f5;
  void *s7705c11f6;
  __tsi64 s7705c11f7;
  long s7705c11f8;
  __tsi64 s7705c11f9;
  virtual  ~S7705C11(); // _ZN8S7705C11D2Ev
  virtual void  v10(); // _ZN8S7705C113v10Ev
  S7705C11(); // tgen
};
//SIG(-1 S7705C11) C1{ VBC2{ v2} BC3{ BC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp} v6 v7 Fp FC6{ BC7{ BC8{ v9} Fc[5] FC9{ VBC8 v10 v11 v12 Fp[3] FC5 Fp}[2] Fi Fp[7] FC9 FC8 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC8 VBC9 Fi Fp} Fi Fp Fi[2]} VBC10{ VBC11{ BC2 Fc[5] FC4[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC2 FC12{ BC2 v13 Fc FL Fi[3] FC11} Fp Fi} vd v1 Fp[2] Fi[9] FC12 FC2[9] FL FD Fp FL Fl FL}


 S7705C11 ::~S7705C11(){ note_dtor("S7705C11", this);}
void  S7705C11 ::v10(){vfunc_called(this, "_ZN8S7705C113v10Ev");}
S7705C11 ::S7705C11(){ note_ctor("S7705C11", this);} // tgen

static void Test_S7705C11()
{
  extern Class_Descriptor cd_S7705C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(109,262)];
    init_test(&cd_S7705C11, buf);
    S7705C11 *dp, &lv = *(dp=new (buf) S7705C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1728,1044), "sizeof(S7705C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7705C11)");
    /*is_ambiguous_... S7705C11::S7705C5 */ AMB_check_base_class_offset(lv, (S7705C5*), 0, "S7705C11");
    check_base_class_offset(lv, (S7705C5*)(S7705C6*)(S7705C12*), 0, "S7705C11");
    check_base_class_offset(lv, (S7705C6*)(S7705C12*), 0, "S7705C11");
    check_base_class_offset(lv, (S7705C12*), 0, "S7705C11");
    check_base_class_offset(lv, (S7705C5*)(S7705C4*), ABISELECT(1416,860), "S7705C11");
    check_base_class_offset(lv, (S7705C4*)(S7705C3*), ABISELECT(1416,860), "S7705C11");
    check_base_class_offset(lv, (S7705C3*), ABISELECT(976,596), "S7705C11");
    check_field_offset(lv, s7705c11f0, ABISELECT(440,260), "S7705C11.s7705c11f0");
    check_field_offset(lv, s7705c11f1, ABISELECT(456,268), "S7705C11.s7705c11f1");
    check_field_offset(lv, s7705c11f2, ABISELECT(496,304), "S7705C11.s7705c11f2");
    check_field_offset(lv, s7705c11f3, ABISELECT(840,516), "S7705C11.s7705c11f3");
    check_field_offset(lv, s7705c11f4, ABISELECT(912,552), "S7705C11.s7705c11f4");
    check_field_offset(lv, s7705c11f5, ABISELECT(928,560), "S7705C11.s7705c11f5");
    check_field_offset(lv, s7705c11f6, ABISELECT(944,572), "S7705C11.s7705c11f6");
    check_field_offset(lv, s7705c11f7, ABISELECT(952,576), "S7705C11.s7705c11f7");
    check_field_offset(lv, s7705c11f8, ABISELECT(960,584), "S7705C11.s7705c11f8");
    check_field_offset(lv, s7705c11f9, ABISELECT(968,588), "S7705C11.s7705c11f9");
    test_class_info(&lv, &cd_S7705C11);
    dp->~S7705C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7705C11(Test_S7705C11, "S7705C11", ABISELECT(1728,1044));

#else // __cplusplus

extern void _ZN8S7705C11C1Ev();
extern void _ZN8S7705C11D2Ev();
Name_Map name_map_S7705C11[] = {
  NSPAIR(_ZN8S7705C11C1Ev),
  NSPAIR(_ZN8S7705C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C6;
extern VTBL_ENTRY _ZTI7S7705C6[];
extern  VTBL_ENTRY _ZTV7S7705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C6[];
extern Class_Descriptor cd_S7705C12;
extern VTBL_ENTRY _ZTI8S7705C12[];
extern  VTBL_ENTRY _ZTV8S7705C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C12[];
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C4;
extern VTBL_ENTRY _ZTI7S7705C4[];
extern  VTBL_ENTRY _ZTV7S7705C4[];
extern Class_Descriptor cd_S7705C3;
extern VTBL_ENTRY _ZTI7S7705C3[];
extern  VTBL_ENTRY _ZTV7S7705C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C3[];
static Base_Class bases_S7705C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7705C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7705C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7705C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7705C5,    ABISELECT(1416,860), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7705C4,    ABISELECT(1416,860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7705C3,    ABISELECT(976,596), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7705C11[];
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
extern void _ZN8S7705C11D1Ev();
extern void _ZN8S7705C11D0Ev();
extern void _ZN8S7705C113v10Ev();
extern void _ZN7S7705C32v6Ev();
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY vtc_S7705C11[] = {
  ABISELECT(1416,860),
  ABISELECT(976,596),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7705C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7705C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7705C113v10Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
  0,
  ABISELECT(-1416,-860),
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S7705C11[];
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C12__8S7705C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C12[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C68S7705C12__8S7705C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C3__8S7705C11[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__7S7705C3__8S7705C11[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
static  VTT_ENTRY vtt_S7705C11[] = {
  {&(_ZTV8S7705C11[6]),  6,24},
  {&(_tg__ZTV8S7705C12__8S7705C11[4]),  4,10},
  {&(_tg__ZTV7S7705C68S7705C12__8S7705C11[4]),  4,8},
  {&(_tg__ZTV7S7705C68S7705C12__8S7705C11[4]),  4,8},
  {&(_tg__ZTV8S7705C12__8S7705C11[4]),  4,10},
  {&(_ZTV8S7705C11[6]),  6,24},
  {&(_ZTV8S7705C11[19]),  19,24},
  {&(_ZTV8S7705C11[23]),  23,24},
  {&(_tg__ZTV7S7705C3__8S7705C11[3]),  3,4},
  {&(_tg__ZTV7S7705C57S7705C4__7S7705C3__8S7705C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7705C11[];
extern  VTBL_ENTRY _ZTV8S7705C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C11[];
Class_Descriptor cd_S7705C11 = {  "S7705C11", // class name
  bases_S7705C11, 6,
  &(vtc_S7705C11[0]), // expected_vtbl_contents
  &(vtt_S7705C11[0]), // expected_vtt_contents
  ABISELECT(1728,1044), // object size
  NSPAIRA(_ZTI8S7705C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7705C11),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7705C11),10, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7705C14  {
  void *s7705c14f0[2];
  int s7705c14f1[2];
  void *s7705c14f2[15];
  int s7705c14f3;
  ::S7705C3 s7705c14f4;
  virtual void  v11(); // _ZN8S7705C143v11Ev
  virtual void  v12(); // _ZN8S7705C143v12Ev
  ~S7705C14(); // tgen
  S7705C14(); // tgen
};
//SIG(-1 S7705C14) C1{ v1 v2 Fp[2] Fi[2] Fp[15] Fi FC2{ VBC3{ BC4{ v4} Fc[5] FC5{ VBC4 v6 v7 v8 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v3 Fp FL Fp[6] FC4 FC7{ BC4 v5 Fc FL Fi[3] FC3} Fp Fi}}


void  S7705C14 ::v11(){vfunc_called(this, "_ZN8S7705C143v11Ev");}
void  S7705C14 ::v12(){vfunc_called(this, "_ZN8S7705C143v12Ev");}
S7705C14 ::~S7705C14(){ note_dtor("S7705C14", this);} // tgen
S7705C14 ::S7705C14(){ note_ctor("S7705C14", this);} // tgen

static void Test_S7705C14()
{
  extern Class_Descriptor cd_S7705C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(114,134)];
    init_test(&cd_S7705C14, buf);
    S7705C14 *dp, &lv = *(dp=new (buf) S7705C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(904,532), "sizeof(S7705C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7705C14)");
    check_field_offset(lv, s7705c14f0, ABISELECT(8,4), "S7705C14.s7705c14f0");
    check_field_offset(lv, s7705c14f1, ABISELECT(24,12), "S7705C14.s7705c14f1");
    check_field_offset(lv, s7705c14f2, ABISELECT(32,20), "S7705C14.s7705c14f2");
    check_field_offset(lv, s7705c14f3, ABISELECT(152,80), "S7705C14.s7705c14f3");
    check_field_offset(lv, s7705c14f4, ABISELECT(160,84), "S7705C14.s7705c14f4");
    test_class_info(&lv, &cd_S7705C14);
    dp->~S7705C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7705C14(Test_S7705C14, "S7705C14", ABISELECT(904,532));

#else // __cplusplus

extern void _ZN8S7705C14C1Ev();
extern void _ZN8S7705C14D1Ev();
Name_Map name_map_S7705C14[] = {
  NSPAIR(_ZN8S7705C14C1Ev),
  NSPAIR(_ZN8S7705C14D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7705C14[];
extern void _ZN8S7705C143v11Ev();
extern void _ZN8S7705C143v12Ev();
static  VTBL_ENTRY vtc_S7705C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C14[0]),
  (VTBL_ENTRY)&_ZN8S7705C143v11Ev,
  (VTBL_ENTRY)&_ZN8S7705C143v12Ev,
};
extern VTBL_ENTRY _ZTI8S7705C14[];
extern  VTBL_ENTRY _ZTV8S7705C14[];
Class_Descriptor cd_S7705C14 = {  "S7705C14", // class name
  0,0,//no base classes
  &(vtc_S7705C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(904,532), // object size
  NSPAIRA(_ZTI8S7705C14),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7705C14),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7705C9  : S7705C6 , S7705C10 , virtual S7705C11 , virtual S7705C14 , virtual S7705C8 {
  short s7705c9f0;
  ::S2489C12_nt s7705c9f1;
  char s7705c9f2;
  void *s7705c9f3[2];
  int s7705c9f4[2];
  __tsi64 s7705c9f5;
  virtual void  v14(); // _ZN7S7705C93v14Ev
  ~S7705C9(); // tgen
  S7705C9(); // tgen
};
//SIG(-1 S7705C9) C1{ BC2{ VBC3{ v2} v3 v4 v5 Fp[3] FC4{} Fp} BC5{ VBC2 BC6{ VBC7{ BC3 Fc[5] FC2[2] Fi Fp[7] FC2 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v6 Fp FL Fp[6] FC3 FC8{ BC3 v13 Fc FL Fi[3] FC7} Fp Fi} v7 Fp FC3 FL[8] FC2 Fp} VBC9{ VBC3 BC10{ BC2 v8 v9 Fp FC11{ BC12{ BC13{ v14} Fc[5] FC14{ VBC13 v15 v16 v17 Fp[3] FC4 Fp}[2] Fi Fp[7] FC14 FC13 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC13 VBC14 Fi Fp} Fi Fp Fi[2]} VBC6 vd v10 Fp[2] Fi[9] FC8 FC3[9] FL FD Fp FL Fl FL} VBC15{ v11 v12 Fp[2] Fi[2] Fp[15] Fi FC6} VBC8 v1 Fs FC4 Fc Fp[2] Fi[2] FL}


void  S7705C9 ::v14(){vfunc_called(this, "_ZN7S7705C93v14Ev");}
S7705C9 ::~S7705C9(){ note_dtor("S7705C9", this);} // tgen
S7705C9 ::S7705C9(){ note_ctor("S7705C9", this);} // tgen

static void Test_S7705C9()
{
  extern Class_Descriptor cd_S7705C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(232,558)];
    init_test(&cd_S7705C9, buf);
    S7705C9 *dp, &lv = *(dp=new (buf) S7705C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3696,2228), "sizeof(S7705C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7705C9)");
    /*is_ambiguous_... S7705C9::S7705C6 */ AMB_check_base_class_offset(lv, (S7705C5*)(S7705C6*), 0, "S7705C9");
    /*is_ambiguous_... S7705C9::S7705C6 */ AMB_check_base_class_offset(lv, (S7705C5*)(S7705C6*), 0, "S7705C9");
    /*is_ambiguous_... S7705C11::S7705C5 */ AMB_check_base_class_offset(lv, (S7705C5*)(S7705C11*), 0, "S7705C9");
    check_base_class_offset(lv, (S7705C5*)(S7705C6*)(S7705C12*)(S7705C11*), 0, "S7705C9");
    /*is_ambiguous_... S7705C9::S7705C6 */ AMB_check_base_class_offset(lv, (S7705C6*), 0, "S7705C9");
    check_base_class_offset(lv, (S7705C6*)(S7705C10*), ABISELECT(664,416), "S7705C9");
    check_base_class_offset(lv, (S7705C5*)(S7705C4*), ABISELECT(712,440), "S7705C9");
    check_base_class_offset(lv, (S7705C4*)(S7705C3*)(S7705C10*), ABISELECT(712,440), "S7705C9");
    /*is_ambiguous_... S7705C9::S7705C3 */ AMB_check_base_class_offset(lv, (S7705C4*)(S7705C3*), ABISELECT(712,440), "S7705C9");
    check_base_class_offset(lv, (S7705C3*)(S7705C10*), ABISELECT(48,24), "S7705C9");
    check_base_class_offset(lv, (S7705C10*), ABISELECT(48,24), "S7705C9");
    check_base_class_offset(lv, (S7705C6*)(S7705C12*)(S7705C11*), ABISELECT(1024,624), "S7705C9");
    check_base_class_offset(lv, (S7705C12*)(S7705C11*), ABISELECT(1024,624), "S7705C9");
    check_base_class_offset(lv, (S7705C3*)(S7705C11*), ABISELECT(2000,1220), "S7705C9");
    check_base_class_offset(lv, (S7705C11*), ABISELECT(1024,624), "S7705C9");
    check_base_class_offset(lv, (S7705C14*), ABISELECT(2440,1484), "S7705C9");
    check_base_class_offset(lv, (S7705C5*)(S7705C8*), ABISELECT(3344,2016), "S7705C9");
    check_base_class_offset(lv, (S7705C8*), ABISELECT(3344,2016), "S7705C9");
    check_field_offset(lv, s7705c9f0, ABISELECT(624,388), "S7705C9.s7705c9f0");
    check_field_offset(lv, s7705c9f1, ABISELECT(626,390), "S7705C9.s7705c9f1");
    check_field_offset(lv, s7705c9f2, ABISELECT(627,391), "S7705C9.s7705c9f2");
    check_field_offset(lv, s7705c9f3, ABISELECT(632,392), "S7705C9.s7705c9f3");
    check_field_offset(lv, s7705c9f4, ABISELECT(648,400), "S7705C9.s7705c9f4");
    check_field_offset(lv, s7705c9f5, ABISELECT(656,408), "S7705C9.s7705c9f5");
    test_class_info(&lv, &cd_S7705C9);
    dp->~S7705C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7705C9(Test_S7705C9, "S7705C9", ABISELECT(3696,2228));

#else // __cplusplus

extern void _ZN7S7705C9C1Ev();
extern void _ZN7S7705C9D1Ev();
Name_Map name_map_S7705C9[] = {
  NSPAIR(_ZN7S7705C9C1Ev),
  NSPAIR(_ZN7S7705C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C6;
extern VTBL_ENTRY _ZTI7S7705C6[];
extern  VTBL_ENTRY _ZTV7S7705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C6[];
extern Class_Descriptor cd_S7705C6;
extern VTBL_ENTRY _ZTI7S7705C6[];
extern  VTBL_ENTRY _ZTV7S7705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C6[];
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C4;
extern VTBL_ENTRY _ZTI7S7705C4[];
extern  VTBL_ENTRY _ZTV7S7705C4[];
extern Class_Descriptor cd_S7705C3;
extern VTBL_ENTRY _ZTI7S7705C3[];
extern  VTBL_ENTRY _ZTV7S7705C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C3[];
extern Class_Descriptor cd_S7705C10;
extern VTBL_ENTRY _ZTI8S7705C10[];
extern  VTBL_ENTRY _ZTV8S7705C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C10[];
extern Class_Descriptor cd_S7705C6;
extern VTBL_ENTRY _ZTI7S7705C6[];
extern  VTBL_ENTRY _ZTV7S7705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C6[];
extern Class_Descriptor cd_S7705C12;
extern VTBL_ENTRY _ZTI8S7705C12[];
extern  VTBL_ENTRY _ZTV8S7705C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C12[];
extern Class_Descriptor cd_S7705C3;
extern VTBL_ENTRY _ZTI7S7705C3[];
extern  VTBL_ENTRY _ZTV7S7705C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C3[];
extern Class_Descriptor cd_S7705C11;
extern VTBL_ENTRY _ZTI8S7705C11[];
extern  VTBL_ENTRY _ZTV8S7705C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C11[];
extern Class_Descriptor cd_S7705C14;
extern VTBL_ENTRY _ZTI8S7705C14[];
extern  VTBL_ENTRY _ZTV8S7705C14[];
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C8;
extern VTBL_ENTRY _ZTI7S7705C8[];
extern  VTBL_ENTRY _ZTV7S7705C8[];
static Base_Class bases_S7705C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7705C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7705C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7705C6,    ABISELECT(664,416), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7705C5,    ABISELECT(712,440), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7705C4,    ABISELECT(712,440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7705C3,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7705C10,    ABISELECT(48,24), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7705C6,    ABISELECT(1024,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7705C12,    ABISELECT(1024,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7705C3,    ABISELECT(2000,1220), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7705C11,    ABISELECT(1024,624), //bcp->offset
    39, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7705C14,    ABISELECT(2440,1484), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7705C5,    ABISELECT(3344,2016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7705C8,    ABISELECT(3344,2016), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7705C9[];
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN7S7705C93v14Ev();
extern void _ZN7S7705C9D1Ev();
extern void _ZN7S7705C9D0Ev();
extern void _ZN7S7705C32v6Ev();
extern void _ZN8S7705C102v7Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
extern void ABISELECT(_ZTv0_n96_N7S7705C9D1Ev,_ZTv0_n48_N7S7705C9D1Ev)();
extern void ABISELECT(_ZThn1024_N7S7705C9D1Ev,_ZThn624_N7S7705C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7705C9D0Ev,_ZTv0_n48_N7S7705C9D0Ev)();
extern void ABISELECT(_ZThn1024_N7S7705C9D0Ev,_ZThn624_N7S7705C9D0Ev)() __attribute__((weak));
extern void _ZN8S7705C113v10Ev();
extern void _ZN7S7705C32v6Ev();
extern void _ZN8S7705C143v11Ev();
extern void _ZN8S7705C143v12Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C83v13Ev();
static  VTBL_ENTRY vtc_S7705C9[] = {
  ABISELECT(3344,2016),
  ABISELECT(2440,1484),
  ABISELECT(2000,1220),
  ABISELECT(1024,624),
  ABISELECT(712,440),
  ABISELECT(664,416),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7705C93v14Ev,
  (VTBL_ENTRY)&_ZN7S7705C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7705C9D0Ev,
  ABISELECT(-48,-24),
  ABISELECT(616,392),
  ABISELECT(664,416),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7705C102v7Ev,
  0,
  0,
  0,
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  0,
  ABISELECT(-712,-440),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  0,
  ABISELECT(-1024,-624),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-184),
  ABISELECT(976,596),
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7705C9D1Ev,_ZTv0_n48_N7S7705C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7705C9D0Ev,_ZTv0_n48_N7S7705C9D0Ev),
  (VTBL_ENTRY)&_ZN8S7705C113v10Ev,
  0,
  ABISELECT(-1288,-780),
  ABISELECT(-2000,-1220),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
  0,
  0,
  ABISELECT(-2440,-1484),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN8S7705C143v11Ev,
  (VTBL_ENTRY)&_ZN8S7705C143v12Ev,
  0,
  0,
  ABISELECT(-3344,-2016),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C83v13Ev,
};
extern VTBL_ENTRY _ZTV7S7705C9[];
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C6__A__7S7705C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern void _ZN7S7705C32v6Ev();
extern void _ZN8S7705C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C10__7S7705C9[] = {
  ABISELECT(-48,-24),
  ABISELECT(616,392),
  ABISELECT(664,416),
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C10[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7705C102v7Ev,
};
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C38S7705C10__7S7705C9[] = {
  ABISELECT(664,416),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__7S7705C38S7705C10__7S7705C9[] = {
  0,
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C6__8S7705C10__7S7705C9[] = {
  0,
  0,
  0,
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  ABISELECT(-616,-392),
  (VTBL_ENTRY)&(_ZTI8S7705C10[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__8S7705C10__7S7705C9[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S7705C10[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__A1__8S7705C10__7S7705C9[] = {
  0,
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI8S7705C10[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C6__A1__7S7705C9[] = {
  ABISELECT(-664,-416),
  ABISELECT(-664,-416),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__7S7705C6__A1__7S7705C9[] = {
  0,
  ABISELECT(664,416),
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
extern void _ZN8S7705C11D1Ev();
extern void _ZN8S7705C11D0Ev();
extern void _ZN8S7705C113v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C11__7S7705C9[] = {
  ABISELECT(-312,-184),
  ABISELECT(976,596),
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7705C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7705C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7705C113v10Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C128S7705C11__7S7705C9[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C12[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C68S7705C128S7705C11__A2__7S7705C9[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1024,-624),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__7S7705C68S7705C128S7705C11__A2__7S7705C9[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__8S7705C128S7705C11__7S7705C9[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S7705C12[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__8S7705C11__7S7705C9[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C3__8S7705C11__7S7705C9[] = {
  0,
  ABISELECT(-1288,-780),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__A1__8S7705C11__7S7705C9[] = {
  0,
  ABISELECT(312,184),
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C3__A1__7S7705C9[] = {
  ABISELECT(-1288,-780),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__7S7705C3__A1__7S7705C9[] = {
  0,
  ABISELECT(1288,780),
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
static  VTT_ENTRY vtt_S7705C9[] = {
  {&(_ZTV7S7705C9[10]),  10,78},
  {&(_tg__ZTV7S7705C6__A__7S7705C9[4]),  4,8},
  {&(_tg__ZTV7S7705C6__A__7S7705C9[4]),  4,8},
  {&(_tg__ZTV8S7705C10__7S7705C9[5]),  5,7},
  {&(_tg__ZTV7S7705C38S7705C10__7S7705C9[3]),  3,4},
  {&(_tg__ZTV7S7705C57S7705C4__7S7705C38S7705C10__7S7705C9[3]),  3,4},
  {&(_tg__ZTV7S7705C6__8S7705C10__7S7705C9[7]),  7,11},
  {&(_tg__ZTV7S7705C5__8S7705C10__7S7705C9[3]),  3,4},
  {&(_tg__ZTV7S7705C57S7705C4__A1__8S7705C10__7S7705C9[3]),  3,4},
  {&(_ZTV7S7705C9[10]),  10,78},
  {&(_ZTV7S7705C9[22]),  22,78},
  {&(_ZTV7S7705C9[31]),  31,78},
  {&(_ZTV7S7705C9[38]),  38,78},
  {&(_ZTV7S7705C9[52]),  52,78},
  {&(_ZTV7S7705C9[65]),  65,78},
  {&(_ZTV7S7705C9[70]),  70,78},
  {&(_ZTV7S7705C9[76]),  76,78},
  {&(_tg__ZTV7S7705C6__A1__7S7705C9[4]),  4,8},
  {&(_tg__ZTV7S7705C5__7S7705C6__A1__7S7705C9[3]),  3,4},
  {&(_tg__ZTV8S7705C11__7S7705C9[6]),  6,15},
  {&(_tg__ZTV8S7705C128S7705C11__7S7705C9[4]),  4,10},
  {&(_tg__ZTV7S7705C68S7705C128S7705C11__A2__7S7705C9[4]),  4,8},
  {&(_tg__ZTV7S7705C5__7S7705C68S7705C128S7705C11__A2__7S7705C9[3]),  3,4},
  {&(_tg__ZTV7S7705C5__8S7705C128S7705C11__7S7705C9[3]),  3,4},
  {&(_tg__ZTV7S7705C5__8S7705C11__7S7705C9[3]),  3,4},
  {&(_tg__ZTV7S7705C3__8S7705C11__7S7705C9[4]),  4,5},
  {&(_tg__ZTV7S7705C57S7705C4__A1__8S7705C11__7S7705C9[3]),  3,4},
  {&(_tg__ZTV7S7705C3__A1__7S7705C9[3]),  3,4},
  {&(_tg__ZTV7S7705C57S7705C4__7S7705C3__A1__7S7705C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7705C9[];
extern  VTBL_ENTRY _ZTV7S7705C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C9[];
static VTBL_ENTRY alt_thunk_names72[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7705C9D0Ev,_ZTv0_n48_N7S7705C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7705C9D0Ev,_ZThn624_N7S7705C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7705C9D1Ev,_ZTv0_n48_N7S7705C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7705C9D1Ev,_ZThn624_N7S7705C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7705C9 = {  "S7705C9", // class name
  bases_S7705C9, 14,
  &(vtc_S7705C9[0]), // expected_vtbl_contents
  &(vtt_S7705C9[0]), // expected_vtt_contents
  ABISELECT(3696,2228), // object size
  NSPAIRA(_ZTI7S7705C9),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7705C9),78, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7705C9),29, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names72,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7705C15  : S7705C11 , S7705C8 {
  void *s7705c15f0;
  __tsi64 s7705c15f1[3];
  int s7705c15f2;
  __tsi64 s7705c15f3;
  virtual  ~S7705C15(); // _ZN8S7705C15D2Ev
  virtual void  v15(); // _ZN8S7705C153v15Ev
  S7705C15(); // tgen
};
//SIG(-1 S7705C15) C1{ BC2{ VBC3{ v2} BC4{ BC5{ VBC3 v3 v4 v5 Fp[3] FC6{} Fp} v6 v7 Fp FC7{ BC8{ BC9{ v11} Fc[5] FC10{ VBC9 v12 v13 v14 Fp[3] FC6 Fp}[2] Fi Fp[7] FC10 FC9 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC9 VBC10 Fi Fp} Fi Fp Fi[2]} VBC11{ VBC12{ BC3 Fc[5] FC5[2] Fi Fp[7] FC5 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC3 FC13{ BC3 v10 Fc FL Fi[3] FC12} Fp Fi} vd v9 Fp[2] Fi[9] FC13 FC3[9] FL FD Fp FL Fl FL} BC13 vd v1 Fp FL[3] Fi FL}


 S7705C15 ::~S7705C15(){ note_dtor("S7705C15", this);}
void  S7705C15 ::v15(){vfunc_called(this, "_ZN8S7705C153v15Ev");}
S7705C15 ::S7705C15(){ note_ctor("S7705C15", this);} // tgen

static void Test_S7705C15()
{
  extern Class_Descriptor cd_S7705C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(133,325)];
    init_test(&cd_S7705C15, buf);
    S7705C15 *dp, &lv = *(dp=new (buf) S7705C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2112,1296), "sizeof(S7705C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7705C15)");
    /*is_ambiguous_... S7705C11::S7705C5 */ AMB_check_base_class_offset(lv, (S7705C5*)(S7705C11*), 0, "S7705C15");
    check_base_class_offset(lv, (S7705C5*)(S7705C6*)(S7705C12*)(S7705C11*), 0, "S7705C15");
    check_base_class_offset(lv, (S7705C6*)(S7705C12*)(S7705C11*), 0, "S7705C15");
    check_base_class_offset(lv, (S7705C12*)(S7705C11*), 0, "S7705C15");
    check_base_class_offset(lv, (S7705C5*)(S7705C4*), ABISELECT(1808,1112), "S7705C15");
    check_base_class_offset(lv, (S7705C4*)(S7705C3*), ABISELECT(1808,1112), "S7705C15");
    check_base_class_offset(lv, (S7705C3*)(S7705C11*), ABISELECT(1368,848), "S7705C15");
    check_base_class_offset(lv, (S7705C11*), 0, "S7705C15");
    check_base_class_offset(lv, (S7705C5*)(S7705C8*), ABISELECT(976,596), "S7705C15");
    check_base_class_offset(lv, (S7705C8*), ABISELECT(976,596), "S7705C15");
    check_field_offset(lv, s7705c15f0, ABISELECT(1320,808), "S7705C15.s7705c15f0");
    check_field_offset(lv, s7705c15f1, ABISELECT(1328,812), "S7705C15.s7705c15f1");
    check_field_offset(lv, s7705c15f2, ABISELECT(1352,836), "S7705C15.s7705c15f2");
    check_field_offset(lv, s7705c15f3, ABISELECT(1360,840), "S7705C15.s7705c15f3");
    test_class_info(&lv, &cd_S7705C15);
    dp->~S7705C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7705C15(Test_S7705C15, "S7705C15", ABISELECT(2112,1296));

#else // __cplusplus

extern void _ZN8S7705C15C1Ev();
extern void _ZN8S7705C15D2Ev();
Name_Map name_map_S7705C15[] = {
  NSPAIR(_ZN8S7705C15C1Ev),
  NSPAIR(_ZN8S7705C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C6;
extern VTBL_ENTRY _ZTI7S7705C6[];
extern  VTBL_ENTRY _ZTV7S7705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C6[];
extern Class_Descriptor cd_S7705C12;
extern VTBL_ENTRY _ZTI8S7705C12[];
extern  VTBL_ENTRY _ZTV8S7705C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C12[];
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C4;
extern VTBL_ENTRY _ZTI7S7705C4[];
extern  VTBL_ENTRY _ZTV7S7705C4[];
extern Class_Descriptor cd_S7705C3;
extern VTBL_ENTRY _ZTI7S7705C3[];
extern  VTBL_ENTRY _ZTV7S7705C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C3[];
extern Class_Descriptor cd_S7705C11;
extern VTBL_ENTRY _ZTI8S7705C11[];
extern  VTBL_ENTRY _ZTV8S7705C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C11[];
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C8;
extern VTBL_ENTRY _ZTI7S7705C8[];
extern  VTBL_ENTRY _ZTV7S7705C8[];
static Base_Class bases_S7705C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7705C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7705C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7705C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7705C5,    ABISELECT(1808,1112), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7705C4,    ABISELECT(1808,1112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7705C3,    ABISELECT(1368,848), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7705C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7705C5,    ABISELECT(976,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7705C8,    ABISELECT(976,596), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7705C15[];
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
extern void _ZN8S7705C15D1Ev();
extern void _ZN8S7705C15D0Ev();
extern void _ZN8S7705C113v10Ev();
extern void _ZN8S7705C153v15Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C83v13Ev();
extern void _ZN7S7705C32v6Ev();
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY vtc_S7705C15[] = {
  ABISELECT(1808,1112),
  ABISELECT(1368,848),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C15[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7705C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7705C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7705C113v10Ev,
  (VTBL_ENTRY)&_ZN8S7705C153v15Ev,
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S7705C15[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C83v13Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-1368,-848),
  (VTBL_ENTRY)&(_ZTI8S7705C15[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
  0,
  ABISELECT(-1808,-1112),
  (VTBL_ENTRY)&(_ZTI8S7705C15[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S7705C15[];
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
extern void _ZN8S7705C11D1Ev();
extern void _ZN8S7705C11D0Ev();
extern void _ZN8S7705C113v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C11__8S7705C15[] = {
  ABISELECT(1808,1112),
  ABISELECT(1368,848),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7705C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7705C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7705C113v10Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C128S7705C11__8S7705C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C12[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C68S7705C128S7705C11__8S7705C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C3__8S7705C11__8S7705C15[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-1368,-848),
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__A1__8S7705C11__8S7705C15[] = {
  0,
  ABISELECT(-1808,-1112),
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C3__8S7705C15[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__7S7705C3__8S7705C15[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
static  VTT_ENTRY vtt_S7705C15[] = {
  {&(_ZTV8S7705C15[6]),  6,29},
  {&(_tg__ZTV8S7705C11__8S7705C15[6]),  6,15},
  {&(_tg__ZTV8S7705C128S7705C11__8S7705C15[4]),  4,10},
  {&(_tg__ZTV7S7705C68S7705C128S7705C11__8S7705C15[4]),  4,8},
  {&(_tg__ZTV7S7705C68S7705C128S7705C11__8S7705C15[4]),  4,8},
  {&(_tg__ZTV8S7705C128S7705C11__8S7705C15[4]),  4,10},
  {&(_tg__ZTV8S7705C11__8S7705C15[6]),  6,15},
  {&(_tg__ZTV7S7705C3__8S7705C11__8S7705C15[4]),  4,5},
  {&(_tg__ZTV7S7705C57S7705C4__A1__8S7705C11__8S7705C15[3]),  3,4},
  {&(_ZTV8S7705C15[6]),  6,29},
  {&(_ZTV8S7705C15[24]),  24,29},
  {&(_ZTV8S7705C15[28]),  28,29},
  {&(_tg__ZTV7S7705C3__8S7705C15[3]),  3,4},
  {&(_tg__ZTV7S7705C57S7705C4__7S7705C3__8S7705C15[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7705C15[];
extern  VTBL_ENTRY _ZTV8S7705C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C15[];
Class_Descriptor cd_S7705C15 = {  "S7705C15", // class name
  bases_S7705C15, 9,
  &(vtc_S7705C15[0]), // expected_vtbl_contents
  &(vtt_S7705C15[0]), // expected_vtt_contents
  ABISELECT(2112,1296), // object size
  NSPAIRA(_ZTI8S7705C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7705C15),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7705C15),14, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7705C2  : virtual S7705C3 , virtual S7705C9 , virtual S7705C15 {
  short s7705c2f0;
  ::S7525C17 s7705c2f1;
  int s7705c2f2[9];
  virtual  ~S7705C2(); // _ZN7S7705C2D2Ev
  virtual void  v16(); // _ZN7S7705C23v16Ev
  virtual void  v17(); // _ZN7S7705C23v17Ev
  S7705C2(); // tgen
};
//SIG(-1 S7705C2) C1{ VBC2{ VBC3{ BC4{ v3} Fc[5] FC5{ VBC4 v5 v6 v7 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v4 Fp FL Fp[6] FC4 FC7{ BC4 v14 Fc FL Fi[3] FC3} Fp Fi} VBC8{ BC5 BC9{ VBC5 BC2 v8 Fp FC4 FL[8] FC5 Fp} VBC10{ VBC4 BC11{ BC5 v9 v10 Fp FC12{ BC13{ BC14{ v17} Fc[5] FC15{ VBC14 v18 v19 v20 Fp[3] FC6 Fp}[2] Fi Fp[7] FC15 FC14 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC14 VBC15 Fi Fp} Fi Fp Fi[2]} VBC2 vd v11 Fp[2] Fi[9] FC7 FC4[9] FL FD Fp FL Fl FL} VBC16{ v12 v13 Fp[2] Fi[2] Fp[15] Fi FC2} VBC7 v15 Fs FC6 Fc Fp[2] Fi[2] FL} VBC17{ BC10 BC7 vd v16 Fp FL[3] Fi FL} vd v1 v2 Fs FU18{ m FD Fi Fi[3] Fc Fc[2] FL} Fi[9]}


 S7705C2 ::~S7705C2(){ note_dtor("S7705C2", this);}
void  S7705C2 ::v16(){vfunc_called(this, "_ZN7S7705C23v16Ev");}
void  S7705C2 ::v17(){vfunc_called(this, "_ZN7S7705C23v17Ev");}
S7705C2 ::S7705C2(){ note_ctor("S7705C2", this);} // tgen

static void Test_S7705C2()
{
  extern Class_Descriptor cd_S7705C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(322,784)];
    init_test(&cd_S7705C2, buf);
    S7705C2 *dp, &lv = *(dp=new (buf) S7705C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5136,3132), "sizeof(S7705C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7705C2)");
    check_base_class_offset(lv, (S7705C5*)(S7705C4*), ABISELECT(512,320), "S7705C2");
    /*is_ambiguous_... S7705C2::S7705C3 */ AMB_check_base_class_offset(lv, (S7705C4*)(S7705C3*), ABISELECT(512,320), "S7705C2");
    check_base_class_offset(lv, (S7705C4*)(S7705C3*)(S7705C10*)(S7705C9*), ABISELECT(512,320), "S7705C2");
    /*is_ambiguous_... S7705C2::S7705C3 */ AMB_check_base_class_offset(lv, (S7705C3*), ABISELECT(72,56), "S7705C2");
    /*is_ambiguous_... S7705C2::S7705C11 */ AMB_check_base_class_offset(lv, (S7705C3*)(S7705C11*), ABISELECT(72,56), "S7705C2");
    check_base_class_offset(lv, (S7705C3*)(S7705C11*)(S7705C15*), ABISELECT(72,56), "S7705C2");
    /*is_ambiguous_... S7705C9::S7705C6 */ AMB_check_base_class_offset(lv, (S7705C5*)(S7705C6*)(S7705C9*), 0, "S7705C2");
    /*is_ambiguous_... S7705C2::S7705C6 */ AMB_check_base_class_offset(lv, (S7705C5*)(S7705C6*), 0, "S7705C2");
    /*is_ambiguous_... S7705C2::S7705C11 */ AMB_check_base_class_offset(lv, (S7705C5*)(S7705C11*), 0, "S7705C2");
    /*is_ambiguous_... S7705C2::S7705C11 */ AMB_check_base_class_offset(lv, (S7705C5*)(S7705C6*)(S7705C12*)(S7705C11*), 0, "S7705C2");
    /*is_ambiguous_... S7705C11::S7705C5 */ AMB_check_base_class_offset(lv, (S7705C5*)(S7705C11*)(S7705C15*), 0, "S7705C2");
    check_base_class_offset(lv, (S7705C5*)(S7705C6*)(S7705C12*)(S7705C11*)(S7705C15*), 0, "S7705C2");
    /*is_ambiguous_... S7705C9::S7705C6 */ AMB_check_base_class_offset(lv, (S7705C6*)(S7705C9*), ABISELECT(816,504), "S7705C2");
    check_base_class_offset(lv, (S7705C6*)(S7705C10*)(S7705C9*), ABISELECT(1480,920), "S7705C2");
    check_base_class_offset(lv, (S7705C3*)(S7705C10*)(S7705C9*), ABISELECT(864,528), "S7705C2");
    check_base_class_offset(lv, (S7705C10*)(S7705C9*), ABISELECT(864,528), "S7705C2");
    /*is_ambiguous_... S7705C2::S7705C11 */ AMB_check_base_class_offset(lv, (S7705C6*)(S7705C12*)(S7705C11*), ABISELECT(1536,944), "S7705C2");
    /*is_ambiguous_... S7705C2::S7705C11 */ AMB_check_base_class_offset(lv, (S7705C12*)(S7705C11*), ABISELECT(1536,944), "S7705C2");
    check_base_class_offset(lv, (S7705C11*)(S7705C9*), ABISELECT(1536,944), "S7705C2");
    check_base_class_offset(lv, (S7705C14*)(S7705C9*), ABISELECT(2512,1540), "S7705C2");
    /*is_ambiguous_... S7705C2::S7705C8 */ AMB_check_base_class_offset(lv, (S7705C5*)(S7705C8*), ABISELECT(3416,2072), "S7705C2");
    check_base_class_offset(lv, (S7705C8*)(S7705C9*), ABISELECT(3416,2072), "S7705C2");
    check_base_class_offset(lv, (S7705C9*), ABISELECT(816,504), "S7705C2");
    check_base_class_offset(lv, (S7705C6*)(S7705C12*)(S7705C11*)(S7705C15*), ABISELECT(3760,2284), "S7705C2");
    check_base_class_offset(lv, (S7705C12*)(S7705C11*)(S7705C15*), ABISELECT(3760,2284), "S7705C2");
    check_base_class_offset(lv, (S7705C11*)(S7705C15*), ABISELECT(3760,2284), "S7705C2");
    check_base_class_offset(lv, (S7705C5*)(S7705C8*)(S7705C15*), ABISELECT(4736,2880), "S7705C2");
    check_base_class_offset(lv, (S7705C8*)(S7705C15*), ABISELECT(4736,2880), "S7705C2");
    check_base_class_offset(lv, (S7705C15*), ABISELECT(3760,2284), "S7705C2");
    check_field_offset(lv, s7705c2f0, ABISELECT(8,4), "S7705C2.s7705c2f0");
    check_field_offset(lv, s7705c2f1, ABISELECT(16,8), "S7705C2.s7705c2f1");
    check_field_offset(lv, s7705c2f2, ABISELECT(32,20), "S7705C2.s7705c2f2");
    test_class_info(&lv, &cd_S7705C2);
    dp->~S7705C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7705C2(Test_S7705C2, "S7705C2", ABISELECT(5136,3132));

#else // __cplusplus

extern void _ZN7S7705C2C1Ev();
extern void _ZN7S7705C2D2Ev();
Name_Map name_map_S7705C2[] = {
  NSPAIR(_ZN7S7705C2C1Ev),
  NSPAIR(_ZN7S7705C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C4;
extern VTBL_ENTRY _ZTI7S7705C4[];
extern  VTBL_ENTRY _ZTV7S7705C4[];
extern Class_Descriptor cd_S7705C3;
extern VTBL_ENTRY _ZTI7S7705C3[];
extern  VTBL_ENTRY _ZTV7S7705C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C3[];
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C6;
extern VTBL_ENTRY _ZTI7S7705C6[];
extern  VTBL_ENTRY _ZTV7S7705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C6[];
extern Class_Descriptor cd_S7705C6;
extern VTBL_ENTRY _ZTI7S7705C6[];
extern  VTBL_ENTRY _ZTV7S7705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C6[];
extern Class_Descriptor cd_S7705C3;
extern VTBL_ENTRY _ZTI7S7705C3[];
extern  VTBL_ENTRY _ZTV7S7705C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C3[];
extern Class_Descriptor cd_S7705C10;
extern VTBL_ENTRY _ZTI8S7705C10[];
extern  VTBL_ENTRY _ZTV8S7705C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C10[];
extern Class_Descriptor cd_S7705C6;
extern VTBL_ENTRY _ZTI7S7705C6[];
extern  VTBL_ENTRY _ZTV7S7705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C6[];
extern Class_Descriptor cd_S7705C12;
extern VTBL_ENTRY _ZTI8S7705C12[];
extern  VTBL_ENTRY _ZTV8S7705C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C12[];
extern Class_Descriptor cd_S7705C11;
extern VTBL_ENTRY _ZTI8S7705C11[];
extern  VTBL_ENTRY _ZTV8S7705C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C11[];
extern Class_Descriptor cd_S7705C14;
extern VTBL_ENTRY _ZTI8S7705C14[];
extern  VTBL_ENTRY _ZTV8S7705C14[];
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C8;
extern VTBL_ENTRY _ZTI7S7705C8[];
extern  VTBL_ENTRY _ZTV7S7705C8[];
extern Class_Descriptor cd_S7705C9;
extern VTBL_ENTRY _ZTI7S7705C9[];
extern  VTBL_ENTRY _ZTV7S7705C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C9[];
extern Class_Descriptor cd_S7705C6;
extern VTBL_ENTRY _ZTI7S7705C6[];
extern  VTBL_ENTRY _ZTV7S7705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C6[];
extern Class_Descriptor cd_S7705C12;
extern VTBL_ENTRY _ZTI8S7705C12[];
extern  VTBL_ENTRY _ZTV8S7705C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C12[];
extern Class_Descriptor cd_S7705C11;
extern VTBL_ENTRY _ZTI8S7705C11[];
extern  VTBL_ENTRY _ZTV8S7705C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C11[];
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C8;
extern VTBL_ENTRY _ZTI7S7705C8[];
extern  VTBL_ENTRY _ZTV7S7705C8[];
extern Class_Descriptor cd_S7705C15;
extern VTBL_ENTRY _ZTI8S7705C15[];
extern  VTBL_ENTRY _ZTV8S7705C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C15[];
static Base_Class bases_S7705C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7705C5,    ABISELECT(512,320), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7705C4,    ABISELECT(512,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7705C3,    ABISELECT(72,56), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7705C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7705C6,    ABISELECT(816,504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7705C6,    ABISELECT(1480,920), //bcp->offset
    57, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7705C3,    ABISELECT(864,528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7705C10,    ABISELECT(864,528), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7705C6,    ABISELECT(1536,944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7705C12,    ABISELECT(1536,944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7705C11,    ABISELECT(1536,944), //bcp->offset
    68, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7705C14,    ABISELECT(2512,1540), //bcp->offset
    90, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7705C5,    ABISELECT(3416,2072), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7705C8,    ABISELECT(3416,2072), //bcp->offset
    96, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7705C9,    ABISELECT(816,504), //bcp->offset
    26, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7705C6,    ABISELECT(3760,2284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7705C12,    ABISELECT(3760,2284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7705C11,    ABISELECT(3760,2284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7705C5,    ABISELECT(4736,2880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7705C8,    ABISELECT(4736,2880), //bcp->offset
    127, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7705C15,    ABISELECT(3760,2284), //bcp->offset
    102, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7705C2[];
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C2D1Ev();
extern void _ZN7S7705C2D0Ev();
extern void _ZN7S7705C23v16Ev();
extern void _ZN7S7705C23v17Ev();
extern void _ZN7S7705C32v6Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN7S7705C93v14Ev();
extern void ABISELECT(_ZTv0_n120_N7S7705C2D1Ev,_ZTv0_n60_N7S7705C2D1Ev)();
extern void ABISELECT(_ZThn816_N7S7705C2D1Ev,_ZThn504_N7S7705C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S7705C2D0Ev,_ZTv0_n60_N7S7705C2D0Ev)();
extern void ABISELECT(_ZThn816_N7S7705C2D0Ev,_ZThn504_N7S7705C2D0Ev)() __attribute__((weak));
extern void _ZN7S7705C32v6Ev();
extern void _ZN8S7705C102v7Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
extern void ABISELECT(_ZTv0_n96_N7S7705C2D1Ev,_ZTv0_n48_N7S7705C2D1Ev)();
extern void ABISELECT(_ZThn1536_N7S7705C2D1Ev,_ZThn944_N7S7705C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7705C2D0Ev,_ZTv0_n48_N7S7705C2D0Ev)();
extern void ABISELECT(_ZThn1536_N7S7705C2D0Ev,_ZThn944_N7S7705C2D0Ev)() __attribute__((weak));
extern void _ZN8S7705C113v10Ev();
extern void _ZN8S7705C143v11Ev();
extern void _ZN8S7705C143v12Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C83v13Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
extern void ABISELECT(_ZTv0_n96_N7S7705C2D1Ev,_ZTv0_n48_N7S7705C2D1Ev)();
extern void ABISELECT(_ZThn3760_N7S7705C2D1Ev,_ZThn2284_N7S7705C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7705C2D0Ev,_ZTv0_n48_N7S7705C2D0Ev)();
extern void ABISELECT(_ZThn3760_N7S7705C2D0Ev,_ZThn2284_N7S7705C2D0Ev)() __attribute__((weak));
extern void _ZN8S7705C113v10Ev();
extern void _ZN8S7705C153v15Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C83v13Ev();
static  VTBL_ENTRY vtc_S7705C2[] = {
  ABISELECT(3760,2284),
  ABISELECT(3416,2072),
  ABISELECT(2512,1540),
  ABISELECT(1536,944),
  ABISELECT(1480,920),
  0,
  ABISELECT(816,504),
  ABISELECT(512,320),
  ABISELECT(72,56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7705C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7705C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7705C23v17Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-72,-56),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
  0,
  ABISELECT(-512,-320),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-816,-504),
  0,
  0,
  0,
  0,
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-816,-504),
  ABISELECT(-816,-504),
  ABISELECT(-816,-504),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7705C93v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7705C2D1Ev,_ZTv0_n60_N7S7705C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7705C2D0Ev,_ZTv0_n60_N7S7705C2D0Ev),
  ABISELECT(-864,-528),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-864,-528),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7705C102v7Ev,
  0,
  0,
  0,
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  0,
  ABISELECT(-1536,-944),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7705C2D1Ev,_ZTv0_n48_N7S7705C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7705C2D0Ev,_ZTv0_n48_N7S7705C2D0Ev),
  (VTBL_ENTRY)&_ZN8S7705C113v10Ev,
  0,
  0,
  ABISELECT(-2512,-1540),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN8S7705C143v11Ev,
  (VTBL_ENTRY)&_ZN8S7705C143v12Ev,
  0,
  0,
  ABISELECT(-3416,-2072),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C83v13Ev,
  ABISELECT(976,596),
  0,
  0,
  ABISELECT(-3760,-2284),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7705C2D1Ev,_ZTv0_n48_N7S7705C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7705C2D0Ev,_ZTv0_n48_N7S7705C2D0Ev),
  (VTBL_ENTRY)&_ZN8S7705C113v10Ev,
  (VTBL_ENTRY)&_ZN8S7705C153v15Ev,
  ABISELECT(-4736,-2880),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C83v13Ev,
};
extern VTBL_ENTRY _ZTV7S7705C2[];
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C3__7S7705C2[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__7S7705C3__7S7705C2[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN7S7705C93v14Ev();
extern void _ZN7S7705C9D1Ev();
extern void _ZN7S7705C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C9__7S7705C2[] = {
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-816,-504),
  ABISELECT(-816,-504),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7705C93v14Ev,
  (VTBL_ENTRY)&_ZN7S7705C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7705C9D0Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C67S7705C9__7S7705C2[] = {
  ABISELECT(-816,-504),
  ABISELECT(-816,-504),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__7S7705C67S7705C9__7S7705C2[] = {
  0,
  ABISELECT(816,504),
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C32v6Ev();
extern void _ZN8S7705C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C107S7705C9__7S7705C2[] = {
  ABISELECT(-864,-528),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C10[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7705C102v7Ev,
};
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C38S7705C107S7705C9__A1__7S7705C2[] = {
  ABISELECT(-352,-208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__7S7705C38S7705C107S7705C9__A1__7S7705C2[] = {
  0,
  ABISELECT(352,208),
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C6__8S7705C107S7705C9__7S7705C2[] = {
  0,
  0,
  0,
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  ABISELECT(-616,-392),
  (VTBL_ENTRY)&(_ZTI8S7705C10[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__8S7705C107S7705C9__7S7705C2[] = {
  0,
  ABISELECT(864,528),
  (VTBL_ENTRY)&(_ZTI8S7705C10[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__A1__8S7705C107S7705C9__7S7705C2[] = {
  0,
  ABISELECT(352,208),
  (VTBL_ENTRY)&(_ZTI8S7705C10[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__7S7705C9__7S7705C2[] = {
  0,
  ABISELECT(816,504),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C32v6Ev();
extern void _ZN8S7705C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C10__7S7705C9__7S7705C2[] = {
  ABISELECT(-864,-528),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7705C102v7Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C6__A1__7S7705C9__7S7705C2[] = {
  0,
  0,
  0,
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__A1__7S7705C9__7S7705C2[] = {
  0,
  ABISELECT(304,184),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
extern void ABISELECT(_ZTv0_n96_N7S7705C9D1Ev,_ZTv0_n48_N7S7705C9D1Ev)();
extern void ABISELECT(_ZThn720_N7S7705C9D1Ev,_ZThn440_N7S7705C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7705C9D0Ev,_ZTv0_n48_N7S7705C9D0Ev)();
extern void ABISELECT(_ZThn720_N7S7705C9D0Ev,_ZThn440_N7S7705C9D0Ev)() __attribute__((weak));
extern void _ZN8S7705C113v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C11__7S7705C9__7S7705C2[] = {
  0,
  ABISELECT(-720,-440),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  ABISELECT(-720,-440),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7705C9D1Ev,_ZTv0_n48_N7S7705C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7705C9D0Ev,_ZTv0_n48_N7S7705C9D0Ev),
  (VTBL_ENTRY)&_ZN8S7705C113v10Ev,
};
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C3__A1__7S7705C9__7S7705C2[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(744,448),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN8S7705C143v11Ev();
extern void _ZN8S7705C143v12Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C14__7S7705C9__7S7705C2[] = {
  0,
  0,
  ABISELECT(-1696,-1036),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN8S7705C143v11Ev,
  (VTBL_ENTRY)&_ZN8S7705C143v12Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C83v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C8__7S7705C9__7S7705C2[] = {
  0,
  0,
  ABISELECT(-2600,-1568),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C83v13Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C6__A1__7S7705C2[] = {
  ABISELECT(-1480,-920),
  ABISELECT(-1480,-920),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__7S7705C6__A1__7S7705C2[] = {
  0,
  ABISELECT(1480,920),
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
extern void _ZN8S7705C11D1Ev();
extern void _ZN8S7705C11D0Ev();
extern void _ZN8S7705C113v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C11__7S7705C2[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7705C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7705C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7705C113v10Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C128S7705C11__7S7705C2[] = {
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C12[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C68S7705C128S7705C11__A2__7S7705C2[] = {
  ABISELECT(-1536,-944),
  ABISELECT(-1536,-944),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__7S7705C68S7705C128S7705C11__A2__7S7705C2[] = {
  0,
  ABISELECT(1536,944),
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__8S7705C128S7705C11__7S7705C2[] = {
  0,
  ABISELECT(1536,944),
  (VTBL_ENTRY)&(_ZTI8S7705C12[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__8S7705C11__7S7705C2[] = {
  0,
  ABISELECT(1536,944),
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C3__8S7705C11__7S7705C2[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(1464,888),
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__A1__8S7705C11__7S7705C2[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
extern void _ZN8S7705C15D1Ev();
extern void _ZN8S7705C15D0Ev();
extern void _ZN8S7705C113v10Ev();
extern void _ZN8S7705C153v15Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C15__7S7705C2[] = {
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C15[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7705C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7705C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7705C113v10Ev,
  (VTBL_ENTRY)&_ZN8S7705C153v15Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
extern void _ZN8S7705C11D1Ev();
extern void _ZN8S7705C11D0Ev();
extern void _ZN8S7705C113v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C118S7705C15__A1__7S7705C2[] = {
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7705C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7705C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7705C113v10Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C128S7705C118S7705C15__A1__7S7705C2[] = {
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C12[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C68S7705C128S7705C118S7705C15__A3__7S7705C2[] = {
  ABISELECT(-3760,-2284),
  ABISELECT(-3760,-2284),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__7S7705C68S7705C128S7705C118S7705C15__A3__7S7705C2[] = {
  0,
  ABISELECT(3760,2284),
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__8S7705C128S7705C118S7705C15__A1__7S7705C2[] = {
  0,
  ABISELECT(3760,2284),
  (VTBL_ENTRY)&(_ZTI8S7705C12[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__8S7705C118S7705C15__A1__7S7705C2[] = {
  0,
  ABISELECT(3760,2284),
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C3__8S7705C118S7705C15__A1__7S7705C2[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(3688,2228),
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__A1__8S7705C118S7705C15__A1__7S7705C2[] = {
  0,
  ABISELECT(3248,1964),
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__8S7705C15__7S7705C2[] = {
  0,
  ABISELECT(3760,2284),
  (VTBL_ENTRY)&(_ZTI8S7705C15[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C3__8S7705C15__7S7705C2[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(3688,2228),
  (VTBL_ENTRY)&(_ZTI8S7705C15[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__A1__8S7705C15__7S7705C2[] = {
  0,
  ABISELECT(3248,1964),
  (VTBL_ENTRY)&(_ZTI8S7705C15[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
static  VTT_ENTRY vtt_S7705C2[] = {
  {&(_ZTV7S7705C2[12]),  12,131},
  {&(_ZTV7S7705C2[21]),  21,131},
  {&(_ZTV7S7705C2[25]),  25,131},
  {&(_ZTV7S7705C2[43]),  43,131},
  {&(_ZTV7S7705C2[12]),  12,131},
  {&(_ZTV7S7705C2[55]),  55,131},
  {&(_ZTV7S7705C2[64]),  64,131},
  {&(_ZTV7S7705C2[81]),  81,131},
  {&(_ZTV7S7705C2[94]),  94,131},
  {&(_ZTV7S7705C2[100]),  100,131},
  {&(_ZTV7S7705C2[117]),  117,131},
  {&(_ZTV7S7705C2[129]),  129,131},
  {&(_tg__ZTV7S7705C3__7S7705C2[3]),  3,4},
  {&(_tg__ZTV7S7705C57S7705C4__7S7705C3__7S7705C2[3]),  3,4},
  {&(_tg__ZTV7S7705C9__7S7705C2[10]),  10,17},
  {&(_tg__ZTV7S7705C67S7705C9__7S7705C2[4]),  4,8},
  {&(_tg__ZTV7S7705C5__7S7705C67S7705C9__7S7705C2[3]),  3,4},
  {&(_tg__ZTV8S7705C107S7705C9__7S7705C2[5]),  5,7},
  {&(_tg__ZTV7S7705C38S7705C107S7705C9__A1__7S7705C2[3]),  3,4},
  {&(_tg__ZTV7S7705C57S7705C4__7S7705C38S7705C107S7705C9__A1__7S7705C2[3]),  3,4},
  {&(_tg__ZTV7S7705C6__8S7705C107S7705C9__7S7705C2[7]),  7,11},
  {&(_tg__ZTV7S7705C5__8S7705C107S7705C9__7S7705C2[3]),  3,4},
  {&(_tg__ZTV7S7705C57S7705C4__A1__8S7705C107S7705C9__7S7705C2[3]),  3,4},
  {&(_tg__ZTV7S7705C5__7S7705C9__7S7705C2[3]),  3,4},
  {&(_tg__ZTV8S7705C10__7S7705C9__7S7705C2[5]),  5,7},
  {&(_tg__ZTV7S7705C6__A1__7S7705C9__7S7705C2[7]),  7,11},
  {&(_tg__ZTV7S7705C57S7705C4__A1__7S7705C9__7S7705C2[3]),  3,4},
  {&(_tg__ZTV8S7705C11__7S7705C9__7S7705C2[13]),  13,22},
  {&(_tg__ZTV7S7705C3__A1__7S7705C9__7S7705C2[4]),  4,5},
  {&(_tg__ZTV8S7705C14__7S7705C9__7S7705C2[4]),  4,6},
  {&(_tg__ZTV7S7705C8__7S7705C9__7S7705C2[4]),  4,6},
  {&(_tg__ZTV7S7705C6__A1__7S7705C2[4]),  4,8},
  {&(_tg__ZTV7S7705C5__7S7705C6__A1__7S7705C2[3]),  3,4},
  {&(_tg__ZTV8S7705C11__7S7705C2[6]),  6,15},
  {&(_tg__ZTV8S7705C128S7705C11__7S7705C2[4]),  4,10},
  {&(_tg__ZTV7S7705C68S7705C128S7705C11__A2__7S7705C2[4]),  4,8},
  {&(_tg__ZTV7S7705C5__7S7705C68S7705C128S7705C11__A2__7S7705C2[3]),  3,4},
  {&(_tg__ZTV7S7705C5__8S7705C128S7705C11__7S7705C2[3]),  3,4},
  {&(_tg__ZTV7S7705C5__8S7705C11__7S7705C2[3]),  3,4},
  {&(_tg__ZTV7S7705C3__8S7705C11__7S7705C2[4]),  4,5},
  {&(_tg__ZTV7S7705C57S7705C4__A1__8S7705C11__7S7705C2[3]),  3,4},
  {&(_tg__ZTV8S7705C15__7S7705C2[6]),  6,16},
  {&(_tg__ZTV8S7705C118S7705C15__A1__7S7705C2[6]),  6,15},
  {&(_tg__ZTV8S7705C128S7705C118S7705C15__A1__7S7705C2[4]),  4,10},
  {&(_tg__ZTV7S7705C68S7705C128S7705C118S7705C15__A3__7S7705C2[4]),  4,8},
  {&(_tg__ZTV7S7705C5__7S7705C68S7705C128S7705C118S7705C15__A3__7S7705C2[3]),  3,4},
  {&(_tg__ZTV7S7705C5__8S7705C128S7705C118S7705C15__A1__7S7705C2[3]),  3,4},
  {&(_tg__ZTV7S7705C5__8S7705C118S7705C15__A1__7S7705C2[3]),  3,4},
  {&(_tg__ZTV7S7705C3__8S7705C118S7705C15__A1__7S7705C2[4]),  4,5},
  {&(_tg__ZTV7S7705C57S7705C4__A1__8S7705C118S7705C15__A1__7S7705C2[3]),  3,4},
  {&(_tg__ZTV7S7705C5__8S7705C15__7S7705C2[3]),  3,4},
  {&(_tg__ZTV7S7705C3__8S7705C15__7S7705C2[4]),  4,5},
  {&(_tg__ZTV7S7705C57S7705C4__A1__8S7705C15__7S7705C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7705C2[];
extern  VTBL_ENTRY _ZTV7S7705C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C2[];
static VTBL_ENTRY alt_thunk_names73[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7705C9D0Ev,_ZTv0_n48_N7S7705C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S7705C9D0Ev,_ZThn440_N7S7705C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7705C9D1Ev,_ZTv0_n48_N7S7705C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S7705C9D1Ev,_ZThn440_N7S7705C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7705C2D0Ev,_ZTv0_n48_N7S7705C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3760_N7S7705C2D0Ev,_ZThn2284_N7S7705C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N7S7705C2D0Ev,_ZThn944_N7S7705C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7705C2D1Ev,_ZTv0_n48_N7S7705C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3760_N7S7705C2D1Ev,_ZThn2284_N7S7705C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N7S7705C2D1Ev,_ZThn944_N7S7705C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7705C2D0Ev,_ZTv0_n60_N7S7705C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N7S7705C2D0Ev,_ZThn504_N7S7705C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7705C2D1Ev,_ZTv0_n60_N7S7705C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N7S7705C2D1Ev,_ZThn504_N7S7705C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7705C2 = {  "S7705C2", // class name
  bases_S7705C2, 21,
  &(vtc_S7705C2[0]), // expected_vtbl_contents
  &(vtt_S7705C2[0]), // expected_vtt_contents
  ABISELECT(5136,3132), // object size
  NSPAIRA(_ZTI7S7705C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7705C2),131, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7705C2),53, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names73,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7705C1  : S7705C2 {
  ::S19277C20 s7705c1f0;
  void *s7705c1f1[5];
  virtual void  v1(); // _ZN7S7705C12v1Ev
  ~S7705C1(); // tgen
  S7705C1(); // tgen
};
//SIG(1 S7705C1) C1{ BC2{ VBC3{ VBC4{ BC5{ v2} Fc[5] FC6{ VBC5 v4 v5 v6 Fp[3] FC7{} Fp}[2] Fi Fp[7] FC6 FC5 Fc Fi Fs[5] Fi[8] FL Fc:8} v3 Fp FL Fp[6] FC5 FC8{ BC5 v13 Fc FL Fi[3] FC4} Fp Fi} VBC9{ BC6 BC10{ VBC6 BC3 v7 Fp FC5 FL[8] FC6 Fp} VBC11{ VBC5 BC12{ BC6 v8 v9 Fp FC13{ BC14{ BC15{ v18} Fc[5] FC16{ VBC15 v19 v20 v21 Fp[3] FC7 Fp}[2] Fi Fp[7] FC16 FC15 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC15 VBC16 Fi Fp} Fi Fp Fi[2]} VBC3 vd v10 Fp[2] Fi[9] FC8 FC5[9] FL FD Fp FL Fl FL} VBC17{ v11 v12 Fp[2] Fi[2] Fp[15] Fi FC3} VBC8 v14 Fs FC7 Fc Fp[2] Fi[2] FL} VBC18{ BC11 BC8 vd v15 Fp FL[3] Fi FL} vd v16 v17 Fs FU19{ m FD Fi Fi[3] Fc Fc[2] FL} Fi[9]} v1 FU20{ m Fp FL FL Fi:27 Fs:16 Fs Fp} Fp[5]}


void  S7705C1 ::v1(){vfunc_called(this, "_ZN7S7705C12v1Ev");}
S7705C1 ::~S7705C1(){ note_dtor("S7705C1", this);} // tgen
S7705C1 ::S7705C1(){ note_ctor("S7705C1", this);} // tgen

static void Test_S7705C1()
{
  extern Class_Descriptor cd_S7705C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(325,791)];
    init_test(&cd_S7705C1, buf);
    S7705C1 *dp, &lv = *(dp=new (buf) S7705C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5184,3160), "sizeof(S7705C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7705C1)");
    check_base_class_offset(lv, (S7705C5*)(S7705C4*), ABISELECT(560,348), "S7705C1");
    /*is_ambiguous_... S7705C1::S7705C3 */ AMB_check_base_class_offset(lv, (S7705C4*)(S7705C3*), ABISELECT(560,348), "S7705C1");
    check_base_class_offset(lv, (S7705C4*)(S7705C3*)(S7705C10*)(S7705C9*), ABISELECT(560,348), "S7705C1");
    /*is_ambiguous_... S7705C2::S7705C3 */ AMB_check_base_class_offset(lv, (S7705C3*)(S7705C2*), ABISELECT(120,84), "S7705C1");
    /*is_ambiguous_... S7705C1::S7705C11 */ AMB_check_base_class_offset(lv, (S7705C3*)(S7705C11*), ABISELECT(120,84), "S7705C1");
    check_base_class_offset(lv, (S7705C3*)(S7705C11*)(S7705C15*), ABISELECT(120,84), "S7705C1");
    /*is_ambiguous_... S7705C9::S7705C6 */ AMB_check_base_class_offset(lv, (S7705C5*)(S7705C6*)(S7705C9*), 0, "S7705C1");
    /*is_ambiguous_... S7705C1::S7705C6 */ AMB_check_base_class_offset(lv, (S7705C5*)(S7705C6*), 0, "S7705C1");
    /*is_ambiguous_... S7705C1::S7705C11 */ AMB_check_base_class_offset(lv, (S7705C5*)(S7705C11*), 0, "S7705C1");
    /*is_ambiguous_... S7705C1::S7705C11 */ AMB_check_base_class_offset(lv, (S7705C5*)(S7705C6*)(S7705C12*)(S7705C11*), 0, "S7705C1");
    /*is_ambiguous_... S7705C11::S7705C5 */ AMB_check_base_class_offset(lv, (S7705C5*)(S7705C11*)(S7705C15*), 0, "S7705C1");
    check_base_class_offset(lv, (S7705C5*)(S7705C6*)(S7705C12*)(S7705C11*)(S7705C15*), 0, "S7705C1");
    /*is_ambiguous_... S7705C9::S7705C6 */ AMB_check_base_class_offset(lv, (S7705C6*)(S7705C9*), ABISELECT(864,532), "S7705C1");
    check_base_class_offset(lv, (S7705C6*)(S7705C10*)(S7705C9*), ABISELECT(1528,948), "S7705C1");
    check_base_class_offset(lv, (S7705C3*)(S7705C10*)(S7705C9*), ABISELECT(912,556), "S7705C1");
    check_base_class_offset(lv, (S7705C10*)(S7705C9*), ABISELECT(912,556), "S7705C1");
    /*is_ambiguous_... S7705C1::S7705C11 */ AMB_check_base_class_offset(lv, (S7705C6*)(S7705C12*)(S7705C11*), ABISELECT(1584,972), "S7705C1");
    /*is_ambiguous_... S7705C1::S7705C11 */ AMB_check_base_class_offset(lv, (S7705C12*)(S7705C11*), ABISELECT(1584,972), "S7705C1");
    check_base_class_offset(lv, (S7705C11*)(S7705C9*), ABISELECT(1584,972), "S7705C1");
    check_base_class_offset(lv, (S7705C14*)(S7705C9*), ABISELECT(2560,1568), "S7705C1");
    /*is_ambiguous_... S7705C1::S7705C8 */ AMB_check_base_class_offset(lv, (S7705C5*)(S7705C8*), ABISELECT(3464,2100), "S7705C1");
    check_base_class_offset(lv, (S7705C8*)(S7705C9*), ABISELECT(3464,2100), "S7705C1");
    check_base_class_offset(lv, (S7705C9*)(S7705C2*), ABISELECT(864,532), "S7705C1");
    check_base_class_offset(lv, (S7705C6*)(S7705C12*)(S7705C11*)(S7705C15*), ABISELECT(3808,2312), "S7705C1");
    check_base_class_offset(lv, (S7705C12*)(S7705C11*)(S7705C15*), ABISELECT(3808,2312), "S7705C1");
    check_base_class_offset(lv, (S7705C11*)(S7705C15*), ABISELECT(3808,2312), "S7705C1");
    check_base_class_offset(lv, (S7705C5*)(S7705C8*)(S7705C15*), ABISELECT(4784,2908), "S7705C1");
    check_base_class_offset(lv, (S7705C8*)(S7705C15*), ABISELECT(4784,2908), "S7705C1");
    check_base_class_offset(lv, (S7705C15*)(S7705C2*), ABISELECT(3808,2312), "S7705C1");
    check_base_class_offset(lv, (S7705C2*), 0, "S7705C1");
    check_field_offset(lv, s7705c1f0, ABISELECT(72,56), "S7705C1.s7705c1f0");
    check_field_offset(lv, s7705c1f1, ABISELECT(80,64), "S7705C1.s7705c1f1");
    test_class_info(&lv, &cd_S7705C1);
    dp->~S7705C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7705C1(Test_S7705C1, "S7705C1", ABISELECT(5184,3160));

#else // __cplusplus

extern void _ZN7S7705C1C1Ev();
extern void _ZN7S7705C1D1Ev();
Name_Map name_map_S7705C1[] = {
  NSPAIR(_ZN7S7705C1C1Ev),
  NSPAIR(_ZN7S7705C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C4;
extern VTBL_ENTRY _ZTI7S7705C4[];
extern  VTBL_ENTRY _ZTV7S7705C4[];
extern Class_Descriptor cd_S7705C3;
extern VTBL_ENTRY _ZTI7S7705C3[];
extern  VTBL_ENTRY _ZTV7S7705C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C3[];
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C6;
extern VTBL_ENTRY _ZTI7S7705C6[];
extern  VTBL_ENTRY _ZTV7S7705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C6[];
extern Class_Descriptor cd_S7705C6;
extern VTBL_ENTRY _ZTI7S7705C6[];
extern  VTBL_ENTRY _ZTV7S7705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C6[];
extern Class_Descriptor cd_S7705C3;
extern VTBL_ENTRY _ZTI7S7705C3[];
extern  VTBL_ENTRY _ZTV7S7705C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C3[];
extern Class_Descriptor cd_S7705C10;
extern VTBL_ENTRY _ZTI8S7705C10[];
extern  VTBL_ENTRY _ZTV8S7705C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C10[];
extern Class_Descriptor cd_S7705C6;
extern VTBL_ENTRY _ZTI7S7705C6[];
extern  VTBL_ENTRY _ZTV7S7705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C6[];
extern Class_Descriptor cd_S7705C12;
extern VTBL_ENTRY _ZTI8S7705C12[];
extern  VTBL_ENTRY _ZTV8S7705C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C12[];
extern Class_Descriptor cd_S7705C11;
extern VTBL_ENTRY _ZTI8S7705C11[];
extern  VTBL_ENTRY _ZTV8S7705C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C11[];
extern Class_Descriptor cd_S7705C14;
extern VTBL_ENTRY _ZTI8S7705C14[];
extern  VTBL_ENTRY _ZTV8S7705C14[];
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C8;
extern VTBL_ENTRY _ZTI7S7705C8[];
extern  VTBL_ENTRY _ZTV7S7705C8[];
extern Class_Descriptor cd_S7705C9;
extern VTBL_ENTRY _ZTI7S7705C9[];
extern  VTBL_ENTRY _ZTV7S7705C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C9[];
extern Class_Descriptor cd_S7705C6;
extern VTBL_ENTRY _ZTI7S7705C6[];
extern  VTBL_ENTRY _ZTV7S7705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C6[];
extern Class_Descriptor cd_S7705C12;
extern VTBL_ENTRY _ZTI8S7705C12[];
extern  VTBL_ENTRY _ZTV8S7705C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C12[];
extern Class_Descriptor cd_S7705C11;
extern VTBL_ENTRY _ZTI8S7705C11[];
extern  VTBL_ENTRY _ZTV8S7705C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C11[];
extern Class_Descriptor cd_S7705C5;
extern VTBL_ENTRY _ZTI7S7705C5[];
extern  VTBL_ENTRY _ZTV7S7705C5[];
extern Class_Descriptor cd_S7705C8;
extern VTBL_ENTRY _ZTI7S7705C8[];
extern  VTBL_ENTRY _ZTV7S7705C8[];
extern Class_Descriptor cd_S7705C15;
extern VTBL_ENTRY _ZTI8S7705C15[];
extern  VTBL_ENTRY _ZTV8S7705C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7705C15[];
extern Class_Descriptor cd_S7705C2;
extern VTBL_ENTRY _ZTI7S7705C2[];
extern  VTBL_ENTRY _ZTV7S7705C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C2[];
static Base_Class bases_S7705C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7705C5,    ABISELECT(560,348), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7705C4,    ABISELECT(560,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7705C3,    ABISELECT(120,84), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7705C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7705C6,    ABISELECT(864,532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7705C6,    ABISELECT(1528,948), //bcp->offset
    58, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7705C3,    ABISELECT(912,556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7705C10,    ABISELECT(912,556), //bcp->offset
    51, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7705C6,    ABISELECT(1584,972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7705C12,    ABISELECT(1584,972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7705C11,    ABISELECT(1584,972), //bcp->offset
    69, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7705C14,    ABISELECT(2560,1568), //bcp->offset
    91, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7705C5,    ABISELECT(3464,2100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7705C8,    ABISELECT(3464,2100), //bcp->offset
    97, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7705C9,    ABISELECT(864,532), //bcp->offset
    27, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7705C6,    ABISELECT(3808,2312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7705C12,    ABISELECT(3808,2312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7705C11,    ABISELECT(3808,2312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7705C5,    ABISELECT(4784,2908), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7705C8,    ABISELECT(4784,2908), //bcp->offset
    128, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7705C15,    ABISELECT(3808,2312), //bcp->offset
    103, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7705C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7705C1[];
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C1D1Ev();
extern void _ZN7S7705C1D0Ev();
extern void _ZN7S7705C23v16Ev();
extern void _ZN7S7705C23v17Ev();
extern void _ZN7S7705C12v1Ev();
extern void _ZN7S7705C32v6Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN7S7705C93v14Ev();
extern void ABISELECT(_ZTv0_n120_N7S7705C1D1Ev,_ZTv0_n60_N7S7705C1D1Ev)();
extern void ABISELECT(_ZThn864_N7S7705C1D1Ev,_ZThn532_N7S7705C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S7705C1D0Ev,_ZTv0_n60_N7S7705C1D0Ev)();
extern void ABISELECT(_ZThn864_N7S7705C1D0Ev,_ZThn532_N7S7705C1D0Ev)() __attribute__((weak));
extern void _ZN7S7705C32v6Ev();
extern void _ZN8S7705C102v7Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
extern void ABISELECT(_ZTv0_n96_N7S7705C1D1Ev,_ZTv0_n48_N7S7705C1D1Ev)();
extern void ABISELECT(_ZThn1584_N7S7705C1D1Ev,_ZThn972_N7S7705C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7705C1D0Ev,_ZTv0_n48_N7S7705C1D0Ev)();
extern void ABISELECT(_ZThn1584_N7S7705C1D0Ev,_ZThn972_N7S7705C1D0Ev)() __attribute__((weak));
extern void _ZN8S7705C113v10Ev();
extern void _ZN8S7705C143v11Ev();
extern void _ZN8S7705C143v12Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C83v13Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
extern void ABISELECT(_ZTv0_n96_N7S7705C1D1Ev,_ZTv0_n48_N7S7705C1D1Ev)();
extern void ABISELECT(_ZThn3808_N7S7705C1D1Ev,_ZThn2312_N7S7705C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7705C1D0Ev,_ZTv0_n48_N7S7705C1D0Ev)();
extern void ABISELECT(_ZThn3808_N7S7705C1D0Ev,_ZThn2312_N7S7705C1D0Ev)() __attribute__((weak));
extern void _ZN8S7705C113v10Ev();
extern void _ZN8S7705C153v15Ev();
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C83v13Ev();
static  VTBL_ENTRY vtc_S7705C1[] = {
  ABISELECT(3808,2312),
  ABISELECT(3464,2100),
  ABISELECT(2560,1568),
  ABISELECT(1584,972),
  ABISELECT(1528,948),
  0,
  ABISELECT(864,532),
  ABISELECT(560,348),
  ABISELECT(120,84),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C1[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7705C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7705C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7705C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7705C12v1Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI7S7705C1[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
  0,
  ABISELECT(-560,-348),
  (VTBL_ENTRY)&(_ZTI7S7705C1[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-864,-532),
  0,
  0,
  0,
  0,
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-864,-532),
  ABISELECT(-864,-532),
  ABISELECT(-864,-532),
  (VTBL_ENTRY)&(_ZTI7S7705C1[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7705C93v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7705C1D1Ev,_ZTv0_n60_N7S7705C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7705C1D0Ev,_ZTv0_n60_N7S7705C1D0Ev),
  ABISELECT(-912,-556),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-912,-556),
  (VTBL_ENTRY)&(_ZTI7S7705C1[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7705C102v7Ev,
  0,
  0,
  0,
  ABISELECT(-1528,-948),
  ABISELECT(-1528,-948),
  ABISELECT(-1528,-948),
  (VTBL_ENTRY)&(_ZTI7S7705C1[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  0,
  ABISELECT(-1584,-972),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1584,-972),
  ABISELECT(-1584,-972),
  ABISELECT(-1584,-972),
  (VTBL_ENTRY)&(_ZTI7S7705C1[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7705C1D1Ev,_ZTv0_n48_N7S7705C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7705C1D0Ev,_ZTv0_n48_N7S7705C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7705C113v10Ev,
  0,
  0,
  ABISELECT(-2560,-1568),
  (VTBL_ENTRY)&(_ZTI7S7705C1[0]),
  (VTBL_ENTRY)&_ZN8S7705C143v11Ev,
  (VTBL_ENTRY)&_ZN8S7705C143v12Ev,
  0,
  0,
  ABISELECT(-3464,-2100),
  (VTBL_ENTRY)&(_ZTI7S7705C1[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C83v13Ev,
  ABISELECT(976,596),
  0,
  0,
  ABISELECT(-3808,-2312),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3808,-2312),
  ABISELECT(-3808,-2312),
  ABISELECT(-3808,-2312),
  (VTBL_ENTRY)&(_ZTI7S7705C1[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7705C1D1Ev,_ZTv0_n48_N7S7705C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7705C1D0Ev,_ZTv0_n48_N7S7705C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7705C113v10Ev,
  (VTBL_ENTRY)&_ZN8S7705C153v15Ev,
  ABISELECT(-4784,-2908),
  (VTBL_ENTRY)&(_ZTI7S7705C1[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C83v13Ev,
};
extern VTBL_ENTRY _ZTV7S7705C1[];
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C2D1Ev();
extern void _ZN7S7705C2D0Ev();
extern void _ZN7S7705C23v16Ev();
extern void _ZN7S7705C23v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C2__7S7705C1[] = {
  ABISELECT(3808,2312),
  ABISELECT(3464,2100),
  ABISELECT(2560,1568),
  ABISELECT(1584,972),
  ABISELECT(1528,948),
  0,
  ABISELECT(864,532),
  ABISELECT(560,348),
  ABISELECT(120,84),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7705C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7705C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7705C23v17Ev,
};
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C3__7S7705C2__7S7705C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__7S7705C2__7S7705C1[] = {
  0,
  ABISELECT(-560,-348),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN7S7705C93v14Ev();
extern void ABISELECT(_ZTv0_n120_N7S7705C2D1Ev,_ZTv0_n60_N7S7705C2D1Ev)();
extern void ABISELECT(_ZThn864_N7S7705C2D1Ev,_ZThn532_N7S7705C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S7705C2D0Ev,_ZTv0_n60_N7S7705C2D0Ev)();
extern void ABISELECT(_ZThn864_N7S7705C2D0Ev,_ZThn532_N7S7705C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7705C9__7S7705C2__7S7705C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-864,-532),
  0,
  0,
  0,
  0,
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-864,-532),
  ABISELECT(-864,-532),
  ABISELECT(-864,-532),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7705C93v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7705C2D1Ev,_ZTv0_n60_N7S7705C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7705C2D0Ev,_ZTv0_n60_N7S7705C2D0Ev),
};
extern void _ZN7S7705C32v6Ev();
extern void _ZN8S7705C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C107S7705C9__7S7705C2__7S7705C1[] = {
  ABISELECT(-912,-556),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-912,-556),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7705C102v7Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C6__A1__7S7705C2__7S7705C1[] = {
  0,
  0,
  0,
  ABISELECT(-1528,-948),
  ABISELECT(-1528,-948),
  ABISELECT(-1528,-948),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
extern void ABISELECT(_ZTv0_n96_N7S7705C2D1Ev,_ZTv0_n48_N7S7705C2D1Ev)();
extern void ABISELECT(_ZThn1584_N7S7705C2D1Ev,_ZThn972_N7S7705C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7705C2D0Ev,_ZTv0_n48_N7S7705C2D0Ev)();
extern void ABISELECT(_ZThn1584_N7S7705C2D0Ev,_ZThn972_N7S7705C2D0Ev)() __attribute__((weak));
extern void _ZN8S7705C113v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C11__7S7705C2__7S7705C1[] = {
  0,
  ABISELECT(-1584,-972),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1584,-972),
  ABISELECT(-1584,-972),
  ABISELECT(-1584,-972),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7705C2D1Ev,_ZTv0_n48_N7S7705C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7705C2D0Ev,_ZTv0_n48_N7S7705C2D0Ev),
  (VTBL_ENTRY)&_ZN8S7705C113v10Ev,
};
extern void _ZN8S7705C143v11Ev();
extern void _ZN8S7705C143v12Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C14__7S7705C2__7S7705C1[] = {
  0,
  0,
  ABISELECT(-2560,-1568),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN8S7705C143v11Ev,
  (VTBL_ENTRY)&_ZN8S7705C143v12Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C83v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C8__7S7705C2__7S7705C1[] = {
  0,
  0,
  ABISELECT(-3464,-2100),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C83v13Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
extern void ABISELECT(_ZTv0_n96_N7S7705C2D1Ev,_ZTv0_n48_N7S7705C2D1Ev)();
extern void ABISELECT(_ZThn3808_N7S7705C2D1Ev,_ZThn2312_N7S7705C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7705C2D0Ev,_ZTv0_n48_N7S7705C2D0Ev)();
extern void ABISELECT(_ZThn3808_N7S7705C2D0Ev,_ZThn2312_N7S7705C2D0Ev)() __attribute__((weak));
extern void _ZN8S7705C113v10Ev();
extern void _ZN8S7705C153v15Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C15__7S7705C2__7S7705C1[] = {
  ABISELECT(976,596),
  0,
  0,
  ABISELECT(-3808,-2312),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3808,-2312),
  ABISELECT(-3808,-2312),
  ABISELECT(-3808,-2312),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7705C2D1Ev,_ZTv0_n48_N7S7705C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7705C2D0Ev,_ZTv0_n48_N7S7705C2D0Ev),
  (VTBL_ENTRY)&_ZN8S7705C113v10Ev,
  (VTBL_ENTRY)&_ZN8S7705C153v15Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C83v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C88S7705C15__A1__7S7705C2__7S7705C1[] = {
  ABISELECT(-4784,-2908),
  (VTBL_ENTRY)&(_ZTI7S7705C2[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C83v13Ev,
};
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C3__7S7705C1[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__7S7705C3__7S7705C1[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN7S7705C93v14Ev();
extern void _ZN7S7705C9D1Ev();
extern void _ZN7S7705C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C9__7S7705C1[] = {
  ABISELECT(2600,1568),
  ABISELECT(1696,1036),
  ABISELECT(-744,-448),
  ABISELECT(720,440),
  ABISELECT(-304,-184),
  ABISELECT(664,416),
  ABISELECT(-864,-532),
  ABISELECT(-864,-532),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7705C93v14Ev,
  (VTBL_ENTRY)&_ZN7S7705C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7705C9D0Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C67S7705C9__7S7705C1[] = {
  ABISELECT(-864,-532),
  ABISELECT(-864,-532),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__7S7705C67S7705C9__7S7705C1[] = {
  0,
  ABISELECT(864,532),
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C32v6Ev();
extern void _ZN8S7705C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C107S7705C9__7S7705C1[] = {
  ABISELECT(-912,-556),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C10[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7705C102v7Ev,
};
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C38S7705C107S7705C9__A1__7S7705C1[] = {
  ABISELECT(-352,-208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__7S7705C38S7705C107S7705C9__A1__7S7705C1[] = {
  0,
  ABISELECT(352,208),
  (VTBL_ENTRY)&(_ZTI7S7705C3[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C6__8S7705C107S7705C9__7S7705C1[] = {
  0,
  0,
  0,
  ABISELECT(-1528,-948),
  ABISELECT(-1528,-948),
  ABISELECT(-616,-392),
  (VTBL_ENTRY)&(_ZTI8S7705C10[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__8S7705C107S7705C9__7S7705C1[] = {
  0,
  ABISELECT(912,556),
  (VTBL_ENTRY)&(_ZTI8S7705C10[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__A1__8S7705C107S7705C9__7S7705C1[] = {
  0,
  ABISELECT(352,208),
  (VTBL_ENTRY)&(_ZTI8S7705C10[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__7S7705C9__7S7705C1[] = {
  0,
  ABISELECT(864,532),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C32v6Ev();
extern void _ZN8S7705C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C10__7S7705C9__7S7705C1[] = {
  ABISELECT(-912,-556),
  ABISELECT(616,392),
  ABISELECT(-352,-208),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
  (VTBL_ENTRY)&_ZN8S7705C102v7Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C6__A1__7S7705C9__7S7705C1[] = {
  0,
  0,
  0,
  ABISELECT(-1528,-948),
  ABISELECT(-1528,-948),
  ABISELECT(-664,-416),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__A1__7S7705C9__7S7705C1[] = {
  0,
  ABISELECT(304,184),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
extern void ABISELECT(_ZTv0_n96_N7S7705C9D1Ev,_ZTv0_n48_N7S7705C9D1Ev)();
extern void ABISELECT(_ZThn720_N7S7705C9D1Ev,_ZThn440_N7S7705C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7705C9D0Ev,_ZTv0_n48_N7S7705C9D0Ev)();
extern void ABISELECT(_ZThn720_N7S7705C9D0Ev,_ZThn440_N7S7705C9D0Ev)() __attribute__((weak));
extern void _ZN8S7705C113v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C11__7S7705C9__7S7705C1[] = {
  0,
  ABISELECT(-720,-440),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1584,-972),
  ABISELECT(-1584,-972),
  ABISELECT(-720,-440),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7705C9D1Ev,_ZTv0_n48_N7S7705C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7705C9D0Ev,_ZTv0_n48_N7S7705C9D0Ev),
  (VTBL_ENTRY)&_ZN8S7705C113v10Ev,
};
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C3__A1__7S7705C9__7S7705C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(744,448),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN8S7705C143v11Ev();
extern void _ZN8S7705C143v12Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C14__7S7705C9__7S7705C1[] = {
  0,
  0,
  ABISELECT(-1696,-1036),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN8S7705C143v11Ev,
  (VTBL_ENTRY)&_ZN8S7705C143v12Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C83v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C8__7S7705C9__7S7705C1[] = {
  0,
  0,
  ABISELECT(-2600,-1568),
  (VTBL_ENTRY)&(_ZTI7S7705C9[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C83v13Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C6__A1__7S7705C1[] = {
  ABISELECT(-1528,-948),
  ABISELECT(-1528,-948),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__7S7705C6__A1__7S7705C1[] = {
  0,
  ABISELECT(1528,948),
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
extern void _ZN8S7705C11D1Ev();
extern void _ZN8S7705C11D0Ev();
extern void _ZN8S7705C113v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C11__7S7705C1[] = {
  ABISELECT(-1024,-624),
  ABISELECT(-1464,-888),
  ABISELECT(-1584,-972),
  ABISELECT(-1584,-972),
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7705C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7705C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7705C113v10Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C128S7705C11__7S7705C1[] = {
  ABISELECT(-1584,-972),
  ABISELECT(-1584,-972),
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C12[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C68S7705C128S7705C11__A2__7S7705C1[] = {
  ABISELECT(-1584,-972),
  ABISELECT(-1584,-972),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__7S7705C68S7705C128S7705C11__A2__7S7705C1[] = {
  0,
  ABISELECT(1584,972),
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__8S7705C128S7705C11__7S7705C1[] = {
  0,
  ABISELECT(1584,972),
  (VTBL_ENTRY)&(_ZTI8S7705C12[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__8S7705C11__7S7705C1[] = {
  0,
  ABISELECT(1584,972),
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C3__8S7705C11__7S7705C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(1464,888),
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__A1__8S7705C11__7S7705C1[] = {
  0,
  ABISELECT(1024,624),
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
extern void _ZN8S7705C15D1Ev();
extern void _ZN8S7705C15D0Ev();
extern void _ZN8S7705C113v10Ev();
extern void _ZN8S7705C153v15Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C15__7S7705C1[] = {
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3808,-2312),
  ABISELECT(-3808,-2312),
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C15[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7705C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7705C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7705C113v10Ev,
  (VTBL_ENTRY)&_ZN8S7705C153v15Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
extern void _ZN8S7705C11D1Ev();
extern void _ZN8S7705C11D0Ev();
extern void _ZN8S7705C113v10Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C118S7705C15__A1__7S7705C1[] = {
  ABISELECT(-3248,-1964),
  ABISELECT(-3688,-2228),
  ABISELECT(-3808,-2312),
  ABISELECT(-3808,-2312),
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
  (VTBL_ENTRY)&_ZN8S7705C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7705C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7705C113v10Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
extern void _ZN8S7705C122v8Ev();
extern void _ZN8S7705C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7705C128S7705C118S7705C15__A1__7S7705C1[] = {
  ABISELECT(-3808,-2312),
  ABISELECT(-3808,-2312),
  0,
  (VTBL_ENTRY)&(_ZTI8S7705C12[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v8Ev,
  (VTBL_ENTRY)&_ZN8S7705C122v9Ev,
};
extern void _ZN7S7705C52v2Ev();
extern void _ZN7S7705C62v3Ev();
extern void _ZN7S7705C62v4Ev();
extern void _ZN7S7705C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C68S7705C128S7705C118S7705C15__A3__7S7705C1[] = {
  ABISELECT(-3808,-2312),
  ABISELECT(-3808,-2312),
  0,
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7705C62v5Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__7S7705C68S7705C128S7705C118S7705C15__A3__7S7705C1[] = {
  0,
  ABISELECT(3808,2312),
  (VTBL_ENTRY)&(_ZTI7S7705C6[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__8S7705C128S7705C118S7705C15__A1__7S7705C1[] = {
  0,
  ABISELECT(3808,2312),
  (VTBL_ENTRY)&(_ZTI8S7705C12[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__8S7705C118S7705C15__A1__7S7705C1[] = {
  0,
  ABISELECT(3808,2312),
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C3__8S7705C118S7705C15__A1__7S7705C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(3688,2228),
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__A1__8S7705C118S7705C15__A1__7S7705C1[] = {
  0,
  ABISELECT(3248,1964),
  (VTBL_ENTRY)&(_ZTI8S7705C11[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C5__8S7705C15__7S7705C1[] = {
  0,
  ABISELECT(3808,2312),
  (VTBL_ENTRY)&(_ZTI8S7705C15[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
extern void _ZN7S7705C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C3__8S7705C15__7S7705C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(3688,2228),
  (VTBL_ENTRY)&(_ZTI8S7705C15[0]),
  (VTBL_ENTRY)&_ZN7S7705C32v6Ev,
};
extern void _ZN7S7705C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7705C57S7705C4__A1__8S7705C15__7S7705C1[] = {
  0,
  ABISELECT(3248,1964),
  (VTBL_ENTRY)&(_ZTI8S7705C15[0]),
  (VTBL_ENTRY)&_ZN7S7705C52v2Ev,
};
static  VTT_ENTRY vtt_S7705C1[] = {
  {&(_ZTV7S7705C1[12]),  12,132},
  {&(_tg__ZTV7S7705C2__7S7705C1[12]),  12,17},
  {&(_tg__ZTV7S7705C3__7S7705C2__7S7705C1[4]),  4,5},
  {&(_tg__ZTV7S7705C57S7705C4__7S7705C2__7S7705C1[3]),  3,4},
  {&(_tg__ZTV7S7705C9__7S7705C2__7S7705C1[17]),  17,24},
  {&(_tg__ZTV7S7705C2__7S7705C1[12]),  12,17},
  {&(_tg__ZTV8S7705C107S7705C9__7S7705C2__7S7705C1[5]),  5,7},
  {&(_tg__ZTV7S7705C6__A1__7S7705C2__7S7705C1[7]),  7,11},
  {&(_tg__ZTV8S7705C11__7S7705C2__7S7705C1[13]),  13,22},
  {&(_tg__ZTV8S7705C14__7S7705C2__7S7705C1[4]),  4,6},
  {&(_tg__ZTV7S7705C8__7S7705C2__7S7705C1[4]),  4,6},
  {&(_tg__ZTV8S7705C15__7S7705C2__7S7705C1[15]),  15,25},
  {&(_tg__ZTV7S7705C88S7705C15__A1__7S7705C2__7S7705C1[2]),  2,4},
  {&(_ZTV7S7705C1[22]),  22,132},
  {&(_ZTV7S7705C1[26]),  26,132},
  {&(_ZTV7S7705C1[44]),  44,132},
  {&(_ZTV7S7705C1[12]),  12,132},
  {&(_ZTV7S7705C1[56]),  56,132},
  {&(_ZTV7S7705C1[65]),  65,132},
  {&(_ZTV7S7705C1[82]),  82,132},
  {&(_ZTV7S7705C1[95]),  95,132},
  {&(_ZTV7S7705C1[101]),  101,132},
  {&(_ZTV7S7705C1[118]),  118,132},
  {&(_ZTV7S7705C1[130]),  130,132},
  {&(_tg__ZTV7S7705C3__7S7705C1[3]),  3,4},
  {&(_tg__ZTV7S7705C57S7705C4__7S7705C3__7S7705C1[3]),  3,4},
  {&(_tg__ZTV7S7705C9__7S7705C1[10]),  10,17},
  {&(_tg__ZTV7S7705C67S7705C9__7S7705C1[4]),  4,8},
  {&(_tg__ZTV7S7705C5__7S7705C67S7705C9__7S7705C1[3]),  3,4},
  {&(_tg__ZTV8S7705C107S7705C9__7S7705C1[5]),  5,7},
  {&(_tg__ZTV7S7705C38S7705C107S7705C9__A1__7S7705C1[3]),  3,4},
  {&(_tg__ZTV7S7705C57S7705C4__7S7705C38S7705C107S7705C9__A1__7S7705C1[3]),  3,4},
  {&(_tg__ZTV7S7705C6__8S7705C107S7705C9__7S7705C1[7]),  7,11},
  {&(_tg__ZTV7S7705C5__8S7705C107S7705C9__7S7705C1[3]),  3,4},
  {&(_tg__ZTV7S7705C57S7705C4__A1__8S7705C107S7705C9__7S7705C1[3]),  3,4},
  {&(_tg__ZTV7S7705C5__7S7705C9__7S7705C1[3]),  3,4},
  {&(_tg__ZTV8S7705C10__7S7705C9__7S7705C1[5]),  5,7},
  {&(_tg__ZTV7S7705C6__A1__7S7705C9__7S7705C1[7]),  7,11},
  {&(_tg__ZTV7S7705C57S7705C4__A1__7S7705C9__7S7705C1[3]),  3,4},
  {&(_tg__ZTV8S7705C11__7S7705C9__7S7705C1[13]),  13,22},
  {&(_tg__ZTV7S7705C3__A1__7S7705C9__7S7705C1[4]),  4,5},
  {&(_tg__ZTV8S7705C14__7S7705C9__7S7705C1[4]),  4,6},
  {&(_tg__ZTV7S7705C8__7S7705C9__7S7705C1[4]),  4,6},
  {&(_tg__ZTV7S7705C6__A1__7S7705C1[4]),  4,8},
  {&(_tg__ZTV7S7705C5__7S7705C6__A1__7S7705C1[3]),  3,4},
  {&(_tg__ZTV8S7705C11__7S7705C1[6]),  6,15},
  {&(_tg__ZTV8S7705C128S7705C11__7S7705C1[4]),  4,10},
  {&(_tg__ZTV7S7705C68S7705C128S7705C11__A2__7S7705C1[4]),  4,8},
  {&(_tg__ZTV7S7705C5__7S7705C68S7705C128S7705C11__A2__7S7705C1[3]),  3,4},
  {&(_tg__ZTV7S7705C5__8S7705C128S7705C11__7S7705C1[3]),  3,4},
  {&(_tg__ZTV7S7705C5__8S7705C11__7S7705C1[3]),  3,4},
  {&(_tg__ZTV7S7705C3__8S7705C11__7S7705C1[4]),  4,5},
  {&(_tg__ZTV7S7705C57S7705C4__A1__8S7705C11__7S7705C1[3]),  3,4},
  {&(_tg__ZTV8S7705C15__7S7705C1[6]),  6,16},
  {&(_tg__ZTV8S7705C118S7705C15__A1__7S7705C1[6]),  6,15},
  {&(_tg__ZTV8S7705C128S7705C118S7705C15__A1__7S7705C1[4]),  4,10},
  {&(_tg__ZTV7S7705C68S7705C128S7705C118S7705C15__A3__7S7705C1[4]),  4,8},
  {&(_tg__ZTV7S7705C5__7S7705C68S7705C128S7705C118S7705C15__A3__7S7705C1[3]),  3,4},
  {&(_tg__ZTV7S7705C5__8S7705C128S7705C118S7705C15__A1__7S7705C1[3]),  3,4},
  {&(_tg__ZTV7S7705C5__8S7705C118S7705C15__A1__7S7705C1[3]),  3,4},
  {&(_tg__ZTV7S7705C3__8S7705C118S7705C15__A1__7S7705C1[4]),  4,5},
  {&(_tg__ZTV7S7705C57S7705C4__A1__8S7705C118S7705C15__A1__7S7705C1[3]),  3,4},
  {&(_tg__ZTV7S7705C5__8S7705C15__7S7705C1[3]),  3,4},
  {&(_tg__ZTV7S7705C3__8S7705C15__7S7705C1[4]),  4,5},
  {&(_tg__ZTV7S7705C57S7705C4__A1__8S7705C15__7S7705C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7705C1[];
extern  VTBL_ENTRY _ZTV7S7705C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7705C1[];
static VTBL_ENTRY alt_thunk_names74[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7705C9D0Ev,_ZTv0_n48_N7S7705C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S7705C9D0Ev,_ZThn440_N7S7705C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7705C9D1Ev,_ZTv0_n48_N7S7705C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S7705C9D1Ev,_ZThn440_N7S7705C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7705C2D0Ev,_ZTv0_n48_N7S7705C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3808_N7S7705C2D0Ev,_ZThn2312_N7S7705C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1584_N7S7705C2D0Ev,_ZThn972_N7S7705C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7705C2D1Ev,_ZTv0_n48_N7S7705C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3808_N7S7705C2D1Ev,_ZThn2312_N7S7705C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1584_N7S7705C2D1Ev,_ZThn972_N7S7705C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7705C2D0Ev,_ZTv0_n60_N7S7705C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N7S7705C2D0Ev,_ZThn532_N7S7705C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7705C2D1Ev,_ZTv0_n60_N7S7705C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N7S7705C2D1Ev,_ZThn532_N7S7705C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7705C1D0Ev,_ZTv0_n48_N7S7705C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3808_N7S7705C1D0Ev,_ZThn2312_N7S7705C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1584_N7S7705C1D0Ev,_ZThn972_N7S7705C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7705C1D1Ev,_ZTv0_n48_N7S7705C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3808_N7S7705C1D1Ev,_ZThn2312_N7S7705C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1584_N7S7705C1D1Ev,_ZThn972_N7S7705C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7705C1D0Ev,_ZTv0_n60_N7S7705C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N7S7705C1D0Ev,_ZThn532_N7S7705C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7705C1D1Ev,_ZTv0_n60_N7S7705C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N7S7705C1D1Ev,_ZThn532_N7S7705C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7705C1 = {  "S7705C1", // class name
  bases_S7705C1, 22,
  &(vtc_S7705C1[0]), // expected_vtbl_contents
  &(vtt_S7705C1[0]), // expected_vtt_contents
  ABISELECT(5184,3160), // object size
  NSPAIRA(_ZTI7S7705C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7705C1),132, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7705C1),65, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names74,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19517C4  {
  virtual void  v2(); // _ZN8S19517C42v2Ev
  ~S19517C4(); // tgen
  S19517C4(); // tgen
};
//SIG(-1 S19517C4) C1{ v1}


void  S19517C4 ::v2(){vfunc_called(this, "_ZN8S19517C42v2Ev");}
S19517C4 ::~S19517C4(){ note_dtor("S19517C4", this);} // tgen
S19517C4 ::S19517C4(){ note_ctor("S19517C4", this);} // tgen

static void Test_S19517C4()
{
  extern Class_Descriptor cd_S19517C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19517C4, buf);
    S19517C4 *dp, &lv = *(dp=new (buf) S19517C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19517C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19517C4)");
    test_class_info(&lv, &cd_S19517C4);
    dp->~S19517C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19517C4(Test_S19517C4, "S19517C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19517C4C1Ev();
extern void _ZN8S19517C4D1Ev();
Name_Map name_map_S19517C4[] = {
  NSPAIR(_ZN8S19517C4C1Ev),
  NSPAIR(_ZN8S19517C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19517C4[];
extern void _ZN8S19517C42v2Ev();
static  VTBL_ENTRY vtc_S19517C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19517C4[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S19517C4[];
extern  VTBL_ENTRY _ZTV8S19517C4[];
Class_Descriptor cd_S19517C4 = {  "S19517C4", // class name
  0,0,//no base classes
  &(vtc_S19517C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19517C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19517C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19517C6  : virtual S19517C4 {
  void *s19517c6f0[3];
  ::S2489C12_nt s19517c6f1;
  void *s19517c6f2;
  virtual void  v3(); // _ZN8S19517C62v3Ev
  virtual void  v4(); // _ZN8S19517C62v4Ev
  virtual void  v5(); // _ZN8S19517C62v5Ev
  ~S19517C6(); // tgen
  S19517C6(); // tgen
};
//SIG(-1 S19517C6) C1{ VBC2{ v4} v1 v2 v3 Fp[3] FC3{} Fp}


void  S19517C6 ::v3(){vfunc_called(this, "_ZN8S19517C62v3Ev");}
void  S19517C6 ::v4(){vfunc_called(this, "_ZN8S19517C62v4Ev");}
void  S19517C6 ::v5(){vfunc_called(this, "_ZN8S19517C62v5Ev");}
S19517C6 ::~S19517C6(){ note_dtor("S19517C6", this);} // tgen
S19517C6 ::S19517C6(){ note_ctor("S19517C6", this);} // tgen

static void Test_S19517C6()
{
  extern Class_Descriptor cd_S19517C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S19517C6, buf);
    S19517C6 *dp, &lv = *(dp=new (buf) S19517C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19517C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19517C6)");
    check_base_class_offset(lv, (S19517C4*), 0, "S19517C6");
    check_field_offset(lv, s19517c6f0, ABISELECT(8,4), "S19517C6.s19517c6f0");
    check_field_offset(lv, s19517c6f1, ABISELECT(32,16), "S19517C6.s19517c6f1");
    check_field_offset(lv, s19517c6f2, ABISELECT(40,20), "S19517C6.s19517c6f2");
    test_class_info(&lv, &cd_S19517C6);
    dp->~S19517C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19517C6(Test_S19517C6, "S19517C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19517C6C1Ev();
extern void _ZN8S19517C6D1Ev();
Name_Map name_map_S19517C6[] = {
  NSPAIR(_ZN8S19517C6C1Ev),
  NSPAIR(_ZN8S19517C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19517C4;
extern VTBL_ENTRY _ZTI8S19517C4[];
extern  VTBL_ENTRY _ZTV8S19517C4[];
static Base_Class bases_S19517C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19517C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19517C6[];
extern void _ZN8S19517C42v2Ev();
extern void _ZN8S19517C62v3Ev();
extern void _ZN8S19517C62v4Ev();
extern void _ZN8S19517C62v5Ev();
static  VTBL_ENTRY vtc_S19517C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19517C6[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v5Ev,
};
extern VTBL_ENTRY _ZTV8S19517C6[];
static  VTT_ENTRY vtt_S19517C6[] = {
  {&(_ZTV8S19517C6[4]),  4,8},
  {&(_ZTV8S19517C6[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S19517C6[];
extern  VTBL_ENTRY _ZTV8S19517C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19517C6[];
Class_Descriptor cd_S19517C6 = {  "S19517C6", // class name
  bases_S19517C6, 1,
  &(vtc_S19517C6[0]), // expected_vtbl_contents
  &(vtt_S19517C6[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19517C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19517C6),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19517C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19517C5  : S19517C6 {
  void *s19517c5f0;
  ::S19277C8 s19517c5f1;
  int s19517c5f2;
  void *s19517c5f3;
  int s19517c5f4[2];
  virtual void  v6(); // _ZN8S19517C52v6Ev
  virtual void  v7(); // _ZN8S19517C52v7Ev
  ~S19517C5(); // tgen
  S19517C5(); // tgen
};
//SIG(-1 S19517C5) C1{ BC2{ VBC3{ v3} v4 v5 v6 Fp[3] FC4{} Fp} v1 v2 Fp FC5{ BC6{ BC7{ v7} Fc[5] FC8{ VBC7 v8 v9 v10 Fp[3] FC4 Fp}[2] Fi Fp[7] FC8 FC7 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC7 VBC8 Fi Fp} Fi Fp Fi[2]}


void  S19517C5 ::v6(){vfunc_called(this, "_ZN8S19517C52v6Ev");}
void  S19517C5 ::v7(){vfunc_called(this, "_ZN8S19517C52v7Ev");}
S19517C5 ::~S19517C5(){ note_dtor("S19517C5", this);} // tgen
S19517C5 ::S19517C5(){ note_ctor("S19517C5", this);} // tgen

static void Test_S19517C5()
{
  extern Class_Descriptor cd_S19517C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(56,66)];
    init_test(&cd_S19517C5, buf);
    S19517C5 *dp, &lv = *(dp=new (buf) S19517C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(440,260), "sizeof(S19517C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19517C5)");
    check_base_class_offset(lv, (S19517C4*)(S19517C6*), 0, "S19517C5");
    check_base_class_offset(lv, (S19517C6*), 0, "S19517C5");
    check_field_offset(lv, s19517c5f0, ABISELECT(48,24), "S19517C5.s19517c5f0");
    check_field_offset(lv, s19517c5f1, ABISELECT(56,28), "S19517C5.s19517c5f1");
    check_field_offset(lv, s19517c5f2, ABISELECT(416,244), "S19517C5.s19517c5f2");
    check_field_offset(lv, s19517c5f3, ABISELECT(424,248), "S19517C5.s19517c5f3");
    check_field_offset(lv, s19517c5f4, ABISELECT(432,252), "S19517C5.s19517c5f4");
    test_class_info(&lv, &cd_S19517C5);
    dp->~S19517C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19517C5(Test_S19517C5, "S19517C5", ABISELECT(440,260));

#else // __cplusplus

extern void _ZN8S19517C5C1Ev();
extern void _ZN8S19517C5D1Ev();
Name_Map name_map_S19517C5[] = {
  NSPAIR(_ZN8S19517C5C1Ev),
  NSPAIR(_ZN8S19517C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19517C4;
extern VTBL_ENTRY _ZTI8S19517C4[];
extern  VTBL_ENTRY _ZTV8S19517C4[];
extern Class_Descriptor cd_S19517C6;
extern VTBL_ENTRY _ZTI8S19517C6[];
extern  VTBL_ENTRY _ZTV8S19517C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19517C6[];
static Base_Class bases_S19517C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19517C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19517C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19517C5[];
extern void _ZN8S19517C42v2Ev();
extern void _ZN8S19517C62v3Ev();
extern void _ZN8S19517C62v4Ev();
extern void _ZN8S19517C62v5Ev();
extern void _ZN8S19517C52v6Ev();
extern void _ZN8S19517C52v7Ev();
static  VTBL_ENTRY vtc_S19517C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19517C5[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v7Ev,
};
extern VTBL_ENTRY _ZTV8S19517C5[];
extern void _ZN8S19517C42v2Ev();
extern void _ZN8S19517C62v3Ev();
extern void _ZN8S19517C62v4Ev();
extern void _ZN8S19517C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C6__8S19517C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19517C6[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v5Ev,
};
static  VTT_ENTRY vtt_S19517C5[] = {
  {&(_ZTV8S19517C5[4]),  4,10},
  {&(_tg__ZTV8S19517C6__8S19517C5[4]),  4,8},
  {&(_tg__ZTV8S19517C6__8S19517C5[4]),  4,8},
  {&(_ZTV8S19517C5[4]),  4,10},
};
extern VTBL_ENTRY _ZTI8S19517C5[];
extern  VTBL_ENTRY _ZTV8S19517C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19517C5[];
Class_Descriptor cd_S19517C5 = {  "S19517C5", // class name
  bases_S19517C5, 2,
  &(vtc_S19517C5[0]), // expected_vtbl_contents
  &(vtt_S19517C5[0]), // expected_vtt_contents
  ABISELECT(440,260), // object size
  NSPAIRA(_ZTI8S19517C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19517C5),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19517C5),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19517C9  : S19517C4 {
  char s19517c9f0[5];
  ::S19517C6 s19517c9f1[2];
  int s19517c9f2;
  void *s19517c9f3[7];
  ::S19517C6 s19517c9f4;
  ::S19517C4 s19517c9f5;
  char s19517c9f6;
  int s19517c9f7;
  short s19517c9f8[5];
  int s19517c9f9[8];
  __tsi64 s19517c9f10;
  char s19517c9f11:8;
  ~S19517C9(); // tgen
  S19517C9(); // tgen
};
//SIG(-1 S19517C9) C1{ BC2{ v1} Fc[5] FC3{ VBC2 v2 v3 v4 Fp[3] FC4{} Fp}[2] Fi Fp[7] FC3 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}


S19517C9 ::~S19517C9(){ note_dtor("S19517C9", this);} // tgen
S19517C9 ::S19517C9(){ note_ctor("S19517C9", this);} // tgen

static void Test_S19517C9()
{
  extern Class_Descriptor cd_S19517C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,47)];
    init_test(&cd_S19517C9, buf);
    S19517C9 *dp, &lv = *(dp=new (buf) S19517C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,184), "sizeof(S19517C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19517C9)");
    check_base_class_offset(lv, (S19517C4*), 0, "S19517C9");
    check_field_offset(lv, s19517c9f0, ABISELECT(8,4), "S19517C9.s19517c9f0");
    check_field_offset(lv, s19517c9f1, ABISELECT(16,12), "S19517C9.s19517c9f1");
    check_field_offset(lv, s19517c9f2, ABISELECT(112,60), "S19517C9.s19517c9f2");
    check_field_offset(lv, s19517c9f3, ABISELECT(120,64), "S19517C9.s19517c9f3");
    check_field_offset(lv, s19517c9f4, ABISELECT(176,92), "S19517C9.s19517c9f4");
    check_field_offset(lv, s19517c9f5, ABISELECT(224,116), "S19517C9.s19517c9f5");
    check_field_offset(lv, s19517c9f6, ABISELECT(232,120), "S19517C9.s19517c9f6");
    check_field_offset(lv, s19517c9f7, ABISELECT(236,124), "S19517C9.s19517c9f7");
    check_field_offset(lv, s19517c9f8, ABISELECT(240,128), "S19517C9.s19517c9f8");
    check_field_offset(lv, s19517c9f9, ABISELECT(252,140), "S19517C9.s19517c9f9");
    check_field_offset(lv, s19517c9f10, ABISELECT(288,172), "S19517C9.s19517c9f10");
    set_bf_and_test(lv, s19517c9f11, ABISELECT(296,180), 0, 8, 1, "S19517C9");
    set_bf_and_test(lv, s19517c9f11, ABISELECT(296,180), 0, 8, hide_sll(1LL<<7), "S19517C9");
    test_class_info(&lv, &cd_S19517C9);
    dp->~S19517C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19517C9(Test_S19517C9, "S19517C9", ABISELECT(304,184));

#else // __cplusplus

extern void _ZN8S19517C9C1Ev();
extern void _ZN8S19517C9D1Ev();
Name_Map name_map_S19517C9[] = {
  NSPAIR(_ZN8S19517C9C1Ev),
  NSPAIR(_ZN8S19517C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19517C4;
extern VTBL_ENTRY _ZTI8S19517C4[];
extern  VTBL_ENTRY _ZTV8S19517C4[];
static Base_Class bases_S19517C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19517C4,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19517C9[];
extern void _ZN8S19517C42v2Ev();
static  VTBL_ENTRY vtc_S19517C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19517C9[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S19517C9[];
extern  VTBL_ENTRY _ZTV8S19517C9[];
Class_Descriptor cd_S19517C9 = {  "S19517C9", // class name
  bases_S19517C9, 1,
  &(vtc_S19517C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,184), // object size
  NSPAIRA(_ZTI8S19517C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19517C9),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19517C11  : S19517C4 {
  char s19517c11f0;
  __tsi64 s19517c11f1;
  int s19517c11f2[3];
  ::S19517C9 s19517c11f3;
  virtual void  v10(); // _ZN9S19517C113v10Ev
  ~S19517C11(); // tgen
  S19517C11(); // tgen
};
//SIG(-1 S19517C11) C1{ BC2{ v2} v1 Fc FL Fi[3] FC3{ BC2 Fc[5] FC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}}


void  S19517C11 ::v10(){vfunc_called(this, "_ZN9S19517C113v10Ev");}
S19517C11 ::~S19517C11(){ note_dtor("S19517C11", this);} // tgen
S19517C11 ::S19517C11(){ note_ctor("S19517C11", this);} // tgen

static void Test_S19517C11()
{
  extern Class_Descriptor cd_S19517C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,54)];
    init_test(&cd_S19517C11, buf);
    S19517C11 *dp, &lv = *(dp=new (buf) S19517C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,212), "sizeof(S19517C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19517C11)");
    check_base_class_offset(lv, (S19517C4*), 0, "S19517C11");
    check_field_offset(lv, s19517c11f0, ABISELECT(8,4), "S19517C11.s19517c11f0");
    check_field_offset(lv, s19517c11f1, ABISELECT(16,8), "S19517C11.s19517c11f1");
    check_field_offset(lv, s19517c11f2, ABISELECT(24,16), "S19517C11.s19517c11f2");
    check_field_offset(lv, s19517c11f3, ABISELECT(40,28), "S19517C11.s19517c11f3");
    test_class_info(&lv, &cd_S19517C11);
    dp->~S19517C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19517C11(Test_S19517C11, "S19517C11", ABISELECT(344,212));

#else // __cplusplus

extern void _ZN9S19517C11C1Ev();
extern void _ZN9S19517C11D1Ev();
Name_Map name_map_S19517C11[] = {
  NSPAIR(_ZN9S19517C11C1Ev),
  NSPAIR(_ZN9S19517C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19517C4;
extern VTBL_ENTRY _ZTI8S19517C4[];
extern  VTBL_ENTRY _ZTV8S19517C4[];
static Base_Class bases_S19517C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19517C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19517C11[];
extern void _ZN8S19517C42v2Ev();
extern void _ZN9S19517C113v10Ev();
static  VTBL_ENTRY vtc_S19517C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19517C11[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
  (VTBL_ENTRY)&_ZN9S19517C113v10Ev,
};
extern VTBL_ENTRY _ZTI9S19517C11[];
extern  VTBL_ENTRY _ZTV9S19517C11[];
Class_Descriptor cd_S19517C11 = {  "S19517C11", // class name
  bases_S19517C11, 1,
  &(vtc_S19517C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,212), // object size
  NSPAIRA(_ZTI9S19517C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19517C11),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19517C10  : virtual S19517C9 {
  void *s19517c10f0;
  __tsi64 s19517c10f1;
  void *s19517c10f2[6];
  ::S19517C4 s19517c10f3;
  ::S19517C11 s19517c10f4;
  void *s19517c10f5;
  int s19517c10f6;
  virtual void  v8(); // _ZN9S19517C102v8Ev
  ~S19517C10(); // tgen
  S19517C10(); // tgen
};
//SIG(-1 S19517C10) C1{ VBC2{ BC3{ v2} Fc[5] FC4{ VBC3 v4 v5 v6 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v1 Fp FL Fp[6] FC3 FC6{ BC3 v3 Fc FL Fi[3] FC2} Fp Fi}


void  S19517C10 ::v8(){vfunc_called(this, "_ZN9S19517C102v8Ev");}
S19517C10 ::~S19517C10(){ note_dtor("S19517C10", this);} // tgen
S19517C10 ::S19517C10(){ note_ctor("S19517C10", this);} // tgen

static void Test_S19517C10()
{
  extern Class_Descriptor cd_S19517C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(94,113)];
    init_test(&cd_S19517C10, buf);
    S19517C10 *dp, &lv = *(dp=new (buf) S19517C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(744,448), "sizeof(S19517C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19517C10)");
    check_base_class_offset(lv, (S19517C4*)(S19517C9*), ABISELECT(440,264), "S19517C10");
    check_base_class_offset(lv, (S19517C9*), ABISELECT(440,264), "S19517C10");
    check_field_offset(lv, s19517c10f0, ABISELECT(8,4), "S19517C10.s19517c10f0");
    check_field_offset(lv, s19517c10f1, ABISELECT(16,8), "S19517C10.s19517c10f1");
    check_field_offset(lv, s19517c10f2, ABISELECT(24,16), "S19517C10.s19517c10f2");
    check_field_offset(lv, s19517c10f3, ABISELECT(72,40), "S19517C10.s19517c10f3");
    check_field_offset(lv, s19517c10f4, ABISELECT(80,44), "S19517C10.s19517c10f4");
    check_field_offset(lv, s19517c10f5, ABISELECT(424,256), "S19517C10.s19517c10f5");
    check_field_offset(lv, s19517c10f6, ABISELECT(432,260), "S19517C10.s19517c10f6");
    test_class_info(&lv, &cd_S19517C10);
    dp->~S19517C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19517C10(Test_S19517C10, "S19517C10", ABISELECT(744,448));

#else // __cplusplus

extern void _ZN9S19517C10C1Ev();
extern void _ZN9S19517C10D1Ev();
Name_Map name_map_S19517C10[] = {
  NSPAIR(_ZN9S19517C10C1Ev),
  NSPAIR(_ZN9S19517C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19517C4;
extern VTBL_ENTRY _ZTI8S19517C4[];
extern  VTBL_ENTRY _ZTV8S19517C4[];
extern Class_Descriptor cd_S19517C9;
extern VTBL_ENTRY _ZTI8S19517C9[];
extern  VTBL_ENTRY _ZTV8S19517C9[];
static Base_Class bases_S19517C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19517C4,    ABISELECT(440,264), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19517C9,    ABISELECT(440,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19517C10[];
extern void _ZN9S19517C102v8Ev();
extern void _ZN8S19517C42v2Ev();
static  VTBL_ENTRY vtc_S19517C10[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19517C10[0]),
  (VTBL_ENTRY)&_ZN9S19517C102v8Ev,
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19517C10[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
};
extern VTBL_ENTRY _ZTV9S19517C10[];
static  VTT_ENTRY vtt_S19517C10[] = {
  {&(_ZTV9S19517C10[3]),  3,8},
  {&(_ZTV9S19517C10[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S19517C10[];
extern  VTBL_ENTRY _ZTV9S19517C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19517C10[];
Class_Descriptor cd_S19517C10 = {  "S19517C10", // class name
  bases_S19517C10, 2,
  &(vtc_S19517C10[0]), // expected_vtbl_contents
  &(vtt_S19517C10[0]), // expected_vtt_contents
  ABISELECT(744,448), // object size
  NSPAIRA(_ZTI9S19517C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19517C10),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19517C10),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19517C3  : virtual S19517C4 , S19517C5 , virtual S19517C10 {
  void *s19517c3f0[2];
  int s19517c3f1[9];
  ::S19517C11 s19517c3f2;
  ::S19517C4 s19517c3f3[9];
  __tsi64 s19517c3f4;
  long double s19517c3f5;
  void *s19517c3f6;
  __tsi64 s19517c3f7;
  long s19517c3f8;
  __tsi64 s19517c3f9;
  virtual  ~S19517C3(); // _ZN8S19517C3D2Ev
  virtual void  v9(); // _ZN8S19517C32v9Ev
  S19517C3(); // tgen
};
//SIG(-1 S19517C3) C1{ VBC2{ v2} BC3{ BC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp} v6 v7 Fp FC6{ BC7{ BC8{ v9} Fc[5] FC9{ VBC8 v10 v11 v12 Fp[3] FC5 Fp}[2] Fi Fp[7] FC9 FC8 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC8 VBC9 Fi Fp} Fi Fp Fi[2]} VBC10{ VBC11{ BC2 Fc[5] FC4[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC2 FC12{ BC2 v13 Fc FL Fi[3] FC11} Fp Fi} vd v1 Fp[2] Fi[9] FC12 FC2[9] FL FD Fp FL Fl FL}


 S19517C3 ::~S19517C3(){ note_dtor("S19517C3", this);}
void  S19517C3 ::v9(){vfunc_called(this, "_ZN8S19517C32v9Ev");}
S19517C3 ::S19517C3(){ note_ctor("S19517C3", this);} // tgen

static void Test_S19517C3()
{
  extern Class_Descriptor cd_S19517C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(109,262)];
    init_test(&cd_S19517C3, buf);
    S19517C3 *dp, &lv = *(dp=new (buf) S19517C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1728,1044), "sizeof(S19517C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19517C3)");
    /*is_ambiguous_... S19517C3::S19517C4 */ AMB_check_base_class_offset(lv, (S19517C4*), 0, "S19517C3");
    check_base_class_offset(lv, (S19517C4*)(S19517C6*)(S19517C5*), 0, "S19517C3");
    check_base_class_offset(lv, (S19517C6*)(S19517C5*), 0, "S19517C3");
    check_base_class_offset(lv, (S19517C5*), 0, "S19517C3");
    check_base_class_offset(lv, (S19517C4*)(S19517C9*), ABISELECT(1416,860), "S19517C3");
    check_base_class_offset(lv, (S19517C9*)(S19517C10*), ABISELECT(1416,860), "S19517C3");
    check_base_class_offset(lv, (S19517C10*), ABISELECT(976,596), "S19517C3");
    check_field_offset(lv, s19517c3f0, ABISELECT(440,260), "S19517C3.s19517c3f0");
    check_field_offset(lv, s19517c3f1, ABISELECT(456,268), "S19517C3.s19517c3f1");
    check_field_offset(lv, s19517c3f2, ABISELECT(496,304), "S19517C3.s19517c3f2");
    check_field_offset(lv, s19517c3f3, ABISELECT(840,516), "S19517C3.s19517c3f3");
    check_field_offset(lv, s19517c3f4, ABISELECT(912,552), "S19517C3.s19517c3f4");
    check_field_offset(lv, s19517c3f5, ABISELECT(928,560), "S19517C3.s19517c3f5");
    check_field_offset(lv, s19517c3f6, ABISELECT(944,572), "S19517C3.s19517c3f6");
    check_field_offset(lv, s19517c3f7, ABISELECT(952,576), "S19517C3.s19517c3f7");
    check_field_offset(lv, s19517c3f8, ABISELECT(960,584), "S19517C3.s19517c3f8");
    check_field_offset(lv, s19517c3f9, ABISELECT(968,588), "S19517C3.s19517c3f9");
    test_class_info(&lv, &cd_S19517C3);
    dp->~S19517C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19517C3(Test_S19517C3, "S19517C3", ABISELECT(1728,1044));

#else // __cplusplus

extern void _ZN8S19517C3C1Ev();
extern void _ZN8S19517C3D2Ev();
Name_Map name_map_S19517C3[] = {
  NSPAIR(_ZN8S19517C3C1Ev),
  NSPAIR(_ZN8S19517C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19517C4;
extern VTBL_ENTRY _ZTI8S19517C4[];
extern  VTBL_ENTRY _ZTV8S19517C4[];
extern Class_Descriptor cd_S19517C6;
extern VTBL_ENTRY _ZTI8S19517C6[];
extern  VTBL_ENTRY _ZTV8S19517C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19517C6[];
extern Class_Descriptor cd_S19517C5;
extern VTBL_ENTRY _ZTI8S19517C5[];
extern  VTBL_ENTRY _ZTV8S19517C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19517C5[];
extern Class_Descriptor cd_S19517C4;
extern VTBL_ENTRY _ZTI8S19517C4[];
extern  VTBL_ENTRY _ZTV8S19517C4[];
extern Class_Descriptor cd_S19517C9;
extern VTBL_ENTRY _ZTI8S19517C9[];
extern  VTBL_ENTRY _ZTV8S19517C9[];
extern Class_Descriptor cd_S19517C10;
extern VTBL_ENTRY _ZTI9S19517C10[];
extern  VTBL_ENTRY _ZTV9S19517C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19517C10[];
static Base_Class bases_S19517C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19517C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19517C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19517C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19517C4,    ABISELECT(1416,860), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19517C9,    ABISELECT(1416,860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19517C10,    ABISELECT(976,596), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19517C3[];
extern void _ZN8S19517C42v2Ev();
extern void _ZN8S19517C62v3Ev();
extern void _ZN8S19517C62v4Ev();
extern void _ZN8S19517C62v5Ev();
extern void _ZN8S19517C52v6Ev();
extern void _ZN8S19517C52v7Ev();
extern void _ZN8S19517C3D1Ev();
extern void _ZN8S19517C3D0Ev();
extern void _ZN8S19517C32v9Ev();
extern void _ZN9S19517C102v8Ev();
extern void _ZN8S19517C42v2Ev();
static  VTBL_ENTRY vtc_S19517C3[] = {
  ABISELECT(1416,860),
  ABISELECT(976,596),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19517C3[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19517C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19517C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19517C32v9Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S19517C3[0]),
  (VTBL_ENTRY)&_ZN9S19517C102v8Ev,
  0,
  ABISELECT(-1416,-860),
  (VTBL_ENTRY)&(_ZTI8S19517C3[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S19517C3[];
extern void _ZN8S19517C42v2Ev();
extern void _ZN8S19517C62v3Ev();
extern void _ZN8S19517C62v4Ev();
extern void _ZN8S19517C62v5Ev();
extern void _ZN8S19517C52v6Ev();
extern void _ZN8S19517C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C5__8S19517C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19517C5[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v7Ev,
};
extern void _ZN8S19517C42v2Ev();
extern void _ZN8S19517C62v3Ev();
extern void _ZN8S19517C62v4Ev();
extern void _ZN8S19517C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C68S19517C5__8S19517C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19517C6[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v5Ev,
};
extern void _ZN9S19517C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19517C10__8S19517C3[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19517C10[0]),
  (VTBL_ENTRY)&_ZN9S19517C102v8Ev,
};
extern void _ZN8S19517C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C48S19517C9__9S19517C10__8S19517C3[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19517C10[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
};
static  VTT_ENTRY vtt_S19517C3[] = {
  {&(_ZTV8S19517C3[6]),  6,24},
  {&(_tg__ZTV8S19517C5__8S19517C3[4]),  4,10},
  {&(_tg__ZTV8S19517C68S19517C5__8S19517C3[4]),  4,8},
  {&(_tg__ZTV8S19517C68S19517C5__8S19517C3[4]),  4,8},
  {&(_tg__ZTV8S19517C5__8S19517C3[4]),  4,10},
  {&(_ZTV8S19517C3[6]),  6,24},
  {&(_ZTV8S19517C3[19]),  19,24},
  {&(_ZTV8S19517C3[23]),  23,24},
  {&(_tg__ZTV9S19517C10__8S19517C3[3]),  3,4},
  {&(_tg__ZTV8S19517C48S19517C9__9S19517C10__8S19517C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19517C3[];
extern  VTBL_ENTRY _ZTV8S19517C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19517C3[];
Class_Descriptor cd_S19517C3 = {  "S19517C3", // class name
  bases_S19517C3, 6,
  &(vtc_S19517C3[0]), // expected_vtbl_contents
  &(vtt_S19517C3[0]), // expected_vtt_contents
  ABISELECT(1728,1044), // object size
  NSPAIRA(_ZTI8S19517C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19517C3),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19517C3),10, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19517C2  : S19517C3 , S19517C11 {
  void *s19517c2f0;
  long s19517c2f1[2];
  __tsi64 s19517c2f2;
  int s19517c2f3;
  __tsi64 s19517c2f4;
  virtual  ~S19517C2(); // _ZN8S19517C2D2Ev
  virtual void  v11(); // _ZN8S19517C23v11Ev
  S19517C2(); // tgen
};
//SIG(-1 S19517C2) C1{ BC2{ VBC3{ v2} BC4{ BC5{ VBC3 v3 v4 v5 Fp[3] FC6{} Fp} v6 v7 Fp FC7{ BC8{ BC9{ v11} Fc[5] FC10{ VBC9 v12 v13 v14 Fp[3] FC6 Fp}[2] Fi Fp[7] FC10 FC9 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC9 VBC10 Fi Fp} Fi Fp Fi[2]} VBC11{ VBC12{ BC3 Fc[5] FC5[2] Fi Fp[7] FC5 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC3 FC13{ BC3 v10 Fc FL Fi[3] FC12} Fp Fi} vd v9 Fp[2] Fi[9] FC13 FC3[9] FL FD Fp FL Fl FL} BC13 vd v1 Fp Fl[2] FL Fi FL}


 S19517C2 ::~S19517C2(){ note_dtor("S19517C2", this);}
void  S19517C2 ::v11(){vfunc_called(this, "_ZN8S19517C23v11Ev");}
S19517C2 ::S19517C2(){ note_ctor("S19517C2", this);} // tgen

static void Test_S19517C2()
{
  extern Class_Descriptor cd_S19517C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(133,323)];
    init_test(&cd_S19517C2, buf);
    S19517C2 *dp, &lv = *(dp=new (buf) S19517C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2112,1288), "sizeof(S19517C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19517C2)");
    /*is_ambiguous_... S19517C3::S19517C4 */ AMB_check_base_class_offset(lv, (S19517C4*)(S19517C3*), 0, "S19517C2");
    check_base_class_offset(lv, (S19517C4*)(S19517C6*)(S19517C5*)(S19517C3*), 0, "S19517C2");
    check_base_class_offset(lv, (S19517C6*)(S19517C5*)(S19517C3*), 0, "S19517C2");
    check_base_class_offset(lv, (S19517C5*)(S19517C3*), 0, "S19517C2");
    check_base_class_offset(lv, (S19517C4*)(S19517C9*), ABISELECT(1808,1104), "S19517C2");
    check_base_class_offset(lv, (S19517C9*)(S19517C10*), ABISELECT(1808,1104), "S19517C2");
    check_base_class_offset(lv, (S19517C10*)(S19517C3*), ABISELECT(1368,840), "S19517C2");
    check_base_class_offset(lv, (S19517C3*), 0, "S19517C2");
    check_base_class_offset(lv, (S19517C4*)(S19517C11*), ABISELECT(976,596), "S19517C2");
    check_base_class_offset(lv, (S19517C11*), ABISELECT(976,596), "S19517C2");
    check_field_offset(lv, s19517c2f0, ABISELECT(1320,808), "S19517C2.s19517c2f0");
    check_field_offset(lv, s19517c2f1, ABISELECT(1328,812), "S19517C2.s19517c2f1");
    check_field_offset(lv, s19517c2f2, ABISELECT(1344,820), "S19517C2.s19517c2f2");
    check_field_offset(lv, s19517c2f3, ABISELECT(1352,828), "S19517C2.s19517c2f3");
    check_field_offset(lv, s19517c2f4, ABISELECT(1360,832), "S19517C2.s19517c2f4");
    test_class_info(&lv, &cd_S19517C2);
    dp->~S19517C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19517C2(Test_S19517C2, "S19517C2", ABISELECT(2112,1288));

#else // __cplusplus

extern void _ZN8S19517C2C1Ev();
extern void _ZN8S19517C2D2Ev();
Name_Map name_map_S19517C2[] = {
  NSPAIR(_ZN8S19517C2C1Ev),
  NSPAIR(_ZN8S19517C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19517C4;
extern VTBL_ENTRY _ZTI8S19517C4[];
extern  VTBL_ENTRY _ZTV8S19517C4[];
extern Class_Descriptor cd_S19517C6;
extern VTBL_ENTRY _ZTI8S19517C6[];
extern  VTBL_ENTRY _ZTV8S19517C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19517C6[];
extern Class_Descriptor cd_S19517C5;
extern VTBL_ENTRY _ZTI8S19517C5[];
extern  VTBL_ENTRY _ZTV8S19517C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19517C5[];
extern Class_Descriptor cd_S19517C4;
extern VTBL_ENTRY _ZTI8S19517C4[];
extern  VTBL_ENTRY _ZTV8S19517C4[];
extern Class_Descriptor cd_S19517C9;
extern VTBL_ENTRY _ZTI8S19517C9[];
extern  VTBL_ENTRY _ZTV8S19517C9[];
extern Class_Descriptor cd_S19517C10;
extern VTBL_ENTRY _ZTI9S19517C10[];
extern  VTBL_ENTRY _ZTV9S19517C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19517C10[];
extern Class_Descriptor cd_S19517C3;
extern VTBL_ENTRY _ZTI8S19517C3[];
extern  VTBL_ENTRY _ZTV8S19517C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19517C3[];
extern Class_Descriptor cd_S19517C4;
extern VTBL_ENTRY _ZTI8S19517C4[];
extern  VTBL_ENTRY _ZTV8S19517C4[];
extern Class_Descriptor cd_S19517C11;
extern VTBL_ENTRY _ZTI9S19517C11[];
extern  VTBL_ENTRY _ZTV9S19517C11[];
static Base_Class bases_S19517C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19517C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19517C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19517C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19517C4,    ABISELECT(1808,1104), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19517C9,    ABISELECT(1808,1104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19517C10,    ABISELECT(1368,840), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19517C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19517C4,    ABISELECT(976,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19517C11,    ABISELECT(976,596), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19517C2[];
extern void _ZN8S19517C42v2Ev();
extern void _ZN8S19517C62v3Ev();
extern void _ZN8S19517C62v4Ev();
extern void _ZN8S19517C62v5Ev();
extern void _ZN8S19517C52v6Ev();
extern void _ZN8S19517C52v7Ev();
extern void _ZN8S19517C2D1Ev();
extern void _ZN8S19517C2D0Ev();
extern void _ZN8S19517C32v9Ev();
extern void _ZN8S19517C23v11Ev();
extern void _ZN8S19517C42v2Ev();
extern void _ZN9S19517C113v10Ev();
extern void _ZN9S19517C102v8Ev();
extern void _ZN8S19517C42v2Ev();
static  VTBL_ENTRY vtc_S19517C2[] = {
  ABISELECT(1808,1104),
  ABISELECT(1368,840),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19517C2[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19517C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19517C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19517C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19517C23v11Ev,
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S19517C2[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
  (VTBL_ENTRY)&_ZN9S19517C113v10Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-1368,-840),
  (VTBL_ENTRY)&(_ZTI8S19517C2[0]),
  (VTBL_ENTRY)&_ZN9S19517C102v8Ev,
  0,
  ABISELECT(-1808,-1104),
  (VTBL_ENTRY)&(_ZTI8S19517C2[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S19517C2[];
extern void _ZN8S19517C42v2Ev();
extern void _ZN8S19517C62v3Ev();
extern void _ZN8S19517C62v4Ev();
extern void _ZN8S19517C62v5Ev();
extern void _ZN8S19517C52v6Ev();
extern void _ZN8S19517C52v7Ev();
extern void _ZN8S19517C3D1Ev();
extern void _ZN8S19517C3D0Ev();
extern void _ZN8S19517C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C3__8S19517C2[] = {
  ABISELECT(1808,1104),
  ABISELECT(1368,840),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19517C3[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19517C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19517C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19517C32v9Ev,
};
extern void _ZN8S19517C42v2Ev();
extern void _ZN8S19517C62v3Ev();
extern void _ZN8S19517C62v4Ev();
extern void _ZN8S19517C62v5Ev();
extern void _ZN8S19517C52v6Ev();
extern void _ZN8S19517C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C58S19517C3__8S19517C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19517C5[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v7Ev,
};
extern void _ZN8S19517C42v2Ev();
extern void _ZN8S19517C62v3Ev();
extern void _ZN8S19517C62v4Ev();
extern void _ZN8S19517C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C68S19517C58S19517C3__8S19517C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19517C6[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v5Ev,
};
extern void _ZN9S19517C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19517C10__8S19517C3__8S19517C2[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-1368,-840),
  (VTBL_ENTRY)&(_ZTI8S19517C3[0]),
  (VTBL_ENTRY)&_ZN9S19517C102v8Ev,
};
extern void _ZN8S19517C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C48S19517C9__A1__8S19517C3__8S19517C2[] = {
  0,
  ABISELECT(-1808,-1104),
  (VTBL_ENTRY)&(_ZTI8S19517C3[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
};
extern void _ZN9S19517C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19517C10__8S19517C2[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19517C10[0]),
  (VTBL_ENTRY)&_ZN9S19517C102v8Ev,
};
extern void _ZN8S19517C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C48S19517C9__9S19517C10__8S19517C2[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19517C10[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
};
static  VTT_ENTRY vtt_S19517C2[] = {
  {&(_ZTV8S19517C2[6]),  6,29},
  {&(_tg__ZTV8S19517C3__8S19517C2[6]),  6,15},
  {&(_tg__ZTV8S19517C58S19517C3__8S19517C2[4]),  4,10},
  {&(_tg__ZTV8S19517C68S19517C58S19517C3__8S19517C2[4]),  4,8},
  {&(_tg__ZTV8S19517C68S19517C58S19517C3__8S19517C2[4]),  4,8},
  {&(_tg__ZTV8S19517C58S19517C3__8S19517C2[4]),  4,10},
  {&(_tg__ZTV8S19517C3__8S19517C2[6]),  6,15},
  {&(_tg__ZTV9S19517C10__8S19517C3__8S19517C2[4]),  4,5},
  {&(_tg__ZTV8S19517C48S19517C9__A1__8S19517C3__8S19517C2[3]),  3,4},
  {&(_ZTV8S19517C2[6]),  6,29},
  {&(_ZTV8S19517C2[24]),  24,29},
  {&(_ZTV8S19517C2[28]),  28,29},
  {&(_tg__ZTV9S19517C10__8S19517C2[3]),  3,4},
  {&(_tg__ZTV8S19517C48S19517C9__9S19517C10__8S19517C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19517C2[];
extern  VTBL_ENTRY _ZTV8S19517C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19517C2[];
Class_Descriptor cd_S19517C2 = {  "S19517C2", // class name
  bases_S19517C2, 9,
  &(vtc_S19517C2[0]), // expected_vtbl_contents
  &(vtt_S19517C2[0]), // expected_vtt_contents
  ABISELECT(2112,1288), // object size
  NSPAIRA(_ZTI8S19517C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19517C2),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19517C2),14, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19517C1  : virtual S19517C2 {
  int s19517c1f0;
  long double s19517c1f1;
  ::S19277C12_nt s19517c1f2;
  unsigned short s19517c1f3:1;
  int s19517c1f4;
  void *s19517c1f5;
  long double s19517c1f6;
  int s19517c1f7[2];
  ::S19276C19 s19517c1f8;
  long s19517c1f9[10];
  virtual  ~S19517C1(); // _ZN8S19517C1D2Ev
  virtual void  v1(); // _ZN8S19517C12v1Ev
  S19517C1(); // tgen
};
//SIG(1 S19517C1) C1{ VBC2{ BC3{ VBC4{ v2} BC5{ BC6{ VBC4 v3 v4 v5 Fp[3] FC7{} Fp} v6 v7 Fp FC8{ BC9{ BC10{ v20} Fc[5] FC11{ VBC10 v21 v22 v23 Fp[3] FC7 Fp}[2] Fi Fp[7] FC11 FC10 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC10 VBC11 Fi Fp} Fi Fp Fi[2]} VBC12{ VBC13{ BC4 Fc[5] FC6[2] Fi Fp[7] FC6 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC4 FC14{ BC4 v10 Fc FL Fi[3] FC13} Fp Fi} vd v9 Fp[2] Fi[9] FC14 FC4[9] FL FD Fp FL Fl FL} BC14 vd v11 Fp Fl[2] FL Fi FL} vd v1 Fi FD FC15{ vd v12 Fi} Fs:1 Fi Fp FD Fi[2] FC16{ BC17{ BC18{ VBC19{ v14} v15 v16 v17 Fp[3] FC7 Fp} v18 v19 Fp FC20{ BC21{ BC19 Fc[5] FC18[2] Fi Fp[7] FC18 FC19 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC19 VBC18 Fi Fp} Fi Fp Fi[2]} v13 Fs:16 FL Fc Fl[10] Fi[10] FL[4] Fp FU22{ m Fp FL FL Fi:27 Fs:16 Fs Fp}} Fl[10]}


 S19517C1 ::~S19517C1(){ note_dtor("S19517C1", this);}
void  S19517C1 ::v1(){vfunc_called(this, "_ZN8S19517C12v1Ev");}
S19517C1 ::S19517C1(){ note_ctor("S19517C1", this);} // tgen

static void Test_S19517C1()
{
  extern Class_Descriptor cd_S19517C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(183,448)];
    init_test(&cd_S19517C1, buf);
    S19517C1 *dp, &lv = *(dp=new (buf) S19517C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2912,1788), "sizeof(S19517C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19517C1)");
    /*is_ambiguous_... S19517C3::S19517C4 */ AMB_check_base_class_offset(lv, (S19517C4*)(S19517C3*)(S19517C2*), 0, "S19517C1");
    check_base_class_offset(lv, (S19517C4*)(S19517C6*)(S19517C5*)(S19517C3*)(S19517C2*), 0, "S19517C1");
    check_base_class_offset(lv, (S19517C6*)(S19517C5*)(S19517C3*)(S19517C2*), ABISELECT(800,500), "S19517C1");
    check_base_class_offset(lv, (S19517C5*)(S19517C3*)(S19517C2*), ABISELECT(800,500), "S19517C1");
    check_base_class_offset(lv, (S19517C4*)(S19517C9*), ABISELECT(2608,1604), "S19517C1");
    check_base_class_offset(lv, (S19517C9*)(S19517C10*), ABISELECT(2608,1604), "S19517C1");
    check_base_class_offset(lv, (S19517C10*)(S19517C3*)(S19517C2*), ABISELECT(2168,1340), "S19517C1");
    check_base_class_offset(lv, (S19517C3*)(S19517C2*), ABISELECT(800,500), "S19517C1");
    check_base_class_offset(lv, (S19517C4*)(S19517C11*)(S19517C2*), ABISELECT(1776,1096), "S19517C1");
    check_base_class_offset(lv, (S19517C11*)(S19517C2*), ABISELECT(1776,1096), "S19517C1");
    check_base_class_offset(lv, (S19517C2*), ABISELECT(800,500), "S19517C1");
    check_field_offset(lv, s19517c1f0, ABISELECT(8,4), "S19517C1.s19517c1f0");
    check_field_offset(lv, s19517c1f1, ABISELECT(16,8), "S19517C1.s19517c1f1");
    check_field_offset(lv, s19517c1f2, ABISELECT(32,20), "S19517C1.s19517c1f2");
    set_bf_and_test(lv, s19517c1f3, ABISELECT(48,28), 0, 1, 1, "S19517C1");
    check_field_offset(lv, s19517c1f4, ABISELECT(52,32), "S19517C1.s19517c1f4");
    check_field_offset(lv, s19517c1f5, ABISELECT(56,36), "S19517C1.s19517c1f5");
    check_field_offset(lv, s19517c1f6, ABISELECT(64,40), "S19517C1.s19517c1f6");
    check_field_offset(lv, s19517c1f7, ABISELECT(80,52), "S19517C1.s19517c1f7");
    check_field_offset(lv, s19517c1f8, ABISELECT(88,60), "S19517C1.s19517c1f8");
    check_field_offset(lv, s19517c1f9, ABISELECT(720,460), "S19517C1.s19517c1f9");
    test_class_info(&lv, &cd_S19517C1);
    dp->~S19517C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19517C1(Test_S19517C1, "S19517C1", ABISELECT(2912,1788));

#else // __cplusplus

extern void _ZN8S19517C1C1Ev();
extern void _ZN8S19517C1D2Ev();
Name_Map name_map_S19517C1[] = {
  NSPAIR(_ZN8S19517C1C1Ev),
  NSPAIR(_ZN8S19517C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19517C4;
extern VTBL_ENTRY _ZTI8S19517C4[];
extern  VTBL_ENTRY _ZTV8S19517C4[];
extern Class_Descriptor cd_S19517C6;
extern VTBL_ENTRY _ZTI8S19517C6[];
extern  VTBL_ENTRY _ZTV8S19517C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19517C6[];
extern Class_Descriptor cd_S19517C5;
extern VTBL_ENTRY _ZTI8S19517C5[];
extern  VTBL_ENTRY _ZTV8S19517C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19517C5[];
extern Class_Descriptor cd_S19517C4;
extern VTBL_ENTRY _ZTI8S19517C4[];
extern  VTBL_ENTRY _ZTV8S19517C4[];
extern Class_Descriptor cd_S19517C9;
extern VTBL_ENTRY _ZTI8S19517C9[];
extern  VTBL_ENTRY _ZTV8S19517C9[];
extern Class_Descriptor cd_S19517C10;
extern VTBL_ENTRY _ZTI9S19517C10[];
extern  VTBL_ENTRY _ZTV9S19517C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19517C10[];
extern Class_Descriptor cd_S19517C3;
extern VTBL_ENTRY _ZTI8S19517C3[];
extern  VTBL_ENTRY _ZTV8S19517C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19517C3[];
extern Class_Descriptor cd_S19517C4;
extern VTBL_ENTRY _ZTI8S19517C4[];
extern  VTBL_ENTRY _ZTV8S19517C4[];
extern Class_Descriptor cd_S19517C11;
extern VTBL_ENTRY _ZTI9S19517C11[];
extern  VTBL_ENTRY _ZTV9S19517C11[];
extern Class_Descriptor cd_S19517C2;
extern VTBL_ENTRY _ZTI8S19517C2[];
extern  VTBL_ENTRY _ZTV8S19517C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19517C2[];
static Base_Class bases_S19517C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19517C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19517C6,    ABISELECT(800,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19517C5,    ABISELECT(800,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19517C4,    ABISELECT(2608,1604), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19517C9,    ABISELECT(2608,1604), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19517C10,    ABISELECT(2168,1340), //bcp->offset
    40, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19517C3,    ABISELECT(800,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19517C4,    ABISELECT(1776,1096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19517C11,    ABISELECT(1776,1096), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19517C2,    ABISELECT(800,500), //bcp->offset
    11, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19517C1[];
extern void _ZN8S19517C42v2Ev();
extern void _ZN8S19517C1D1Ev();
extern void _ZN8S19517C1D0Ev();
extern void _ZN8S19517C12v1Ev();
extern void _ZN8S19517C42v2Ev();
extern void _ZN8S19517C62v3Ev();
extern void _ZN8S19517C62v4Ev();
extern void _ZN8S19517C62v5Ev();
extern void _ZN8S19517C52v6Ev();
extern void _ZN8S19517C52v7Ev();
extern void ABISELECT(_ZTv0_n96_N8S19517C1D1Ev,_ZTv0_n48_N8S19517C1D1Ev)();
extern void ABISELECT(_ZThn800_N8S19517C1D1Ev,_ZThn500_N8S19517C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19517C1D0Ev,_ZTv0_n48_N8S19517C1D0Ev)();
extern void ABISELECT(_ZThn800_N8S19517C1D0Ev,_ZThn500_N8S19517C1D0Ev)() __attribute__((weak));
extern void _ZN8S19517C32v9Ev();
extern void _ZN8S19517C23v11Ev();
extern void _ZN8S19517C42v2Ev();
extern void _ZN9S19517C113v10Ev();
extern void _ZN9S19517C102v8Ev();
extern void _ZN8S19517C42v2Ev();
static  VTBL_ENTRY vtc_S19517C1[] = {
  ABISELECT(2608,1604),
  ABISELECT(2168,1340),
  0,
  ABISELECT(800,500),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19517C1[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19517C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19517C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19517C12v1Ev,
  ABISELECT(976,596),
  0,
  0,
  ABISELECT(-800,-500),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1808,1104),
  ABISELECT(1368,840),
  ABISELECT(-800,-500),
  ABISELECT(-800,-500),
  ABISELECT(-800,-500),
  (VTBL_ENTRY)&(_ZTI8S19517C1[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19517C1D1Ev,_ZTv0_n48_N8S19517C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19517C1D0Ev,_ZTv0_n48_N8S19517C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19517C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19517C23v11Ev,
  ABISELECT(-1776,-1096),
  (VTBL_ENTRY)&(_ZTI8S19517C1[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
  (VTBL_ENTRY)&_ZN9S19517C113v10Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-2168,-1340),
  (VTBL_ENTRY)&(_ZTI8S19517C1[0]),
  (VTBL_ENTRY)&_ZN9S19517C102v8Ev,
  0,
  ABISELECT(-2608,-1604),
  (VTBL_ENTRY)&(_ZTI8S19517C1[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S19517C1[];
extern void _ZN8S19517C42v2Ev();
extern void _ZN8S19517C62v3Ev();
extern void _ZN8S19517C62v4Ev();
extern void _ZN8S19517C62v5Ev();
extern void _ZN8S19517C52v6Ev();
extern void _ZN8S19517C52v7Ev();
extern void _ZN8S19517C2D1Ev();
extern void _ZN8S19517C2D0Ev();
extern void _ZN8S19517C32v9Ev();
extern void _ZN8S19517C23v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C2__8S19517C1[] = {
  ABISELECT(1808,1104),
  ABISELECT(1368,840),
  ABISELECT(-800,-500),
  ABISELECT(-800,-500),
  0,
  (VTBL_ENTRY)&(_ZTI8S19517C2[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19517C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19517C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19517C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19517C23v11Ev,
};
extern void _ZN8S19517C42v2Ev();
extern void _ZN8S19517C62v3Ev();
extern void _ZN8S19517C62v4Ev();
extern void _ZN8S19517C62v5Ev();
extern void _ZN8S19517C52v6Ev();
extern void _ZN8S19517C52v7Ev();
extern void _ZN8S19517C3D1Ev();
extern void _ZN8S19517C3D0Ev();
extern void _ZN8S19517C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C38S19517C2__8S19517C1[] = {
  ABISELECT(1808,1104),
  ABISELECT(1368,840),
  ABISELECT(-800,-500),
  ABISELECT(-800,-500),
  0,
  (VTBL_ENTRY)&(_ZTI8S19517C3[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19517C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19517C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19517C32v9Ev,
};
extern void _ZN8S19517C42v2Ev();
extern void _ZN8S19517C62v3Ev();
extern void _ZN8S19517C62v4Ev();
extern void _ZN8S19517C62v5Ev();
extern void _ZN8S19517C52v6Ev();
extern void _ZN8S19517C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C58S19517C38S19517C2__8S19517C1[] = {
  ABISELECT(-800,-500),
  ABISELECT(-800,-500),
  0,
  (VTBL_ENTRY)&(_ZTI8S19517C5[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19517C52v7Ev,
};
extern void _ZN8S19517C42v2Ev();
extern void _ZN8S19517C62v3Ev();
extern void _ZN8S19517C62v4Ev();
extern void _ZN8S19517C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C68S19517C58S19517C38S19517C2__8S19517C1[] = {
  ABISELECT(-800,-500),
  ABISELECT(-800,-500),
  0,
  (VTBL_ENTRY)&(_ZTI8S19517C6[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19517C62v5Ev,
};
extern void _ZN8S19517C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C4__8S19517C68S19517C58S19517C38S19517C2__8S19517C1[] = {
  0,
  ABISELECT(800,500),
  (VTBL_ENTRY)&(_ZTI8S19517C6[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
};
extern void _ZN8S19517C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C4__8S19517C58S19517C38S19517C2__8S19517C1[] = {
  0,
  ABISELECT(800,500),
  (VTBL_ENTRY)&(_ZTI8S19517C5[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
};
extern void _ZN8S19517C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C4__8S19517C38S19517C2__8S19517C1[] = {
  0,
  ABISELECT(800,500),
  (VTBL_ENTRY)&(_ZTI8S19517C3[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
};
extern void _ZN9S19517C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19517C10__8S19517C38S19517C2__8S19517C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-1368,-840),
  (VTBL_ENTRY)&(_ZTI8S19517C3[0]),
  (VTBL_ENTRY)&_ZN9S19517C102v8Ev,
};
extern void _ZN8S19517C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C48S19517C9__A1__8S19517C38S19517C2__8S19517C1[] = {
  0,
  ABISELECT(-1808,-1104),
  (VTBL_ENTRY)&(_ZTI8S19517C3[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
};
extern void _ZN8S19517C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C4__8S19517C2__8S19517C1[] = {
  0,
  ABISELECT(800,500),
  (VTBL_ENTRY)&(_ZTI8S19517C2[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
};
extern void _ZN9S19517C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19517C10__8S19517C2__8S19517C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-1368,-840),
  (VTBL_ENTRY)&(_ZTI8S19517C2[0]),
  (VTBL_ENTRY)&_ZN9S19517C102v8Ev,
};
extern void _ZN8S19517C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C48S19517C9__A1__8S19517C2__8S19517C1[] = {
  0,
  ABISELECT(-1808,-1104),
  (VTBL_ENTRY)&(_ZTI8S19517C2[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
};
extern void _ZN9S19517C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19517C10__8S19517C1[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19517C10[0]),
  (VTBL_ENTRY)&_ZN9S19517C102v8Ev,
};
extern void _ZN8S19517C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19517C48S19517C9__9S19517C10__8S19517C1[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19517C10[0]),
  (VTBL_ENTRY)&_ZN8S19517C42v2Ev,
};
static  VTT_ENTRY vtt_S19517C1[] = {
  {&(_ZTV8S19517C1[7]),  7,49},
  {&(_ZTV8S19517C1[26]),  26,49},
  {&(_ZTV8S19517C1[7]),  7,49},
  {&(_ZTV8S19517C1[44]),  44,49},
  {&(_ZTV8S19517C1[48]),  48,49},
  {&(_ZTV8S19517C1[38]),  38,49},
  {&(_tg__ZTV8S19517C2__8S19517C1[6]),  6,16},
  {&(_tg__ZTV8S19517C38S19517C2__8S19517C1[6]),  6,15},
  {&(_tg__ZTV8S19517C58S19517C38S19517C2__8S19517C1[4]),  4,10},
  {&(_tg__ZTV8S19517C68S19517C58S19517C38S19517C2__8S19517C1[4]),  4,8},
  {&(_tg__ZTV8S19517C4__8S19517C68S19517C58S19517C38S19517C2__8S19517C1[3]),  3,4},
  {&(_tg__ZTV8S19517C4__8S19517C58S19517C38S19517C2__8S19517C1[3]),  3,4},
  {&(_tg__ZTV8S19517C4__8S19517C38S19517C2__8S19517C1[3]),  3,4},
  {&(_tg__ZTV9S19517C10__8S19517C38S19517C2__8S19517C1[4]),  4,5},
  {&(_tg__ZTV8S19517C48S19517C9__A1__8S19517C38S19517C2__8S19517C1[3]),  3,4},
  {&(_tg__ZTV8S19517C4__8S19517C2__8S19517C1[3]),  3,4},
  {&(_tg__ZTV9S19517C10__8S19517C2__8S19517C1[4]),  4,5},
  {&(_tg__ZTV8S19517C48S19517C9__A1__8S19517C2__8S19517C1[3]),  3,4},
  {&(_tg__ZTV9S19517C10__8S19517C1[3]),  3,4},
  {&(_tg__ZTV8S19517C48S19517C9__9S19517C10__8S19517C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19517C1[];
extern  VTBL_ENTRY _ZTV8S19517C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19517C1[];
static VTBL_ENTRY alt_thunk_names75[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19517C1D0Ev,_ZTv0_n48_N8S19517C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S19517C1D0Ev,_ZThn500_N8S19517C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19517C1D1Ev,_ZTv0_n48_N8S19517C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S19517C1D1Ev,_ZThn500_N8S19517C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19517C1 = {  "S19517C1", // class name
  bases_S19517C1, 10,
  &(vtc_S19517C1[0]), // expected_vtbl_contents
  &(vtt_S19517C1[0]), // expected_vtt_contents
  ABISELECT(2912,1788), // object size
  NSPAIRA(_ZTI8S19517C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19517C1),49, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19517C1),20, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names75,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20113C2  {
  void *s20113c2f0[2];
  char s20113c2f1[10];
  long s20113c2f2;
  long double s20113c2f3;
  __tsi64 s20113c2f4:8;
  void *s20113c2f5;
  long double s20113c2f6;
  virtual void  v3(); // _ZN8S20113C22v3Ev
  ~S20113C2(); // tgen
  S20113C2(); // tgen
};
//SIG(-1 S20113C2) C1{ v1 Fp[2] Fc[10] Fl FD FL:8 Fp FD}


void  S20113C2 ::v3(){vfunc_called(this, "_ZN8S20113C22v3Ev");}
S20113C2 ::~S20113C2(){ note_dtor("S20113C2", this);} // tgen
S20113C2 ::S20113C2(){ note_ctor("S20113C2", this);} // tgen

static void Test_S20113C2()
{
  extern Class_Descriptor cd_S20113C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,16)];
    init_test(&cd_S20113C2, buf);
    S20113C2 *dp, &lv = *(dp=new (buf) S20113C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S20113C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20113C2)");
    check_field_offset(lv, s20113c2f0, ABISELECT(8,4), "S20113C2.s20113c2f0");
    check_field_offset(lv, s20113c2f1, ABISELECT(24,12), "S20113C2.s20113c2f1");
    check_field_offset(lv, s20113c2f2, ABISELECT(40,24), "S20113C2.s20113c2f2");
    check_field_offset(lv, s20113c2f3, ABISELECT(48,28), "S20113C2.s20113c2f3");
    set_bf_and_test(lv, s20113c2f4, ABISELECT(64,40), 0, 8, 1, "S20113C2");
    set_bf_and_test(lv, s20113c2f4, ABISELECT(64,40), 0, 8, hide_sll(1LL<<7), "S20113C2");
    check_field_offset(lv, s20113c2f5, ABISELECT(72,44), "S20113C2.s20113c2f5");
    check_field_offset(lv, s20113c2f6, ABISELECT(80,48), "S20113C2.s20113c2f6");
    test_class_info(&lv, &cd_S20113C2);
    dp->~S20113C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20113C2(Test_S20113C2, "S20113C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN8S20113C2C1Ev();
extern void _ZN8S20113C2D1Ev();
Name_Map name_map_S20113C2[] = {
  NSPAIR(_ZN8S20113C2C1Ev),
  NSPAIR(_ZN8S20113C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20113C2[];
extern void _ZN8S20113C22v3Ev();
static  VTBL_ENTRY vtc_S20113C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C2[0]),
  (VTBL_ENTRY)&_ZN8S20113C22v3Ev,
};
extern VTBL_ENTRY _ZTI8S20113C2[];
extern  VTBL_ENTRY _ZTV8S20113C2[];
Class_Descriptor cd_S20113C2 = {  "S20113C2", // class name
  0,0,//no base classes
  &(vtc_S20113C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI8S20113C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20113C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20113C5  {
  virtual void  v4(); // _ZN8S20113C52v4Ev
  ~S20113C5(); // tgen
  S20113C5(); // tgen
};
//SIG(-1 S20113C5) C1{ v1}


void  S20113C5 ::v4(){vfunc_called(this, "_ZN8S20113C52v4Ev");}
S20113C5 ::~S20113C5(){ note_dtor("S20113C5", this);} // tgen
S20113C5 ::S20113C5(){ note_ctor("S20113C5", this);} // tgen

static void Test_S20113C5()
{
  extern Class_Descriptor cd_S20113C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20113C5, buf);
    S20113C5 *dp, &lv = *(dp=new (buf) S20113C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20113C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20113C5)");
    test_class_info(&lv, &cd_S20113C5);
    dp->~S20113C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20113C5(Test_S20113C5, "S20113C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20113C5C1Ev();
extern void _ZN8S20113C5D1Ev();
Name_Map name_map_S20113C5[] = {
  NSPAIR(_ZN8S20113C5C1Ev),
  NSPAIR(_ZN8S20113C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20113C5[];
extern void _ZN8S20113C52v4Ev();
static  VTBL_ENTRY vtc_S20113C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C5[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
};
extern VTBL_ENTRY _ZTI8S20113C5[];
extern  VTBL_ENTRY _ZTV8S20113C5[];
Class_Descriptor cd_S20113C5 = {  "S20113C5", // class name
  0,0,//no base classes
  &(vtc_S20113C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20113C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20113C5),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20113C7  : virtual S20113C5 {
  void *s20113c7f0[3];
  ::S2489C12_nt s20113c7f1;
  void *s20113c7f2;
  virtual void  v5(); // _ZN8S20113C72v5Ev
  virtual void  v6(); // _ZN8S20113C72v6Ev
  virtual void  v7(); // _ZN8S20113C72v7Ev
  ~S20113C7(); // tgen
  S20113C7(); // tgen
};
//SIG(-1 S20113C7) C1{ VBC2{ v4} v1 v2 v3 Fp[3] FC3{} Fp}


void  S20113C7 ::v5(){vfunc_called(this, "_ZN8S20113C72v5Ev");}
void  S20113C7 ::v6(){vfunc_called(this, "_ZN8S20113C72v6Ev");}
void  S20113C7 ::v7(){vfunc_called(this, "_ZN8S20113C72v7Ev");}
S20113C7 ::~S20113C7(){ note_dtor("S20113C7", this);} // tgen
S20113C7 ::S20113C7(){ note_ctor("S20113C7", this);} // tgen

static void Test_S20113C7()
{
  extern Class_Descriptor cd_S20113C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S20113C7, buf);
    S20113C7 *dp, &lv = *(dp=new (buf) S20113C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20113C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20113C7)");
    check_base_class_offset(lv, (S20113C5*), 0, "S20113C7");
    check_field_offset(lv, s20113c7f0, ABISELECT(8,4), "S20113C7.s20113c7f0");
    check_field_offset(lv, s20113c7f1, ABISELECT(32,16), "S20113C7.s20113c7f1");
    check_field_offset(lv, s20113c7f2, ABISELECT(40,20), "S20113C7.s20113c7f2");
    test_class_info(&lv, &cd_S20113C7);
    dp->~S20113C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20113C7(Test_S20113C7, "S20113C7", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20113C7C1Ev();
extern void _ZN8S20113C7D1Ev();
Name_Map name_map_S20113C7[] = {
  NSPAIR(_ZN8S20113C7C1Ev),
  NSPAIR(_ZN8S20113C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20113C5;
extern VTBL_ENTRY _ZTI8S20113C5[];
extern  VTBL_ENTRY _ZTV8S20113C5[];
static Base_Class bases_S20113C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20113C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20113C7[];
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
static  VTBL_ENTRY vtc_S20113C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C7[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
};
extern VTBL_ENTRY _ZTV8S20113C7[];
static  VTT_ENTRY vtt_S20113C7[] = {
  {&(_ZTV8S20113C7[4]),  4,8},
  {&(_ZTV8S20113C7[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S20113C7[];
extern  VTBL_ENTRY _ZTV8S20113C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20113C7[];
Class_Descriptor cd_S20113C7 = {  "S20113C7", // class name
  bases_S20113C7, 1,
  &(vtc_S20113C7[0]), // expected_vtbl_contents
  &(vtt_S20113C7[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20113C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20113C7),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20113C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20113C6  : S20113C7 {
  void *s20113c6f0;
  ::S19277C8 s20113c6f1;
  int s20113c6f2;
  void *s20113c6f3;
  int s20113c6f4[2];
  virtual void  v8(); // _ZN8S20113C62v8Ev
  virtual void  v9(); // _ZN8S20113C62v9Ev
  ~S20113C6(); // tgen
  S20113C6(); // tgen
};
//SIG(-1 S20113C6) C1{ BC2{ VBC3{ v3} v4 v5 v6 Fp[3] FC4{} Fp} v1 v2 Fp FC5{ BC6{ BC7{ v7} Fc[5] FC8{ VBC7 v8 v9 v10 Fp[3] FC4 Fp}[2] Fi Fp[7] FC8 FC7 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC7 VBC8 Fi Fp} Fi Fp Fi[2]}


void  S20113C6 ::v8(){vfunc_called(this, "_ZN8S20113C62v8Ev");}
void  S20113C6 ::v9(){vfunc_called(this, "_ZN8S20113C62v9Ev");}
S20113C6 ::~S20113C6(){ note_dtor("S20113C6", this);} // tgen
S20113C6 ::S20113C6(){ note_ctor("S20113C6", this);} // tgen

static void Test_S20113C6()
{
  extern Class_Descriptor cd_S20113C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(56,66)];
    init_test(&cd_S20113C6, buf);
    S20113C6 *dp, &lv = *(dp=new (buf) S20113C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(440,260), "sizeof(S20113C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20113C6)");
    check_base_class_offset(lv, (S20113C5*)(S20113C7*), 0, "S20113C6");
    check_base_class_offset(lv, (S20113C7*), 0, "S20113C6");
    check_field_offset(lv, s20113c6f0, ABISELECT(48,24), "S20113C6.s20113c6f0");
    check_field_offset(lv, s20113c6f1, ABISELECT(56,28), "S20113C6.s20113c6f1");
    check_field_offset(lv, s20113c6f2, ABISELECT(416,244), "S20113C6.s20113c6f2");
    check_field_offset(lv, s20113c6f3, ABISELECT(424,248), "S20113C6.s20113c6f3");
    check_field_offset(lv, s20113c6f4, ABISELECT(432,252), "S20113C6.s20113c6f4");
    test_class_info(&lv, &cd_S20113C6);
    dp->~S20113C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20113C6(Test_S20113C6, "S20113C6", ABISELECT(440,260));

#else // __cplusplus

extern void _ZN8S20113C6C1Ev();
extern void _ZN8S20113C6D1Ev();
Name_Map name_map_S20113C6[] = {
  NSPAIR(_ZN8S20113C6C1Ev),
  NSPAIR(_ZN8S20113C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20113C5;
extern VTBL_ENTRY _ZTI8S20113C5[];
extern  VTBL_ENTRY _ZTV8S20113C5[];
extern Class_Descriptor cd_S20113C7;
extern VTBL_ENTRY _ZTI8S20113C7[];
extern  VTBL_ENTRY _ZTV8S20113C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20113C7[];
static Base_Class bases_S20113C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20113C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20113C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20113C6[];
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
extern void _ZN8S20113C62v8Ev();
extern void _ZN8S20113C62v9Ev();
static  VTBL_ENTRY vtc_S20113C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C6[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v9Ev,
};
extern VTBL_ENTRY _ZTV8S20113C6[];
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C7__8S20113C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C7[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
};
static  VTT_ENTRY vtt_S20113C6[] = {
  {&(_ZTV8S20113C6[4]),  4,10},
  {&(_tg__ZTV8S20113C7__8S20113C6[4]),  4,8},
  {&(_tg__ZTV8S20113C7__8S20113C6[4]),  4,8},
  {&(_ZTV8S20113C6[4]),  4,10},
};
extern VTBL_ENTRY _ZTI8S20113C6[];
extern  VTBL_ENTRY _ZTV8S20113C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20113C6[];
Class_Descriptor cd_S20113C6 = {  "S20113C6", // class name
  bases_S20113C6, 2,
  &(vtc_S20113C6[0]), // expected_vtbl_contents
  &(vtt_S20113C6[0]), // expected_vtt_contents
  ABISELECT(440,260), // object size
  NSPAIRA(_ZTI8S20113C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20113C6),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20113C6),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20113C10  : S20113C5 {
  char s20113c10f0[5];
  ::S20113C7 s20113c10f1[2];
  int s20113c10f2;
  void *s20113c10f3[7];
  ::S20113C7 s20113c10f4;
  ::S20113C5 s20113c10f5;
  char s20113c10f6;
  int s20113c10f7;
  short s20113c10f8[5];
  int s20113c10f9[8];
  __tsi64 s20113c10f10;
  char s20113c10f11:8;
  ~S20113C10(); // tgen
  S20113C10(); // tgen
};
//SIG(-1 S20113C10) C1{ BC2{ v1} Fc[5] FC3{ VBC2 v2 v3 v4 Fp[3] FC4{} Fp}[2] Fi Fp[7] FC3 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}


S20113C10 ::~S20113C10(){ note_dtor("S20113C10", this);} // tgen
S20113C10 ::S20113C10(){ note_ctor("S20113C10", this);} // tgen

static void Test_S20113C10()
{
  extern Class_Descriptor cd_S20113C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,47)];
    init_test(&cd_S20113C10, buf);
    S20113C10 *dp, &lv = *(dp=new (buf) S20113C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,184), "sizeof(S20113C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20113C10)");
    check_base_class_offset(lv, (S20113C5*), 0, "S20113C10");
    check_field_offset(lv, s20113c10f0, ABISELECT(8,4), "S20113C10.s20113c10f0");
    check_field_offset(lv, s20113c10f1, ABISELECT(16,12), "S20113C10.s20113c10f1");
    check_field_offset(lv, s20113c10f2, ABISELECT(112,60), "S20113C10.s20113c10f2");
    check_field_offset(lv, s20113c10f3, ABISELECT(120,64), "S20113C10.s20113c10f3");
    check_field_offset(lv, s20113c10f4, ABISELECT(176,92), "S20113C10.s20113c10f4");
    check_field_offset(lv, s20113c10f5, ABISELECT(224,116), "S20113C10.s20113c10f5");
    check_field_offset(lv, s20113c10f6, ABISELECT(232,120), "S20113C10.s20113c10f6");
    check_field_offset(lv, s20113c10f7, ABISELECT(236,124), "S20113C10.s20113c10f7");
    check_field_offset(lv, s20113c10f8, ABISELECT(240,128), "S20113C10.s20113c10f8");
    check_field_offset(lv, s20113c10f9, ABISELECT(252,140), "S20113C10.s20113c10f9");
    check_field_offset(lv, s20113c10f10, ABISELECT(288,172), "S20113C10.s20113c10f10");
    set_bf_and_test(lv, s20113c10f11, ABISELECT(296,180), 0, 8, 1, "S20113C10");
    set_bf_and_test(lv, s20113c10f11, ABISELECT(296,180), 0, 8, hide_sll(1LL<<7), "S20113C10");
    test_class_info(&lv, &cd_S20113C10);
    dp->~S20113C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20113C10(Test_S20113C10, "S20113C10", ABISELECT(304,184));

#else // __cplusplus

extern void _ZN9S20113C10C1Ev();
extern void _ZN9S20113C10D1Ev();
Name_Map name_map_S20113C10[] = {
  NSPAIR(_ZN9S20113C10C1Ev),
  NSPAIR(_ZN9S20113C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20113C5;
extern VTBL_ENTRY _ZTI8S20113C5[];
extern  VTBL_ENTRY _ZTV8S20113C5[];
static Base_Class bases_S20113C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20113C5,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20113C10[];
extern void _ZN8S20113C52v4Ev();
static  VTBL_ENTRY vtc_S20113C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20113C10[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
};
extern VTBL_ENTRY _ZTI9S20113C10[];
extern  VTBL_ENTRY _ZTV9S20113C10[];
Class_Descriptor cd_S20113C10 = {  "S20113C10", // class name
  bases_S20113C10, 1,
  &(vtc_S20113C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,184), // object size
  NSPAIRA(_ZTI9S20113C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20113C10),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20113C12  : S20113C5 {
  char s20113c12f0;
  __tsi64 s20113c12f1;
  int s20113c12f2[3];
  ::S20113C10 s20113c12f3;
  virtual void  v13(); // _ZN9S20113C123v13Ev
  ~S20113C12(); // tgen
  S20113C12(); // tgen
};
//SIG(-1 S20113C12) C1{ BC2{ v2} v1 Fc FL Fi[3] FC3{ BC2 Fc[5] FC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}}


void  S20113C12 ::v13(){vfunc_called(this, "_ZN9S20113C123v13Ev");}
S20113C12 ::~S20113C12(){ note_dtor("S20113C12", this);} // tgen
S20113C12 ::S20113C12(){ note_ctor("S20113C12", this);} // tgen

static void Test_S20113C12()
{
  extern Class_Descriptor cd_S20113C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,54)];
    init_test(&cd_S20113C12, buf);
    S20113C12 *dp, &lv = *(dp=new (buf) S20113C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,212), "sizeof(S20113C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20113C12)");
    check_base_class_offset(lv, (S20113C5*), 0, "S20113C12");
    check_field_offset(lv, s20113c12f0, ABISELECT(8,4), "S20113C12.s20113c12f0");
    check_field_offset(lv, s20113c12f1, ABISELECT(16,8), "S20113C12.s20113c12f1");
    check_field_offset(lv, s20113c12f2, ABISELECT(24,16), "S20113C12.s20113c12f2");
    check_field_offset(lv, s20113c12f3, ABISELECT(40,28), "S20113C12.s20113c12f3");
    test_class_info(&lv, &cd_S20113C12);
    dp->~S20113C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20113C12(Test_S20113C12, "S20113C12", ABISELECT(344,212));

#else // __cplusplus

extern void _ZN9S20113C12C1Ev();
extern void _ZN9S20113C12D1Ev();
Name_Map name_map_S20113C12[] = {
  NSPAIR(_ZN9S20113C12C1Ev),
  NSPAIR(_ZN9S20113C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20113C5;
extern VTBL_ENTRY _ZTI8S20113C5[];
extern  VTBL_ENTRY _ZTV8S20113C5[];
static Base_Class bases_S20113C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20113C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20113C12[];
extern void _ZN8S20113C52v4Ev();
extern void _ZN9S20113C123v13Ev();
static  VTBL_ENTRY vtc_S20113C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20113C12[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN9S20113C123v13Ev,
};
extern VTBL_ENTRY _ZTI9S20113C12[];
extern  VTBL_ENTRY _ZTV9S20113C12[];
Class_Descriptor cd_S20113C12 = {  "S20113C12", // class name
  bases_S20113C12, 1,
  &(vtc_S20113C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,212), // object size
  NSPAIRA(_ZTI9S20113C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20113C12),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20113C11  : virtual S20113C10 {
  void *s20113c11f0;
  __tsi64 s20113c11f1;
  void *s20113c11f2[6];
  ::S20113C5 s20113c11f3;
  ::S20113C12 s20113c11f4;
  void *s20113c11f5;
  int s20113c11f6;
  virtual void  v10(); // _ZN9S20113C113v10Ev
  ~S20113C11(); // tgen
  S20113C11(); // tgen
};
//SIG(-1 S20113C11) C1{ VBC2{ BC3{ v2} Fc[5] FC4{ VBC3 v4 v5 v6 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v1 Fp FL Fp[6] FC3 FC6{ BC3 v3 Fc FL Fi[3] FC2} Fp Fi}


void  S20113C11 ::v10(){vfunc_called(this, "_ZN9S20113C113v10Ev");}
S20113C11 ::~S20113C11(){ note_dtor("S20113C11", this);} // tgen
S20113C11 ::S20113C11(){ note_ctor("S20113C11", this);} // tgen

static void Test_S20113C11()
{
  extern Class_Descriptor cd_S20113C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(94,113)];
    init_test(&cd_S20113C11, buf);
    S20113C11 *dp, &lv = *(dp=new (buf) S20113C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(744,448), "sizeof(S20113C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20113C11)");
    check_base_class_offset(lv, (S20113C5*)(S20113C10*), ABISELECT(440,264), "S20113C11");
    check_base_class_offset(lv, (S20113C10*), ABISELECT(440,264), "S20113C11");
    check_field_offset(lv, s20113c11f0, ABISELECT(8,4), "S20113C11.s20113c11f0");
    check_field_offset(lv, s20113c11f1, ABISELECT(16,8), "S20113C11.s20113c11f1");
    check_field_offset(lv, s20113c11f2, ABISELECT(24,16), "S20113C11.s20113c11f2");
    check_field_offset(lv, s20113c11f3, ABISELECT(72,40), "S20113C11.s20113c11f3");
    check_field_offset(lv, s20113c11f4, ABISELECT(80,44), "S20113C11.s20113c11f4");
    check_field_offset(lv, s20113c11f5, ABISELECT(424,256), "S20113C11.s20113c11f5");
    check_field_offset(lv, s20113c11f6, ABISELECT(432,260), "S20113C11.s20113c11f6");
    test_class_info(&lv, &cd_S20113C11);
    dp->~S20113C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20113C11(Test_S20113C11, "S20113C11", ABISELECT(744,448));

#else // __cplusplus

extern void _ZN9S20113C11C1Ev();
extern void _ZN9S20113C11D1Ev();
Name_Map name_map_S20113C11[] = {
  NSPAIR(_ZN9S20113C11C1Ev),
  NSPAIR(_ZN9S20113C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20113C5;
extern VTBL_ENTRY _ZTI8S20113C5[];
extern  VTBL_ENTRY _ZTV8S20113C5[];
extern Class_Descriptor cd_S20113C10;
extern VTBL_ENTRY _ZTI9S20113C10[];
extern  VTBL_ENTRY _ZTV9S20113C10[];
static Base_Class bases_S20113C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20113C5,    ABISELECT(440,264), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20113C10,    ABISELECT(440,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20113C11[];
extern void _ZN9S20113C113v10Ev();
extern void _ZN8S20113C52v4Ev();
static  VTBL_ENTRY vtc_S20113C11[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S20113C11[0]),
  (VTBL_ENTRY)&_ZN9S20113C113v10Ev,
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S20113C11[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
};
extern VTBL_ENTRY _ZTV9S20113C11[];
static  VTT_ENTRY vtt_S20113C11[] = {
  {&(_ZTV9S20113C11[3]),  3,8},
  {&(_ZTV9S20113C11[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S20113C11[];
extern  VTBL_ENTRY _ZTV9S20113C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20113C11[];
Class_Descriptor cd_S20113C11 = {  "S20113C11", // class name
  bases_S20113C11, 2,
  &(vtc_S20113C11[0]), // expected_vtbl_contents
  &(vtt_S20113C11[0]), // expected_vtt_contents
  ABISELECT(744,448), // object size
  NSPAIRA(_ZTI9S20113C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20113C11),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20113C11),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20113C4  : virtual S20113C5 , S20113C6 , virtual S20113C11 {
  void *s20113c4f0[2];
  int s20113c4f1[9];
  ::S20113C12 s20113c4f2;
  ::S20113C5 s20113c4f3[9];
  __tsi64 s20113c4f4;
  long double s20113c4f5;
  void *s20113c4f6;
  __tsi64 s20113c4f7;
  long s20113c4f8;
  __tsi64 s20113c4f9;
  virtual  ~S20113C4(); // _ZN8S20113C4D2Ev
  virtual void  v11(); // _ZN8S20113C43v11Ev
  S20113C4(); // tgen
};
//SIG(-1 S20113C4) C1{ VBC2{ v2} BC3{ BC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp} v6 v7 Fp FC6{ BC7{ BC8{ v9} Fc[5] FC9{ VBC8 v10 v11 v12 Fp[3] FC5 Fp}[2] Fi Fp[7] FC9 FC8 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC8 VBC9 Fi Fp} Fi Fp Fi[2]} VBC10{ VBC11{ BC2 Fc[5] FC4[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC2 FC12{ BC2 v13 Fc FL Fi[3] FC11} Fp Fi} vd v1 Fp[2] Fi[9] FC12 FC2[9] FL FD Fp FL Fl FL}


 S20113C4 ::~S20113C4(){ note_dtor("S20113C4", this);}
void  S20113C4 ::v11(){vfunc_called(this, "_ZN8S20113C43v11Ev");}
S20113C4 ::S20113C4(){ note_ctor("S20113C4", this);} // tgen

static void Test_S20113C4()
{
  extern Class_Descriptor cd_S20113C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(109,262)];
    init_test(&cd_S20113C4, buf);
    S20113C4 *dp, &lv = *(dp=new (buf) S20113C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1728,1044), "sizeof(S20113C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20113C4)");
    /*is_ambiguous_... S20113C4::S20113C5 */ AMB_check_base_class_offset(lv, (S20113C5*), 0, "S20113C4");
    check_base_class_offset(lv, (S20113C5*)(S20113C7*)(S20113C6*), 0, "S20113C4");
    check_base_class_offset(lv, (S20113C7*)(S20113C6*), 0, "S20113C4");
    check_base_class_offset(lv, (S20113C6*), 0, "S20113C4");
    check_base_class_offset(lv, (S20113C5*)(S20113C10*), ABISELECT(1416,860), "S20113C4");
    check_base_class_offset(lv, (S20113C10*)(S20113C11*), ABISELECT(1416,860), "S20113C4");
    check_base_class_offset(lv, (S20113C11*), ABISELECT(976,596), "S20113C4");
    check_field_offset(lv, s20113c4f0, ABISELECT(440,260), "S20113C4.s20113c4f0");
    check_field_offset(lv, s20113c4f1, ABISELECT(456,268), "S20113C4.s20113c4f1");
    check_field_offset(lv, s20113c4f2, ABISELECT(496,304), "S20113C4.s20113c4f2");
    check_field_offset(lv, s20113c4f3, ABISELECT(840,516), "S20113C4.s20113c4f3");
    check_field_offset(lv, s20113c4f4, ABISELECT(912,552), "S20113C4.s20113c4f4");
    check_field_offset(lv, s20113c4f5, ABISELECT(928,560), "S20113C4.s20113c4f5");
    check_field_offset(lv, s20113c4f6, ABISELECT(944,572), "S20113C4.s20113c4f6");
    check_field_offset(lv, s20113c4f7, ABISELECT(952,576), "S20113C4.s20113c4f7");
    check_field_offset(lv, s20113c4f8, ABISELECT(960,584), "S20113C4.s20113c4f8");
    check_field_offset(lv, s20113c4f9, ABISELECT(968,588), "S20113C4.s20113c4f9");
    test_class_info(&lv, &cd_S20113C4);
    dp->~S20113C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20113C4(Test_S20113C4, "S20113C4", ABISELECT(1728,1044));

#else // __cplusplus

extern void _ZN8S20113C4C1Ev();
extern void _ZN8S20113C4D2Ev();
Name_Map name_map_S20113C4[] = {
  NSPAIR(_ZN8S20113C4C1Ev),
  NSPAIR(_ZN8S20113C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20113C5;
extern VTBL_ENTRY _ZTI8S20113C5[];
extern  VTBL_ENTRY _ZTV8S20113C5[];
extern Class_Descriptor cd_S20113C7;
extern VTBL_ENTRY _ZTI8S20113C7[];
extern  VTBL_ENTRY _ZTV8S20113C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20113C7[];
extern Class_Descriptor cd_S20113C6;
extern VTBL_ENTRY _ZTI8S20113C6[];
extern  VTBL_ENTRY _ZTV8S20113C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20113C6[];
extern Class_Descriptor cd_S20113C5;
extern VTBL_ENTRY _ZTI8S20113C5[];
extern  VTBL_ENTRY _ZTV8S20113C5[];
extern Class_Descriptor cd_S20113C10;
extern VTBL_ENTRY _ZTI9S20113C10[];
extern  VTBL_ENTRY _ZTV9S20113C10[];
extern Class_Descriptor cd_S20113C11;
extern VTBL_ENTRY _ZTI9S20113C11[];
extern  VTBL_ENTRY _ZTV9S20113C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20113C11[];
static Base_Class bases_S20113C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20113C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20113C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20113C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20113C5,    ABISELECT(1416,860), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20113C10,    ABISELECT(1416,860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20113C11,    ABISELECT(976,596), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20113C4[];
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
extern void _ZN8S20113C62v8Ev();
extern void _ZN8S20113C62v9Ev();
extern void _ZN8S20113C4D1Ev();
extern void _ZN8S20113C4D0Ev();
extern void _ZN8S20113C43v11Ev();
extern void _ZN9S20113C113v10Ev();
extern void _ZN8S20113C52v4Ev();
static  VTBL_ENTRY vtc_S20113C4[] = {
  ABISELECT(1416,860),
  ABISELECT(976,596),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C4[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20113C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20113C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20113C43v11Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S20113C4[0]),
  (VTBL_ENTRY)&_ZN9S20113C113v10Ev,
  0,
  ABISELECT(-1416,-860),
  (VTBL_ENTRY)&(_ZTI8S20113C4[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S20113C4[];
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
extern void _ZN8S20113C62v8Ev();
extern void _ZN8S20113C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C6__8S20113C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C6[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v9Ev,
};
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C78S20113C6__8S20113C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C7[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
};
extern void _ZN9S20113C113v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20113C11__8S20113C4[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S20113C11[0]),
  (VTBL_ENTRY)&_ZN9S20113C113v10Ev,
};
extern void _ZN8S20113C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C59S20113C10__9S20113C11__8S20113C4[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S20113C11[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
};
static  VTT_ENTRY vtt_S20113C4[] = {
  {&(_ZTV8S20113C4[6]),  6,24},
  {&(_tg__ZTV8S20113C6__8S20113C4[4]),  4,10},
  {&(_tg__ZTV8S20113C78S20113C6__8S20113C4[4]),  4,8},
  {&(_tg__ZTV8S20113C78S20113C6__8S20113C4[4]),  4,8},
  {&(_tg__ZTV8S20113C6__8S20113C4[4]),  4,10},
  {&(_ZTV8S20113C4[6]),  6,24},
  {&(_ZTV8S20113C4[19]),  19,24},
  {&(_ZTV8S20113C4[23]),  23,24},
  {&(_tg__ZTV9S20113C11__8S20113C4[3]),  3,4},
  {&(_tg__ZTV8S20113C59S20113C10__9S20113C11__8S20113C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20113C4[];
extern  VTBL_ENTRY _ZTV8S20113C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20113C4[];
Class_Descriptor cd_S20113C4 = {  "S20113C4", // class name
  bases_S20113C4, 6,
  &(vtc_S20113C4[0]), // expected_vtbl_contents
  &(vtt_S20113C4[0]), // expected_vtt_contents
  ABISELECT(1728,1044), // object size
  NSPAIRA(_ZTI8S20113C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20113C4),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20113C4),10, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20113C3  : S20113C4 , S20113C6 {
  __tsi64 s20113c3f0;
  int s20113c3f1;
  ::S2489C12_nt s20113c3f2;
  long double s20113c3f3[2];
  short s20113c3f4[3];
  ::S20113C4 s20113c3f5;
  __tsi64 s20113c3f6:2;
  virtual  ~S20113C3(); // _ZN8S20113C3D2Ev
  virtual void  v12(); // _ZN8S20113C33v12Ev
  S20113C3(); // tgen
};
//SIG(-1 S20113C3) C1{ BC2{ VBC3{ v2} BC4{ BC5{ VBC3 v3 v4 v5 Fp[3] FC6{} Fp} v6 v7 Fp FC7{ BC8{ BC9{ v10} Fc[5] FC10{ VBC9 v11 v12 v13 Fp[3] FC6 Fp}[2] Fi Fp[7] FC10 FC9 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC9 VBC10 Fi Fp} Fi Fp Fi[2]} VBC11{ VBC12{ BC3 Fc[5] FC5[2] Fi Fp[7] FC5 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC3 FC13{ BC3 v14 Fc FL Fi[3] FC12} Fp Fi} vd v9 Fp[2] Fi[9] FC13 FC3[9] FL FD Fp FL Fl FL} BC4 vd v1 FL Fi FC6 FD[2] Fs[3] FC2 FL:2}


 S20113C3 ::~S20113C3(){ note_dtor("S20113C3", this);}
void  S20113C3 ::v12(){vfunc_called(this, "_ZN8S20113C33v12Ev");}
S20113C3 ::S20113C3(){ note_ctor("S20113C3", this);} // tgen

static void Test_S20113C3()
{
  extern Class_Descriptor cd_S20113C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(249,601)];
    init_test(&cd_S20113C3, buf);
    S20113C3 *dp, &lv = *(dp=new (buf) S20113C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3968,2400), "sizeof(S20113C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20113C3)");
    /*is_ambiguous_... S20113C4::S20113C5 */ AMB_check_base_class_offset(lv, (S20113C5*)(S20113C4*), 0, "S20113C3");
    check_base_class_offset(lv, (S20113C5*)(S20113C7*)(S20113C6*)(S20113C4*), 0, "S20113C3");
    /*is_ambiguous_... S20113C3::S20113C6 */ AMB_check_base_class_offset(lv, (S20113C5*)(S20113C7*)(S20113C6*), 0, "S20113C3");
    check_base_class_offset(lv, (S20113C7*)(S20113C6*)(S20113C4*), 0, "S20113C3");
    check_base_class_offset(lv, (S20113C6*)(S20113C4*), 0, "S20113C3");
    check_base_class_offset(lv, (S20113C5*)(S20113C10*), ABISELECT(3664,2216), "S20113C3");
    check_base_class_offset(lv, (S20113C10*)(S20113C11*), ABISELECT(3664,2216), "S20113C3");
    check_base_class_offset(lv, (S20113C11*)(S20113C4*), ABISELECT(3224,1952), "S20113C3");
    check_base_class_offset(lv, (S20113C4*), 0, "S20113C3");
    /*is_ambiguous_... S20113C3::S20113C6 */ AMB_check_base_class_offset(lv, (S20113C7*)(S20113C6*), ABISELECT(976,596), "S20113C3");
    /*is_ambiguous_... S20113C3::S20113C6 */ AMB_check_base_class_offset(lv, (S20113C6*), ABISELECT(976,596), "S20113C3");
    check_field_offset(lv, s20113c3f0, ABISELECT(1416,856), "S20113C3.s20113c3f0");
    check_field_offset(lv, s20113c3f1, ABISELECT(1424,864), "S20113C3.s20113c3f1");
    check_field_offset(lv, s20113c3f2, ABISELECT(1428,868), "S20113C3.s20113c3f2");
    check_field_offset(lv, s20113c3f3, ABISELECT(1440,872), "S20113C3.s20113c3f3");
    check_field_offset(lv, s20113c3f4, ABISELECT(1472,896), "S20113C3.s20113c3f4");
    check_field_offset(lv, s20113c3f5, ABISELECT(1488,904), "S20113C3.s20113c3f5");
    set_bf_and_test(lv, s20113c3f6, ABISELECT(3216,1948), 0, 2, 1, "S20113C3");
    set_bf_and_test(lv, s20113c3f6, ABISELECT(3216,1948), 0, 2, hide_sll(1LL<<1), "S20113C3");
    test_class_info(&lv, &cd_S20113C3);
    dp->~S20113C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20113C3(Test_S20113C3, "S20113C3", ABISELECT(3968,2400));

#else // __cplusplus

extern void _ZN8S20113C3C1Ev();
extern void _ZN8S20113C3D2Ev();
Name_Map name_map_S20113C3[] = {
  NSPAIR(_ZN8S20113C3C1Ev),
  NSPAIR(_ZN8S20113C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20113C5;
extern VTBL_ENTRY _ZTI8S20113C5[];
extern  VTBL_ENTRY _ZTV8S20113C5[];
extern Class_Descriptor cd_S20113C7;
extern VTBL_ENTRY _ZTI8S20113C7[];
extern  VTBL_ENTRY _ZTV8S20113C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20113C7[];
extern Class_Descriptor cd_S20113C6;
extern VTBL_ENTRY _ZTI8S20113C6[];
extern  VTBL_ENTRY _ZTV8S20113C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20113C6[];
extern Class_Descriptor cd_S20113C5;
extern VTBL_ENTRY _ZTI8S20113C5[];
extern  VTBL_ENTRY _ZTV8S20113C5[];
extern Class_Descriptor cd_S20113C10;
extern VTBL_ENTRY _ZTI9S20113C10[];
extern  VTBL_ENTRY _ZTV9S20113C10[];
extern Class_Descriptor cd_S20113C11;
extern VTBL_ENTRY _ZTI9S20113C11[];
extern  VTBL_ENTRY _ZTV9S20113C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20113C11[];
extern Class_Descriptor cd_S20113C4;
extern VTBL_ENTRY _ZTI8S20113C4[];
extern  VTBL_ENTRY _ZTV8S20113C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20113C4[];
extern Class_Descriptor cd_S20113C7;
extern VTBL_ENTRY _ZTI8S20113C7[];
extern  VTBL_ENTRY _ZTV8S20113C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20113C7[];
extern Class_Descriptor cd_S20113C6;
extern VTBL_ENTRY _ZTI8S20113C6[];
extern  VTBL_ENTRY _ZTV8S20113C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20113C6[];
static Base_Class bases_S20113C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20113C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20113C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20113C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20113C5,    ABISELECT(3664,2216), //bcp->offset
    31, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20113C10,    ABISELECT(3664,2216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20113C11,    ABISELECT(3224,1952), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20113C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20113C7,    ABISELECT(976,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20113C6,    ABISELECT(976,596), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20113C3[];
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
extern void _ZN8S20113C62v8Ev();
extern void _ZN8S20113C62v9Ev();
extern void _ZN8S20113C3D1Ev();
extern void _ZN8S20113C3D0Ev();
extern void _ZN8S20113C43v11Ev();
extern void _ZN8S20113C33v12Ev();
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
extern void _ZN8S20113C62v8Ev();
extern void _ZN8S20113C62v9Ev();
extern void _ZN9S20113C113v10Ev();
extern void _ZN8S20113C52v4Ev();
static  VTBL_ENTRY vtc_S20113C3[] = {
  ABISELECT(3664,2216),
  ABISELECT(3224,1952),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C3[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20113C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20113C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20113C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20113C33v12Ev,
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S20113C3[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v9Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-3224,-1952),
  (VTBL_ENTRY)&(_ZTI8S20113C3[0]),
  (VTBL_ENTRY)&_ZN9S20113C113v10Ev,
  0,
  ABISELECT(-3664,-2216),
  (VTBL_ENTRY)&(_ZTI8S20113C3[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S20113C3[];
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
extern void _ZN8S20113C62v8Ev();
extern void _ZN8S20113C62v9Ev();
extern void _ZN8S20113C4D1Ev();
extern void _ZN8S20113C4D0Ev();
extern void _ZN8S20113C43v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C4__8S20113C3[] = {
  ABISELECT(3664,2216),
  ABISELECT(3224,1952),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C4[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20113C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20113C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20113C43v11Ev,
};
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
extern void _ZN8S20113C62v8Ev();
extern void _ZN8S20113C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C68S20113C4__8S20113C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C6[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v9Ev,
};
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C78S20113C68S20113C4__8S20113C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C7[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
};
extern void _ZN9S20113C113v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20113C11__8S20113C4__8S20113C3[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-3224,-1952),
  (VTBL_ENTRY)&(_ZTI8S20113C4[0]),
  (VTBL_ENTRY)&_ZN9S20113C113v10Ev,
};
extern void _ZN8S20113C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C59S20113C10__A1__8S20113C4__8S20113C3[] = {
  0,
  ABISELECT(-3664,-2216),
  (VTBL_ENTRY)&(_ZTI8S20113C4[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
};
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
extern void _ZN8S20113C62v8Ev();
extern void _ZN8S20113C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C6__A1__8S20113C3[] = {
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C6[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v9Ev,
};
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C78S20113C6__A1__8S20113C3[] = {
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C7[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
};
extern void _ZN8S20113C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C5__8S20113C78S20113C6__A1__8S20113C3[] = {
  0,
  ABISELECT(976,596),
  (VTBL_ENTRY)&(_ZTI8S20113C7[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
};
extern void _ZN8S20113C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C5__8S20113C6__A1__8S20113C3[] = {
  0,
  ABISELECT(976,596),
  (VTBL_ENTRY)&(_ZTI8S20113C6[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
};
extern void _ZN9S20113C113v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20113C11__8S20113C3[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S20113C11[0]),
  (VTBL_ENTRY)&_ZN9S20113C113v10Ev,
};
extern void _ZN8S20113C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C59S20113C10__9S20113C11__8S20113C3[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S20113C11[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
};
static  VTT_ENTRY vtt_S20113C3[] = {
  {&(_ZTV8S20113C3[6]),  6,35},
  {&(_tg__ZTV8S20113C4__8S20113C3[6]),  6,15},
  {&(_tg__ZTV8S20113C68S20113C4__8S20113C3[4]),  4,10},
  {&(_tg__ZTV8S20113C78S20113C68S20113C4__8S20113C3[4]),  4,8},
  {&(_tg__ZTV8S20113C78S20113C68S20113C4__8S20113C3[4]),  4,8},
  {&(_tg__ZTV8S20113C68S20113C4__8S20113C3[4]),  4,10},
  {&(_tg__ZTV8S20113C4__8S20113C3[6]),  6,15},
  {&(_tg__ZTV9S20113C11__8S20113C4__8S20113C3[4]),  4,5},
  {&(_tg__ZTV8S20113C59S20113C10__A1__8S20113C4__8S20113C3[3]),  3,4},
  {&(_tg__ZTV8S20113C6__A1__8S20113C3[4]),  4,10},
  {&(_tg__ZTV8S20113C78S20113C6__A1__8S20113C3[4]),  4,8},
  {&(_tg__ZTV8S20113C5__8S20113C78S20113C6__A1__8S20113C3[3]),  3,4},
  {&(_tg__ZTV8S20113C5__8S20113C6__A1__8S20113C3[3]),  3,4},
  {&(_ZTV8S20113C3[6]),  6,35},
  {&(_ZTV8S20113C3[30]),  30,35},
  {&(_ZTV8S20113C3[34]),  34,35},
  {&(_ZTV8S20113C3[20]),  20,35},
  {&(_tg__ZTV9S20113C11__8S20113C3[3]),  3,4},
  {&(_tg__ZTV8S20113C59S20113C10__9S20113C11__8S20113C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20113C3[];
extern  VTBL_ENTRY _ZTV8S20113C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20113C3[];
Class_Descriptor cd_S20113C3 = {  "S20113C3", // class name
  bases_S20113C3, 9,
  &(vtc_S20113C3[0]), // expected_vtbl_contents
  &(vtt_S20113C3[0]), // expected_vtt_contents
  ABISELECT(3968,2400), // object size
  NSPAIRA(_ZTI8S20113C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20113C3),35, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20113C3),19, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20113C1  : virtual S20113C2 , S20113C3 {
  void *s20113c1f0[7];
  __tsi64 s20113c1f1;
  ::S19277C12_nt s20113c1f2;
  long s20113c1f3;
  ::S19517C2 s20113c1f4[3];
  void *s20113c1f5[3];
  virtual void  v1(); // _ZN8S20113C12v1Ev
  virtual void  v2(); // _ZN8S20113C12v2Ev
  ~S20113C1(); // tgen
  S20113C1(); // tgen
};
//SIG(1 S20113C1) C1{ VBC2{ v3 Fp[2] Fc[10] Fl FD FL:8 Fp FD} BC3{ BC4{ VBC5{ v4} BC6{ BC7{ VBC5 v5 v6 v7 Fp[3] FC8{} Fp} v8 v9 Fp FC9{ BC10{ BC11{ v13} Fc[5] FC12{ VBC11 v14 v15 v16 Fp[3] FC8 Fp}[2] Fi Fp[7] FC12 FC11 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC11 VBC12 Fi Fp} Fi Fp Fi[2]} VBC13{ VBC14{ BC5 Fc[5] FC7[2] Fi Fp[7] FC7 FC5 Fc Fi Fs[5] Fi[8] FL Fc:8} v10 Fp FL Fp[6] FC5 FC15{ BC5 v17 Fc FL Fi[3] FC14} Fp Fi} vd v11 Fp[2] Fi[9] FC15 FC5[9] FL FD Fp FL Fl FL} BC6 vd v12 FL Fi FC8 FD[2] Fs[3] FC4 FL:2} v1 v2 Fp[7] FL FC16{ vd v18 Fi} Fl FC17{ BC18{ VBC19{ v20} BC20{ BC21{ VBC19 v21 v22 v23 Fp[3] FC8 Fp} v24 v25 Fp FC9 Fi Fp Fi[2]} VBC22{ VBC23{ BC19 Fc[5] FC21[2] Fi Fp[7] FC21 FC19 Fc Fi Fs[5] Fi[8] FL Fc:8} v26 Fp FL Fp[6] FC19 FC24{ BC19 v28 Fc FL Fi[3] FC23} Fp Fi} vd v27 Fp[2] Fi[9] FC24 FC19[9] FL FD Fp FL Fl FL} BC24 vd v19 Fp Fl[2] FL Fi FL}[3] Fp[3]}


void  S20113C1 ::v1(){vfunc_called(this, "_ZN8S20113C12v1Ev");}
void  S20113C1 ::v2(){vfunc_called(this, "_ZN8S20113C12v2Ev");}
S20113C1 ::~S20113C1(){ note_dtor("S20113C1", this);} // tgen
S20113C1 ::S20113C1(){ note_ctor("S20113C1", this);} // tgen

static void Test_S20113C1()
{
  extern Class_Descriptor cd_S20113C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(659,1597)];
    init_test(&cd_S20113C1, buf);
    S20113C1 *dp, &lv = *(dp=new (buf) S20113C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(10528,6384), "sizeof(S20113C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20113C1)");
    check_base_class_offset(lv, (S20113C2*), ABISELECT(9680,5876), "S20113C1");
    /*is_ambiguous_... S20113C4::S20113C5 */ AMB_check_base_class_offset(lv, (S20113C5*)(S20113C4*)(S20113C3*), 0, "S20113C1");
    check_base_class_offset(lv, (S20113C5*)(S20113C7*)(S20113C6*)(S20113C4*)(S20113C3*), 0, "S20113C1");
    /*is_ambiguous_... S20113C3::S20113C6 */ AMB_check_base_class_offset(lv, (S20113C5*)(S20113C7*)(S20113C6*)(S20113C3*), 0, "S20113C1");
    check_base_class_offset(lv, (S20113C7*)(S20113C6*)(S20113C4*)(S20113C3*), 0, "S20113C1");
    check_base_class_offset(lv, (S20113C6*)(S20113C4*)(S20113C3*), 0, "S20113C1");
    check_base_class_offset(lv, (S20113C5*)(S20113C10*), ABISELECT(10216,6200), "S20113C1");
    check_base_class_offset(lv, (S20113C10*)(S20113C11*), ABISELECT(10216,6200), "S20113C1");
    check_base_class_offset(lv, (S20113C11*)(S20113C4*)(S20113C3*), ABISELECT(9776,5936), "S20113C1");
    check_base_class_offset(lv, (S20113C4*)(S20113C3*), 0, "S20113C1");
    /*is_ambiguous_... S20113C3::S20113C6 */ AMB_check_base_class_offset(lv, (S20113C7*)(S20113C6*)(S20113C3*), ABISELECT(976,596), "S20113C1");
    /*is_ambiguous_... S20113C3::S20113C6 */ AMB_check_base_class_offset(lv, (S20113C6*)(S20113C3*), ABISELECT(976,596), "S20113C1");
    check_base_class_offset(lv, (S20113C3*), 0, "S20113C1");
    check_field_offset(lv, s20113c1f0, ABISELECT(3224,1952), "S20113C1.s20113c1f0");
    check_field_offset(lv, s20113c1f1, ABISELECT(3280,1980), "S20113C1.s20113c1f1");
    check_field_offset(lv, s20113c1f2, ABISELECT(3288,1988), "S20113C1.s20113c1f2");
    check_field_offset(lv, s20113c1f3, ABISELECT(3304,1996), "S20113C1.s20113c1f3");
    check_field_offset(lv, s20113c1f4, ABISELECT(3312,2000), "S20113C1.s20113c1f4");
    check_field_offset(lv, s20113c1f5, ABISELECT(9648,5864), "S20113C1.s20113c1f5");
    test_class_info(&lv, &cd_S20113C1);
    dp->~S20113C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20113C1(Test_S20113C1, "S20113C1", ABISELECT(10528,6384));

#else // __cplusplus

extern void _ZN8S20113C1C1Ev();
extern void _ZN8S20113C1D1Ev();
Name_Map name_map_S20113C1[] = {
  NSPAIR(_ZN8S20113C1C1Ev),
  NSPAIR(_ZN8S20113C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20113C2;
extern VTBL_ENTRY _ZTI8S20113C2[];
extern  VTBL_ENTRY _ZTV8S20113C2[];
extern Class_Descriptor cd_S20113C5;
extern VTBL_ENTRY _ZTI8S20113C5[];
extern  VTBL_ENTRY _ZTV8S20113C5[];
extern Class_Descriptor cd_S20113C7;
extern VTBL_ENTRY _ZTI8S20113C7[];
extern  VTBL_ENTRY _ZTV8S20113C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20113C7[];
extern Class_Descriptor cd_S20113C6;
extern VTBL_ENTRY _ZTI8S20113C6[];
extern  VTBL_ENTRY _ZTV8S20113C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20113C6[];
extern Class_Descriptor cd_S20113C5;
extern VTBL_ENTRY _ZTI8S20113C5[];
extern  VTBL_ENTRY _ZTV8S20113C5[];
extern Class_Descriptor cd_S20113C10;
extern VTBL_ENTRY _ZTI9S20113C10[];
extern  VTBL_ENTRY _ZTV9S20113C10[];
extern Class_Descriptor cd_S20113C11;
extern VTBL_ENTRY _ZTI9S20113C11[];
extern  VTBL_ENTRY _ZTV9S20113C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20113C11[];
extern Class_Descriptor cd_S20113C4;
extern VTBL_ENTRY _ZTI8S20113C4[];
extern  VTBL_ENTRY _ZTV8S20113C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20113C4[];
extern Class_Descriptor cd_S20113C7;
extern VTBL_ENTRY _ZTI8S20113C7[];
extern  VTBL_ENTRY _ZTV8S20113C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20113C7[];
extern Class_Descriptor cd_S20113C6;
extern VTBL_ENTRY _ZTI8S20113C6[];
extern  VTBL_ENTRY _ZTV8S20113C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20113C6[];
extern Class_Descriptor cd_S20113C3;
extern VTBL_ENTRY _ZTI8S20113C3[];
extern  VTBL_ENTRY _ZTV8S20113C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20113C3[];
static Base_Class bases_S20113C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20113C2,    ABISELECT(9680,5876), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20113C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20113C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20113C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20113C5,    ABISELECT(10216,6200), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20113C10,    ABISELECT(10216,6200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20113C11,    ABISELECT(9776,5936), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20113C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20113C7,    ABISELECT(976,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20113C6,    ABISELECT(976,596), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20113C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20113C1[];
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
extern void _ZN8S20113C62v8Ev();
extern void _ZN8S20113C62v9Ev();
extern void _ZN8S20113C1D1Ev();
extern void _ZN8S20113C1D0Ev();
extern void _ZN8S20113C43v11Ev();
extern void _ZN8S20113C33v12Ev();
extern void _ZN8S20113C12v1Ev();
extern void _ZN8S20113C12v2Ev();
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
extern void _ZN8S20113C62v8Ev();
extern void _ZN8S20113C62v9Ev();
extern void _ZN8S20113C22v3Ev();
extern void _ZN9S20113C113v10Ev();
extern void _ZN8S20113C52v4Ev();
static  VTBL_ENTRY vtc_S20113C1[] = {
  ABISELECT(9680,5876),
  ABISELECT(10216,6200),
  ABISELECT(9776,5936),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C1[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20113C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20113C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20113C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20113C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20113C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20113C12v2Ev,
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S20113C1[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v9Ev,
  0,
  ABISELECT(-9680,-5876),
  (VTBL_ENTRY)&(_ZTI8S20113C1[0]),
  (VTBL_ENTRY)&_ZN8S20113C22v3Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-9776,-5936),
  (VTBL_ENTRY)&(_ZTI8S20113C1[0]),
  (VTBL_ENTRY)&_ZN9S20113C113v10Ev,
  0,
  ABISELECT(-10216,-6200),
  (VTBL_ENTRY)&(_ZTI8S20113C1[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S20113C1[];
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
extern void _ZN8S20113C62v8Ev();
extern void _ZN8S20113C62v9Ev();
extern void _ZN8S20113C3D1Ev();
extern void _ZN8S20113C3D0Ev();
extern void _ZN8S20113C43v11Ev();
extern void _ZN8S20113C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C3__8S20113C1[] = {
  ABISELECT(10216,6200),
  ABISELECT(9776,5936),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C3[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20113C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20113C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20113C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20113C33v12Ev,
};
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
extern void _ZN8S20113C62v8Ev();
extern void _ZN8S20113C62v9Ev();
extern void _ZN8S20113C4D1Ev();
extern void _ZN8S20113C4D0Ev();
extern void _ZN8S20113C43v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C48S20113C3__8S20113C1[] = {
  ABISELECT(10216,6200),
  ABISELECT(9776,5936),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C4[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20113C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20113C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20113C43v11Ev,
};
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
extern void _ZN8S20113C62v8Ev();
extern void _ZN8S20113C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C68S20113C48S20113C3__8S20113C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C6[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v9Ev,
};
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C78S20113C68S20113C48S20113C3__8S20113C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C7[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
};
extern void _ZN9S20113C113v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20113C11__8S20113C48S20113C3__8S20113C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-9776,-5936),
  (VTBL_ENTRY)&(_ZTI8S20113C4[0]),
  (VTBL_ENTRY)&_ZN9S20113C113v10Ev,
};
extern void _ZN8S20113C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C59S20113C10__A1__8S20113C48S20113C3__8S20113C1[] = {
  0,
  ABISELECT(-10216,-6200),
  (VTBL_ENTRY)&(_ZTI8S20113C4[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
};
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
extern void _ZN8S20113C62v8Ev();
extern void _ZN8S20113C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C68S20113C3__A1__8S20113C1[] = {
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C6[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v9Ev,
};
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C78S20113C68S20113C3__A1__8S20113C1[] = {
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  0,
  (VTBL_ENTRY)&(_ZTI8S20113C7[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
};
extern void _ZN8S20113C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C5__8S20113C78S20113C68S20113C3__A1__8S20113C1[] = {
  0,
  ABISELECT(976,596),
  (VTBL_ENTRY)&(_ZTI8S20113C7[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
};
extern void _ZN8S20113C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C5__8S20113C68S20113C3__A1__8S20113C1[] = {
  0,
  ABISELECT(976,596),
  (VTBL_ENTRY)&(_ZTI8S20113C6[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
};
extern void _ZN9S20113C113v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20113C11__8S20113C3__8S20113C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-9776,-5936),
  (VTBL_ENTRY)&(_ZTI8S20113C3[0]),
  (VTBL_ENTRY)&_ZN9S20113C113v10Ev,
};
extern void _ZN8S20113C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C59S20113C10__A1__8S20113C3__8S20113C1[] = {
  0,
  ABISELECT(-10216,-6200),
  (VTBL_ENTRY)&(_ZTI8S20113C3[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
};
extern void _ZN8S20113C52v4Ev();
extern void _ZN8S20113C72v5Ev();
extern void _ZN8S20113C72v6Ev();
extern void _ZN8S20113C72v7Ev();
extern void _ZN8S20113C62v8Ev();
extern void _ZN8S20113C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C6__A1__8S20113C3__8S20113C1[] = {
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S20113C3[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20113C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20113C62v9Ev,
};
extern void _ZN9S20113C113v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20113C11__8S20113C1[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S20113C11[0]),
  (VTBL_ENTRY)&_ZN9S20113C113v10Ev,
};
extern void _ZN8S20113C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20113C59S20113C10__9S20113C11__8S20113C1[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S20113C11[0]),
  (VTBL_ENTRY)&_ZN8S20113C52v4Ev,
};
static  VTT_ENTRY vtt_S20113C1[] = {
  {&(_ZTV8S20113C1[7]),  7,42},
  {&(_tg__ZTV8S20113C3__8S20113C1[6]),  6,16},
  {&(_tg__ZTV8S20113C48S20113C3__8S20113C1[6]),  6,15},
  {&(_tg__ZTV8S20113C68S20113C48S20113C3__8S20113C1[4]),  4,10},
  {&(_tg__ZTV8S20113C78S20113C68S20113C48S20113C3__8S20113C1[4]),  4,8},
  {&(_tg__ZTV8S20113C78S20113C68S20113C48S20113C3__8S20113C1[4]),  4,8},
  {&(_tg__ZTV8S20113C68S20113C48S20113C3__8S20113C1[4]),  4,10},
  {&(_tg__ZTV8S20113C48S20113C3__8S20113C1[6]),  6,15},
  {&(_tg__ZTV9S20113C11__8S20113C48S20113C3__8S20113C1[4]),  4,5},
  {&(_tg__ZTV8S20113C59S20113C10__A1__8S20113C48S20113C3__8S20113C1[3]),  3,4},
  {&(_tg__ZTV8S20113C68S20113C3__A1__8S20113C1[4]),  4,10},
  {&(_tg__ZTV8S20113C78S20113C68S20113C3__A1__8S20113C1[4]),  4,8},
  {&(_tg__ZTV8S20113C5__8S20113C78S20113C68S20113C3__A1__8S20113C1[3]),  3,4},
  {&(_tg__ZTV8S20113C5__8S20113C68S20113C3__A1__8S20113C1[3]),  3,4},
  {&(_tg__ZTV8S20113C3__8S20113C1[6]),  6,16},
  {&(_tg__ZTV9S20113C11__8S20113C3__8S20113C1[4]),  4,5},
  {&(_tg__ZTV8S20113C59S20113C10__A1__8S20113C3__8S20113C1[3]),  3,4},
  {&(_tg__ZTV8S20113C6__A1__8S20113C3__8S20113C1[4]),  4,10},
  {&(_ZTV8S20113C1[32]),  32,42},
  {&(_ZTV8S20113C1[7]),  7,42},
  {&(_ZTV8S20113C1[37]),  37,42},
  {&(_ZTV8S20113C1[41]),  41,42},
  {&(_ZTV8S20113C1[23]),  23,42},
  {&(_tg__ZTV9S20113C11__8S20113C1[3]),  3,4},
  {&(_tg__ZTV8S20113C59S20113C10__9S20113C11__8S20113C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20113C1[];
extern  VTBL_ENTRY _ZTV8S20113C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20113C1[];
Class_Descriptor cd_S20113C1 = {  "S20113C1", // class name
  bases_S20113C1, 11,
  &(vtc_S20113C1[0]), // expected_vtbl_contents
  &(vtt_S20113C1[0]), // expected_vtt_contents
  ABISELECT(10528,6384), // object size
  NSPAIRA(_ZTI8S20113C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20113C1),42, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20113C1),25, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19518C4  {
  virtual void  v2(); // _ZN8S19518C42v2Ev
  ~S19518C4(); // tgen
  S19518C4(); // tgen
};
//SIG(-1 S19518C4) C1{ v1}


void  S19518C4 ::v2(){vfunc_called(this, "_ZN8S19518C42v2Ev");}
S19518C4 ::~S19518C4(){ note_dtor("S19518C4", this);} // tgen
S19518C4 ::S19518C4(){ note_ctor("S19518C4", this);} // tgen

static void Test_S19518C4()
{
  extern Class_Descriptor cd_S19518C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19518C4, buf);
    S19518C4 *dp, &lv = *(dp=new (buf) S19518C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19518C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19518C4)");
    test_class_info(&lv, &cd_S19518C4);
    dp->~S19518C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19518C4(Test_S19518C4, "S19518C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19518C4C1Ev();
extern void _ZN8S19518C4D1Ev();
Name_Map name_map_S19518C4[] = {
  NSPAIR(_ZN8S19518C4C1Ev),
  NSPAIR(_ZN8S19518C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19518C4[];
extern void _ZN8S19518C42v2Ev();
static  VTBL_ENTRY vtc_S19518C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19518C4[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S19518C4[];
extern  VTBL_ENTRY _ZTV8S19518C4[];
Class_Descriptor cd_S19518C4 = {  "S19518C4", // class name
  0,0,//no base classes
  &(vtc_S19518C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19518C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19518C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19518C6  : virtual S19518C4 {
  void *s19518c6f0[3];
  ::S2489C12_nt s19518c6f1;
  void *s19518c6f2;
  virtual void  v3(); // _ZN8S19518C62v3Ev
  virtual void  v4(); // _ZN8S19518C62v4Ev
  virtual void  v5(); // _ZN8S19518C62v5Ev
  ~S19518C6(); // tgen
  S19518C6(); // tgen
};
//SIG(-1 S19518C6) C1{ VBC2{ v4} v1 v2 v3 Fp[3] FC3{} Fp}


void  S19518C6 ::v3(){vfunc_called(this, "_ZN8S19518C62v3Ev");}
void  S19518C6 ::v4(){vfunc_called(this, "_ZN8S19518C62v4Ev");}
void  S19518C6 ::v5(){vfunc_called(this, "_ZN8S19518C62v5Ev");}
S19518C6 ::~S19518C6(){ note_dtor("S19518C6", this);} // tgen
S19518C6 ::S19518C6(){ note_ctor("S19518C6", this);} // tgen

static void Test_S19518C6()
{
  extern Class_Descriptor cd_S19518C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S19518C6, buf);
    S19518C6 *dp, &lv = *(dp=new (buf) S19518C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19518C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19518C6)");
    check_base_class_offset(lv, (S19518C4*), 0, "S19518C6");
    check_field_offset(lv, s19518c6f0, ABISELECT(8,4), "S19518C6.s19518c6f0");
    check_field_offset(lv, s19518c6f1, ABISELECT(32,16), "S19518C6.s19518c6f1");
    check_field_offset(lv, s19518c6f2, ABISELECT(40,20), "S19518C6.s19518c6f2");
    test_class_info(&lv, &cd_S19518C6);
    dp->~S19518C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19518C6(Test_S19518C6, "S19518C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19518C6C1Ev();
extern void _ZN8S19518C6D1Ev();
Name_Map name_map_S19518C6[] = {
  NSPAIR(_ZN8S19518C6C1Ev),
  NSPAIR(_ZN8S19518C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19518C4;
extern VTBL_ENTRY _ZTI8S19518C4[];
extern  VTBL_ENTRY _ZTV8S19518C4[];
static Base_Class bases_S19518C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19518C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19518C6[];
extern void _ZN8S19518C42v2Ev();
extern void _ZN8S19518C62v3Ev();
extern void _ZN8S19518C62v4Ev();
extern void _ZN8S19518C62v5Ev();
static  VTBL_ENTRY vtc_S19518C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19518C6[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v5Ev,
};
extern VTBL_ENTRY _ZTV8S19518C6[];
static  VTT_ENTRY vtt_S19518C6[] = {
  {&(_ZTV8S19518C6[4]),  4,8},
  {&(_ZTV8S19518C6[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S19518C6[];
extern  VTBL_ENTRY _ZTV8S19518C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19518C6[];
Class_Descriptor cd_S19518C6 = {  "S19518C6", // class name
  bases_S19518C6, 1,
  &(vtc_S19518C6[0]), // expected_vtbl_contents
  &(vtt_S19518C6[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19518C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19518C6),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19518C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19518C5  : S19518C6 {
  void *s19518c5f0;
  ::S19277C8 s19518c5f1;
  int s19518c5f2;
  void *s19518c5f3;
  int s19518c5f4[2];
  virtual void  v6(); // _ZN8S19518C52v6Ev
  virtual void  v7(); // _ZN8S19518C52v7Ev
  ~S19518C5(); // tgen
  S19518C5(); // tgen
};
//SIG(-1 S19518C5) C1{ BC2{ VBC3{ v3} v4 v5 v6 Fp[3] FC4{} Fp} v1 v2 Fp FC5{ BC6{ BC7{ v7} Fc[5] FC8{ VBC7 v8 v9 v10 Fp[3] FC4 Fp}[2] Fi Fp[7] FC8 FC7 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC7 VBC8 Fi Fp} Fi Fp Fi[2]}


void  S19518C5 ::v6(){vfunc_called(this, "_ZN8S19518C52v6Ev");}
void  S19518C5 ::v7(){vfunc_called(this, "_ZN8S19518C52v7Ev");}
S19518C5 ::~S19518C5(){ note_dtor("S19518C5", this);} // tgen
S19518C5 ::S19518C5(){ note_ctor("S19518C5", this);} // tgen

static void Test_S19518C5()
{
  extern Class_Descriptor cd_S19518C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(56,66)];
    init_test(&cd_S19518C5, buf);
    S19518C5 *dp, &lv = *(dp=new (buf) S19518C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(440,260), "sizeof(S19518C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19518C5)");
    check_base_class_offset(lv, (S19518C4*)(S19518C6*), 0, "S19518C5");
    check_base_class_offset(lv, (S19518C6*), 0, "S19518C5");
    check_field_offset(lv, s19518c5f0, ABISELECT(48,24), "S19518C5.s19518c5f0");
    check_field_offset(lv, s19518c5f1, ABISELECT(56,28), "S19518C5.s19518c5f1");
    check_field_offset(lv, s19518c5f2, ABISELECT(416,244), "S19518C5.s19518c5f2");
    check_field_offset(lv, s19518c5f3, ABISELECT(424,248), "S19518C5.s19518c5f3");
    check_field_offset(lv, s19518c5f4, ABISELECT(432,252), "S19518C5.s19518c5f4");
    test_class_info(&lv, &cd_S19518C5);
    dp->~S19518C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19518C5(Test_S19518C5, "S19518C5", ABISELECT(440,260));

#else // __cplusplus

extern void _ZN8S19518C5C1Ev();
extern void _ZN8S19518C5D1Ev();
Name_Map name_map_S19518C5[] = {
  NSPAIR(_ZN8S19518C5C1Ev),
  NSPAIR(_ZN8S19518C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19518C4;
extern VTBL_ENTRY _ZTI8S19518C4[];
extern  VTBL_ENTRY _ZTV8S19518C4[];
extern Class_Descriptor cd_S19518C6;
extern VTBL_ENTRY _ZTI8S19518C6[];
extern  VTBL_ENTRY _ZTV8S19518C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19518C6[];
static Base_Class bases_S19518C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19518C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19518C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19518C5[];
extern void _ZN8S19518C42v2Ev();
extern void _ZN8S19518C62v3Ev();
extern void _ZN8S19518C62v4Ev();
extern void _ZN8S19518C62v5Ev();
extern void _ZN8S19518C52v6Ev();
extern void _ZN8S19518C52v7Ev();
static  VTBL_ENTRY vtc_S19518C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19518C5[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v7Ev,
};
extern VTBL_ENTRY _ZTV8S19518C5[];
extern void _ZN8S19518C42v2Ev();
extern void _ZN8S19518C62v3Ev();
extern void _ZN8S19518C62v4Ev();
extern void _ZN8S19518C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C6__8S19518C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19518C6[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v5Ev,
};
static  VTT_ENTRY vtt_S19518C5[] = {
  {&(_ZTV8S19518C5[4]),  4,10},
  {&(_tg__ZTV8S19518C6__8S19518C5[4]),  4,8},
  {&(_tg__ZTV8S19518C6__8S19518C5[4]),  4,8},
  {&(_ZTV8S19518C5[4]),  4,10},
};
extern VTBL_ENTRY _ZTI8S19518C5[];
extern  VTBL_ENTRY _ZTV8S19518C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19518C5[];
Class_Descriptor cd_S19518C5 = {  "S19518C5", // class name
  bases_S19518C5, 2,
  &(vtc_S19518C5[0]), // expected_vtbl_contents
  &(vtt_S19518C5[0]), // expected_vtt_contents
  ABISELECT(440,260), // object size
  NSPAIRA(_ZTI8S19518C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19518C5),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19518C5),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19518C9  : S19518C4 {
  char s19518c9f0[5];
  ::S19518C6 s19518c9f1[2];
  int s19518c9f2;
  void *s19518c9f3[7];
  ::S19518C6 s19518c9f4;
  ::S19518C4 s19518c9f5;
  char s19518c9f6;
  int s19518c9f7;
  short s19518c9f8[5];
  int s19518c9f9[8];
  __tsi64 s19518c9f10;
  char s19518c9f11:8;
  ~S19518C9(); // tgen
  S19518C9(); // tgen
};
//SIG(-1 S19518C9) C1{ BC2{ v1} Fc[5] FC3{ VBC2 v2 v3 v4 Fp[3] FC4{} Fp}[2] Fi Fp[7] FC3 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}


S19518C9 ::~S19518C9(){ note_dtor("S19518C9", this);} // tgen
S19518C9 ::S19518C9(){ note_ctor("S19518C9", this);} // tgen

static void Test_S19518C9()
{
  extern Class_Descriptor cd_S19518C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,47)];
    init_test(&cd_S19518C9, buf);
    S19518C9 *dp, &lv = *(dp=new (buf) S19518C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,184), "sizeof(S19518C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19518C9)");
    check_base_class_offset(lv, (S19518C4*), 0, "S19518C9");
    check_field_offset(lv, s19518c9f0, ABISELECT(8,4), "S19518C9.s19518c9f0");
    check_field_offset(lv, s19518c9f1, ABISELECT(16,12), "S19518C9.s19518c9f1");
    check_field_offset(lv, s19518c9f2, ABISELECT(112,60), "S19518C9.s19518c9f2");
    check_field_offset(lv, s19518c9f3, ABISELECT(120,64), "S19518C9.s19518c9f3");
    check_field_offset(lv, s19518c9f4, ABISELECT(176,92), "S19518C9.s19518c9f4");
    check_field_offset(lv, s19518c9f5, ABISELECT(224,116), "S19518C9.s19518c9f5");
    check_field_offset(lv, s19518c9f6, ABISELECT(232,120), "S19518C9.s19518c9f6");
    check_field_offset(lv, s19518c9f7, ABISELECT(236,124), "S19518C9.s19518c9f7");
    check_field_offset(lv, s19518c9f8, ABISELECT(240,128), "S19518C9.s19518c9f8");
    check_field_offset(lv, s19518c9f9, ABISELECT(252,140), "S19518C9.s19518c9f9");
    check_field_offset(lv, s19518c9f10, ABISELECT(288,172), "S19518C9.s19518c9f10");
    set_bf_and_test(lv, s19518c9f11, ABISELECT(296,180), 0, 8, 1, "S19518C9");
    set_bf_and_test(lv, s19518c9f11, ABISELECT(296,180), 0, 8, hide_sll(1LL<<7), "S19518C9");
    test_class_info(&lv, &cd_S19518C9);
    dp->~S19518C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19518C9(Test_S19518C9, "S19518C9", ABISELECT(304,184));

#else // __cplusplus

extern void _ZN8S19518C9C1Ev();
extern void _ZN8S19518C9D1Ev();
Name_Map name_map_S19518C9[] = {
  NSPAIR(_ZN8S19518C9C1Ev),
  NSPAIR(_ZN8S19518C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19518C4;
extern VTBL_ENTRY _ZTI8S19518C4[];
extern  VTBL_ENTRY _ZTV8S19518C4[];
static Base_Class bases_S19518C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19518C4,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19518C9[];
extern void _ZN8S19518C42v2Ev();
static  VTBL_ENTRY vtc_S19518C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19518C9[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S19518C9[];
extern  VTBL_ENTRY _ZTV8S19518C9[];
Class_Descriptor cd_S19518C9 = {  "S19518C9", // class name
  bases_S19518C9, 1,
  &(vtc_S19518C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,184), // object size
  NSPAIRA(_ZTI8S19518C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19518C9),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19518C11  : S19518C4 {
  char s19518c11f0;
  __tsi64 s19518c11f1;
  int s19518c11f2[3];
  ::S19518C9 s19518c11f3;
  virtual void  v10(); // _ZN9S19518C113v10Ev
  ~S19518C11(); // tgen
  S19518C11(); // tgen
};
//SIG(-1 S19518C11) C1{ BC2{ v2} v1 Fc FL Fi[3] FC3{ BC2 Fc[5] FC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}}


void  S19518C11 ::v10(){vfunc_called(this, "_ZN9S19518C113v10Ev");}
S19518C11 ::~S19518C11(){ note_dtor("S19518C11", this);} // tgen
S19518C11 ::S19518C11(){ note_ctor("S19518C11", this);} // tgen

static void Test_S19518C11()
{
  extern Class_Descriptor cd_S19518C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,54)];
    init_test(&cd_S19518C11, buf);
    S19518C11 *dp, &lv = *(dp=new (buf) S19518C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,212), "sizeof(S19518C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19518C11)");
    check_base_class_offset(lv, (S19518C4*), 0, "S19518C11");
    check_field_offset(lv, s19518c11f0, ABISELECT(8,4), "S19518C11.s19518c11f0");
    check_field_offset(lv, s19518c11f1, ABISELECT(16,8), "S19518C11.s19518c11f1");
    check_field_offset(lv, s19518c11f2, ABISELECT(24,16), "S19518C11.s19518c11f2");
    check_field_offset(lv, s19518c11f3, ABISELECT(40,28), "S19518C11.s19518c11f3");
    test_class_info(&lv, &cd_S19518C11);
    dp->~S19518C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19518C11(Test_S19518C11, "S19518C11", ABISELECT(344,212));

#else // __cplusplus

extern void _ZN9S19518C11C1Ev();
extern void _ZN9S19518C11D1Ev();
Name_Map name_map_S19518C11[] = {
  NSPAIR(_ZN9S19518C11C1Ev),
  NSPAIR(_ZN9S19518C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19518C4;
extern VTBL_ENTRY _ZTI8S19518C4[];
extern  VTBL_ENTRY _ZTV8S19518C4[];
static Base_Class bases_S19518C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19518C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19518C11[];
extern void _ZN8S19518C42v2Ev();
extern void _ZN9S19518C113v10Ev();
static  VTBL_ENTRY vtc_S19518C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19518C11[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
  (VTBL_ENTRY)&_ZN9S19518C113v10Ev,
};
extern VTBL_ENTRY _ZTI9S19518C11[];
extern  VTBL_ENTRY _ZTV9S19518C11[];
Class_Descriptor cd_S19518C11 = {  "S19518C11", // class name
  bases_S19518C11, 1,
  &(vtc_S19518C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,212), // object size
  NSPAIRA(_ZTI9S19518C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19518C11),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19518C10  : virtual S19518C9 {
  void *s19518c10f0;
  __tsi64 s19518c10f1;
  void *s19518c10f2[6];
  ::S19518C4 s19518c10f3;
  ::S19518C11 s19518c10f4;
  void *s19518c10f5;
  int s19518c10f6;
  virtual void  v8(); // _ZN9S19518C102v8Ev
  ~S19518C10(); // tgen
  S19518C10(); // tgen
};
//SIG(-1 S19518C10) C1{ VBC2{ BC3{ v2} Fc[5] FC4{ VBC3 v4 v5 v6 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v1 Fp FL Fp[6] FC3 FC6{ BC3 v3 Fc FL Fi[3] FC2} Fp Fi}


void  S19518C10 ::v8(){vfunc_called(this, "_ZN9S19518C102v8Ev");}
S19518C10 ::~S19518C10(){ note_dtor("S19518C10", this);} // tgen
S19518C10 ::S19518C10(){ note_ctor("S19518C10", this);} // tgen

static void Test_S19518C10()
{
  extern Class_Descriptor cd_S19518C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(94,113)];
    init_test(&cd_S19518C10, buf);
    S19518C10 *dp, &lv = *(dp=new (buf) S19518C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(744,448), "sizeof(S19518C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19518C10)");
    check_base_class_offset(lv, (S19518C4*)(S19518C9*), ABISELECT(440,264), "S19518C10");
    check_base_class_offset(lv, (S19518C9*), ABISELECT(440,264), "S19518C10");
    check_field_offset(lv, s19518c10f0, ABISELECT(8,4), "S19518C10.s19518c10f0");
    check_field_offset(lv, s19518c10f1, ABISELECT(16,8), "S19518C10.s19518c10f1");
    check_field_offset(lv, s19518c10f2, ABISELECT(24,16), "S19518C10.s19518c10f2");
    check_field_offset(lv, s19518c10f3, ABISELECT(72,40), "S19518C10.s19518c10f3");
    check_field_offset(lv, s19518c10f4, ABISELECT(80,44), "S19518C10.s19518c10f4");
    check_field_offset(lv, s19518c10f5, ABISELECT(424,256), "S19518C10.s19518c10f5");
    check_field_offset(lv, s19518c10f6, ABISELECT(432,260), "S19518C10.s19518c10f6");
    test_class_info(&lv, &cd_S19518C10);
    dp->~S19518C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19518C10(Test_S19518C10, "S19518C10", ABISELECT(744,448));

#else // __cplusplus

extern void _ZN9S19518C10C1Ev();
extern void _ZN9S19518C10D1Ev();
Name_Map name_map_S19518C10[] = {
  NSPAIR(_ZN9S19518C10C1Ev),
  NSPAIR(_ZN9S19518C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19518C4;
extern VTBL_ENTRY _ZTI8S19518C4[];
extern  VTBL_ENTRY _ZTV8S19518C4[];
extern Class_Descriptor cd_S19518C9;
extern VTBL_ENTRY _ZTI8S19518C9[];
extern  VTBL_ENTRY _ZTV8S19518C9[];
static Base_Class bases_S19518C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19518C4,    ABISELECT(440,264), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19518C9,    ABISELECT(440,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19518C10[];
extern void _ZN9S19518C102v8Ev();
extern void _ZN8S19518C42v2Ev();
static  VTBL_ENTRY vtc_S19518C10[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19518C10[0]),
  (VTBL_ENTRY)&_ZN9S19518C102v8Ev,
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19518C10[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
};
extern VTBL_ENTRY _ZTV9S19518C10[];
static  VTT_ENTRY vtt_S19518C10[] = {
  {&(_ZTV9S19518C10[3]),  3,8},
  {&(_ZTV9S19518C10[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S19518C10[];
extern  VTBL_ENTRY _ZTV9S19518C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19518C10[];
Class_Descriptor cd_S19518C10 = {  "S19518C10", // class name
  bases_S19518C10, 2,
  &(vtc_S19518C10[0]), // expected_vtbl_contents
  &(vtt_S19518C10[0]), // expected_vtt_contents
  ABISELECT(744,448), // object size
  NSPAIRA(_ZTI9S19518C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19518C10),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19518C10),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19518C3  : virtual S19518C4 , S19518C5 , virtual S19518C10 {
  void *s19518c3f0[2];
  int s19518c3f1[9];
  ::S19518C11 s19518c3f2;
  ::S19518C4 s19518c3f3[9];
  __tsi64 s19518c3f4;
  long double s19518c3f5;
  void *s19518c3f6;
  __tsi64 s19518c3f7;
  long s19518c3f8;
  __tsi64 s19518c3f9;
  virtual  ~S19518C3(); // _ZN8S19518C3D2Ev
  virtual void  v9(); // _ZN8S19518C32v9Ev
  S19518C3(); // tgen
};
//SIG(-1 S19518C3) C1{ VBC2{ v2} BC3{ BC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp} v6 v7 Fp FC6{ BC7{ BC8{ v9} Fc[5] FC9{ VBC8 v10 v11 v12 Fp[3] FC5 Fp}[2] Fi Fp[7] FC9 FC8 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC8 VBC9 Fi Fp} Fi Fp Fi[2]} VBC10{ VBC11{ BC2 Fc[5] FC4[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC2 FC12{ BC2 v13 Fc FL Fi[3] FC11} Fp Fi} vd v1 Fp[2] Fi[9] FC12 FC2[9] FL FD Fp FL Fl FL}


 S19518C3 ::~S19518C3(){ note_dtor("S19518C3", this);}
void  S19518C3 ::v9(){vfunc_called(this, "_ZN8S19518C32v9Ev");}
S19518C3 ::S19518C3(){ note_ctor("S19518C3", this);} // tgen

static void Test_S19518C3()
{
  extern Class_Descriptor cd_S19518C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(109,262)];
    init_test(&cd_S19518C3, buf);
    S19518C3 *dp, &lv = *(dp=new (buf) S19518C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1728,1044), "sizeof(S19518C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19518C3)");
    /*is_ambiguous_... S19518C3::S19518C4 */ AMB_check_base_class_offset(lv, (S19518C4*), 0, "S19518C3");
    check_base_class_offset(lv, (S19518C4*)(S19518C6*)(S19518C5*), 0, "S19518C3");
    check_base_class_offset(lv, (S19518C6*)(S19518C5*), 0, "S19518C3");
    check_base_class_offset(lv, (S19518C5*), 0, "S19518C3");
    check_base_class_offset(lv, (S19518C4*)(S19518C9*), ABISELECT(1416,860), "S19518C3");
    check_base_class_offset(lv, (S19518C9*)(S19518C10*), ABISELECT(1416,860), "S19518C3");
    check_base_class_offset(lv, (S19518C10*), ABISELECT(976,596), "S19518C3");
    check_field_offset(lv, s19518c3f0, ABISELECT(440,260), "S19518C3.s19518c3f0");
    check_field_offset(lv, s19518c3f1, ABISELECT(456,268), "S19518C3.s19518c3f1");
    check_field_offset(lv, s19518c3f2, ABISELECT(496,304), "S19518C3.s19518c3f2");
    check_field_offset(lv, s19518c3f3, ABISELECT(840,516), "S19518C3.s19518c3f3");
    check_field_offset(lv, s19518c3f4, ABISELECT(912,552), "S19518C3.s19518c3f4");
    check_field_offset(lv, s19518c3f5, ABISELECT(928,560), "S19518C3.s19518c3f5");
    check_field_offset(lv, s19518c3f6, ABISELECT(944,572), "S19518C3.s19518c3f6");
    check_field_offset(lv, s19518c3f7, ABISELECT(952,576), "S19518C3.s19518c3f7");
    check_field_offset(lv, s19518c3f8, ABISELECT(960,584), "S19518C3.s19518c3f8");
    check_field_offset(lv, s19518c3f9, ABISELECT(968,588), "S19518C3.s19518c3f9");
    test_class_info(&lv, &cd_S19518C3);
    dp->~S19518C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19518C3(Test_S19518C3, "S19518C3", ABISELECT(1728,1044));

#else // __cplusplus

extern void _ZN8S19518C3C1Ev();
extern void _ZN8S19518C3D2Ev();
Name_Map name_map_S19518C3[] = {
  NSPAIR(_ZN8S19518C3C1Ev),
  NSPAIR(_ZN8S19518C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19518C4;
extern VTBL_ENTRY _ZTI8S19518C4[];
extern  VTBL_ENTRY _ZTV8S19518C4[];
extern Class_Descriptor cd_S19518C6;
extern VTBL_ENTRY _ZTI8S19518C6[];
extern  VTBL_ENTRY _ZTV8S19518C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19518C6[];
extern Class_Descriptor cd_S19518C5;
extern VTBL_ENTRY _ZTI8S19518C5[];
extern  VTBL_ENTRY _ZTV8S19518C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19518C5[];
extern Class_Descriptor cd_S19518C4;
extern VTBL_ENTRY _ZTI8S19518C4[];
extern  VTBL_ENTRY _ZTV8S19518C4[];
extern Class_Descriptor cd_S19518C9;
extern VTBL_ENTRY _ZTI8S19518C9[];
extern  VTBL_ENTRY _ZTV8S19518C9[];
extern Class_Descriptor cd_S19518C10;
extern VTBL_ENTRY _ZTI9S19518C10[];
extern  VTBL_ENTRY _ZTV9S19518C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19518C10[];
static Base_Class bases_S19518C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19518C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19518C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19518C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19518C4,    ABISELECT(1416,860), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19518C9,    ABISELECT(1416,860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19518C10,    ABISELECT(976,596), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19518C3[];
extern void _ZN8S19518C42v2Ev();
extern void _ZN8S19518C62v3Ev();
extern void _ZN8S19518C62v4Ev();
extern void _ZN8S19518C62v5Ev();
extern void _ZN8S19518C52v6Ev();
extern void _ZN8S19518C52v7Ev();
extern void _ZN8S19518C3D1Ev();
extern void _ZN8S19518C3D0Ev();
extern void _ZN8S19518C32v9Ev();
extern void _ZN9S19518C102v8Ev();
extern void _ZN8S19518C42v2Ev();
static  VTBL_ENTRY vtc_S19518C3[] = {
  ABISELECT(1416,860),
  ABISELECT(976,596),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19518C3[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19518C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19518C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19518C32v9Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S19518C3[0]),
  (VTBL_ENTRY)&_ZN9S19518C102v8Ev,
  0,
  ABISELECT(-1416,-860),
  (VTBL_ENTRY)&(_ZTI8S19518C3[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S19518C3[];
extern void _ZN8S19518C42v2Ev();
extern void _ZN8S19518C62v3Ev();
extern void _ZN8S19518C62v4Ev();
extern void _ZN8S19518C62v5Ev();
extern void _ZN8S19518C52v6Ev();
extern void _ZN8S19518C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C5__8S19518C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19518C5[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v7Ev,
};
extern void _ZN8S19518C42v2Ev();
extern void _ZN8S19518C62v3Ev();
extern void _ZN8S19518C62v4Ev();
extern void _ZN8S19518C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C68S19518C5__8S19518C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19518C6[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v5Ev,
};
extern void _ZN9S19518C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19518C10__8S19518C3[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19518C10[0]),
  (VTBL_ENTRY)&_ZN9S19518C102v8Ev,
};
extern void _ZN8S19518C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C48S19518C9__9S19518C10__8S19518C3[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19518C10[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
};
static  VTT_ENTRY vtt_S19518C3[] = {
  {&(_ZTV8S19518C3[6]),  6,24},
  {&(_tg__ZTV8S19518C5__8S19518C3[4]),  4,10},
  {&(_tg__ZTV8S19518C68S19518C5__8S19518C3[4]),  4,8},
  {&(_tg__ZTV8S19518C68S19518C5__8S19518C3[4]),  4,8},
  {&(_tg__ZTV8S19518C5__8S19518C3[4]),  4,10},
  {&(_ZTV8S19518C3[6]),  6,24},
  {&(_ZTV8S19518C3[19]),  19,24},
  {&(_ZTV8S19518C3[23]),  23,24},
  {&(_tg__ZTV9S19518C10__8S19518C3[3]),  3,4},
  {&(_tg__ZTV8S19518C48S19518C9__9S19518C10__8S19518C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19518C3[];
extern  VTBL_ENTRY _ZTV8S19518C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19518C3[];
Class_Descriptor cd_S19518C3 = {  "S19518C3", // class name
  bases_S19518C3, 6,
  &(vtc_S19518C3[0]), // expected_vtbl_contents
  &(vtt_S19518C3[0]), // expected_vtt_contents
  ABISELECT(1728,1044), // object size
  NSPAIRA(_ZTI8S19518C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19518C3),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19518C3),10, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19518C2  : S19518C3 , S19518C11 {
  void *s19518c2f0;
  __tsi64 s19518c2f1[3];
  int s19518c2f2;
  __tsi64 s19518c2f3;
  virtual  ~S19518C2(); // _ZN8S19518C2D2Ev
  virtual void  v11(); // _ZN8S19518C23v11Ev
  S19518C2(); // tgen
};
//SIG(-1 S19518C2) C1{ BC2{ VBC3{ v2} BC4{ BC5{ VBC3 v3 v4 v5 Fp[3] FC6{} Fp} v6 v7 Fp FC7{ BC8{ BC9{ v11} Fc[5] FC10{ VBC9 v12 v13 v14 Fp[3] FC6 Fp}[2] Fi Fp[7] FC10 FC9 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC9 VBC10 Fi Fp} Fi Fp Fi[2]} VBC11{ VBC12{ BC3 Fc[5] FC5[2] Fi Fp[7] FC5 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC3 FC13{ BC3 v10 Fc FL Fi[3] FC12} Fp Fi} vd v9 Fp[2] Fi[9] FC13 FC3[9] FL FD Fp FL Fl FL} BC13 vd v1 Fp FL[3] Fi FL}


 S19518C2 ::~S19518C2(){ note_dtor("S19518C2", this);}
void  S19518C2 ::v11(){vfunc_called(this, "_ZN8S19518C23v11Ev");}
S19518C2 ::S19518C2(){ note_ctor("S19518C2", this);} // tgen

static void Test_S19518C2()
{
  extern Class_Descriptor cd_S19518C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(133,325)];
    init_test(&cd_S19518C2, buf);
    S19518C2 *dp, &lv = *(dp=new (buf) S19518C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2112,1296), "sizeof(S19518C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19518C2)");
    /*is_ambiguous_... S19518C3::S19518C4 */ AMB_check_base_class_offset(lv, (S19518C4*)(S19518C3*), 0, "S19518C2");
    check_base_class_offset(lv, (S19518C4*)(S19518C6*)(S19518C5*)(S19518C3*), 0, "S19518C2");
    check_base_class_offset(lv, (S19518C6*)(S19518C5*)(S19518C3*), 0, "S19518C2");
    check_base_class_offset(lv, (S19518C5*)(S19518C3*), 0, "S19518C2");
    check_base_class_offset(lv, (S19518C4*)(S19518C9*), ABISELECT(1808,1112), "S19518C2");
    check_base_class_offset(lv, (S19518C9*)(S19518C10*), ABISELECT(1808,1112), "S19518C2");
    check_base_class_offset(lv, (S19518C10*)(S19518C3*), ABISELECT(1368,848), "S19518C2");
    check_base_class_offset(lv, (S19518C3*), 0, "S19518C2");
    check_base_class_offset(lv, (S19518C4*)(S19518C11*), ABISELECT(976,596), "S19518C2");
    check_base_class_offset(lv, (S19518C11*), ABISELECT(976,596), "S19518C2");
    check_field_offset(lv, s19518c2f0, ABISELECT(1320,808), "S19518C2.s19518c2f0");
    check_field_offset(lv, s19518c2f1, ABISELECT(1328,812), "S19518C2.s19518c2f1");
    check_field_offset(lv, s19518c2f2, ABISELECT(1352,836), "S19518C2.s19518c2f2");
    check_field_offset(lv, s19518c2f3, ABISELECT(1360,840), "S19518C2.s19518c2f3");
    test_class_info(&lv, &cd_S19518C2);
    dp->~S19518C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19518C2(Test_S19518C2, "S19518C2", ABISELECT(2112,1296));

#else // __cplusplus

extern void _ZN8S19518C2C1Ev();
extern void _ZN8S19518C2D2Ev();
Name_Map name_map_S19518C2[] = {
  NSPAIR(_ZN8S19518C2C1Ev),
  NSPAIR(_ZN8S19518C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19518C4;
extern VTBL_ENTRY _ZTI8S19518C4[];
extern  VTBL_ENTRY _ZTV8S19518C4[];
extern Class_Descriptor cd_S19518C6;
extern VTBL_ENTRY _ZTI8S19518C6[];
extern  VTBL_ENTRY _ZTV8S19518C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19518C6[];
extern Class_Descriptor cd_S19518C5;
extern VTBL_ENTRY _ZTI8S19518C5[];
extern  VTBL_ENTRY _ZTV8S19518C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19518C5[];
extern Class_Descriptor cd_S19518C4;
extern VTBL_ENTRY _ZTI8S19518C4[];
extern  VTBL_ENTRY _ZTV8S19518C4[];
extern Class_Descriptor cd_S19518C9;
extern VTBL_ENTRY _ZTI8S19518C9[];
extern  VTBL_ENTRY _ZTV8S19518C9[];
extern Class_Descriptor cd_S19518C10;
extern VTBL_ENTRY _ZTI9S19518C10[];
extern  VTBL_ENTRY _ZTV9S19518C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19518C10[];
extern Class_Descriptor cd_S19518C3;
extern VTBL_ENTRY _ZTI8S19518C3[];
extern  VTBL_ENTRY _ZTV8S19518C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19518C3[];
extern Class_Descriptor cd_S19518C4;
extern VTBL_ENTRY _ZTI8S19518C4[];
extern  VTBL_ENTRY _ZTV8S19518C4[];
extern Class_Descriptor cd_S19518C11;
extern VTBL_ENTRY _ZTI9S19518C11[];
extern  VTBL_ENTRY _ZTV9S19518C11[];
static Base_Class bases_S19518C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19518C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19518C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19518C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19518C4,    ABISELECT(1808,1112), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19518C9,    ABISELECT(1808,1112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19518C10,    ABISELECT(1368,848), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19518C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19518C4,    ABISELECT(976,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19518C11,    ABISELECT(976,596), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19518C2[];
extern void _ZN8S19518C42v2Ev();
extern void _ZN8S19518C62v3Ev();
extern void _ZN8S19518C62v4Ev();
extern void _ZN8S19518C62v5Ev();
extern void _ZN8S19518C52v6Ev();
extern void _ZN8S19518C52v7Ev();
extern void _ZN8S19518C2D1Ev();
extern void _ZN8S19518C2D0Ev();
extern void _ZN8S19518C32v9Ev();
extern void _ZN8S19518C23v11Ev();
extern void _ZN8S19518C42v2Ev();
extern void _ZN9S19518C113v10Ev();
extern void _ZN9S19518C102v8Ev();
extern void _ZN8S19518C42v2Ev();
static  VTBL_ENTRY vtc_S19518C2[] = {
  ABISELECT(1808,1112),
  ABISELECT(1368,848),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19518C2[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19518C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19518C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19518C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19518C23v11Ev,
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S19518C2[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
  (VTBL_ENTRY)&_ZN9S19518C113v10Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-1368,-848),
  (VTBL_ENTRY)&(_ZTI8S19518C2[0]),
  (VTBL_ENTRY)&_ZN9S19518C102v8Ev,
  0,
  ABISELECT(-1808,-1112),
  (VTBL_ENTRY)&(_ZTI8S19518C2[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S19518C2[];
extern void _ZN8S19518C42v2Ev();
extern void _ZN8S19518C62v3Ev();
extern void _ZN8S19518C62v4Ev();
extern void _ZN8S19518C62v5Ev();
extern void _ZN8S19518C52v6Ev();
extern void _ZN8S19518C52v7Ev();
extern void _ZN8S19518C3D1Ev();
extern void _ZN8S19518C3D0Ev();
extern void _ZN8S19518C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C3__8S19518C2[] = {
  ABISELECT(1808,1112),
  ABISELECT(1368,848),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19518C3[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19518C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19518C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19518C32v9Ev,
};
extern void _ZN8S19518C42v2Ev();
extern void _ZN8S19518C62v3Ev();
extern void _ZN8S19518C62v4Ev();
extern void _ZN8S19518C62v5Ev();
extern void _ZN8S19518C52v6Ev();
extern void _ZN8S19518C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C58S19518C3__8S19518C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19518C5[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v7Ev,
};
extern void _ZN8S19518C42v2Ev();
extern void _ZN8S19518C62v3Ev();
extern void _ZN8S19518C62v4Ev();
extern void _ZN8S19518C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C68S19518C58S19518C3__8S19518C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19518C6[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v5Ev,
};
extern void _ZN9S19518C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19518C10__8S19518C3__8S19518C2[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-1368,-848),
  (VTBL_ENTRY)&(_ZTI8S19518C3[0]),
  (VTBL_ENTRY)&_ZN9S19518C102v8Ev,
};
extern void _ZN8S19518C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C48S19518C9__A1__8S19518C3__8S19518C2[] = {
  0,
  ABISELECT(-1808,-1112),
  (VTBL_ENTRY)&(_ZTI8S19518C3[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
};
extern void _ZN9S19518C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19518C10__8S19518C2[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19518C10[0]),
  (VTBL_ENTRY)&_ZN9S19518C102v8Ev,
};
extern void _ZN8S19518C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C48S19518C9__9S19518C10__8S19518C2[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19518C10[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
};
static  VTT_ENTRY vtt_S19518C2[] = {
  {&(_ZTV8S19518C2[6]),  6,29},
  {&(_tg__ZTV8S19518C3__8S19518C2[6]),  6,15},
  {&(_tg__ZTV8S19518C58S19518C3__8S19518C2[4]),  4,10},
  {&(_tg__ZTV8S19518C68S19518C58S19518C3__8S19518C2[4]),  4,8},
  {&(_tg__ZTV8S19518C68S19518C58S19518C3__8S19518C2[4]),  4,8},
  {&(_tg__ZTV8S19518C58S19518C3__8S19518C2[4]),  4,10},
  {&(_tg__ZTV8S19518C3__8S19518C2[6]),  6,15},
  {&(_tg__ZTV9S19518C10__8S19518C3__8S19518C2[4]),  4,5},
  {&(_tg__ZTV8S19518C48S19518C9__A1__8S19518C3__8S19518C2[3]),  3,4},
  {&(_ZTV8S19518C2[6]),  6,29},
  {&(_ZTV8S19518C2[24]),  24,29},
  {&(_ZTV8S19518C2[28]),  28,29},
  {&(_tg__ZTV9S19518C10__8S19518C2[3]),  3,4},
  {&(_tg__ZTV8S19518C48S19518C9__9S19518C10__8S19518C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19518C2[];
extern  VTBL_ENTRY _ZTV8S19518C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19518C2[];
Class_Descriptor cd_S19518C2 = {  "S19518C2", // class name
  bases_S19518C2, 9,
  &(vtc_S19518C2[0]), // expected_vtbl_contents
  &(vtt_S19518C2[0]), // expected_vtt_contents
  ABISELECT(2112,1296), // object size
  NSPAIRA(_ZTI8S19518C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19518C2),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19518C2),14, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19518C1  : virtual S19518C2 {
  int s19518c1f0;
  long double s19518c1f1;
  ::S19277C12_nt s19518c1f2;
  unsigned short s19518c1f3:1;
  int s19518c1f4;
  void *s19518c1f5;
  long double s19518c1f6;
  int s19518c1f7[2];
  ::S19277C19 s19518c1f8;
  __tsi64 s19518c1f9[10];
  virtual  ~S19518C1(); // _ZN8S19518C1D2Ev
  virtual void  v1(); // _ZN8S19518C12v1Ev
  S19518C1(); // tgen
};
//SIG(1 S19518C1) C1{ VBC2{ BC3{ VBC4{ v2} BC5{ BC6{ VBC4 v3 v4 v5 Fp[3] FC7{} Fp} v6 v7 Fp FC8{ BC9{ BC10{ v14} Fc[5] FC11{ VBC10 v15 v16 v17 Fp[3] FC7 Fp}[2] Fi Fp[7] FC11 FC10 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC10 VBC11 Fi Fp} Fi Fp Fi[2]} VBC12{ VBC13{ BC4 Fc[5] FC6[2] Fi Fp[7] FC6 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC4 FC14{ BC4 v10 Fc FL Fi[3] FC13} Fp Fi} vd v9 Fp[2] Fi[9] FC14 FC4[9] FL FD Fp FL Fl FL} BC14 vd v11 Fp FL[3] Fi FL} vd v1 Fi FD FC15{ vd v12 Fi} Fs:1 Fi Fp FD Fi[2] FC16{ BC17{ BC11 v18 v19 Fp FC8 Fi Fp Fi[2]} v13 Fs:16 FL Fc FL[10] Fi[10] FL[4] Fp FU18{ m Fp FL FL Fi:27 Fs:16 Fs Fp}} FL[10]}


 S19518C1 ::~S19518C1(){ note_dtor("S19518C1", this);}
void  S19518C1 ::v1(){vfunc_called(this, "_ZN8S19518C12v1Ev");}
S19518C1 ::S19518C1(){ note_ctor("S19518C1", this);} // tgen

static void Test_S19518C1()
{
  extern Class_Descriptor cd_S19518C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(183,470)];
    init_test(&cd_S19518C1, buf);
    S19518C1 *dp, &lv = *(dp=new (buf) S19518C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2912,1876), "sizeof(S19518C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19518C1)");
    /*is_ambiguous_... S19518C3::S19518C4 */ AMB_check_base_class_offset(lv, (S19518C4*)(S19518C3*)(S19518C2*), 0, "S19518C1");
    check_base_class_offset(lv, (S19518C4*)(S19518C6*)(S19518C5*)(S19518C3*)(S19518C2*), 0, "S19518C1");
    check_base_class_offset(lv, (S19518C6*)(S19518C5*)(S19518C3*)(S19518C2*), ABISELECT(800,580), "S19518C1");
    check_base_class_offset(lv, (S19518C5*)(S19518C3*)(S19518C2*), ABISELECT(800,580), "S19518C1");
    check_base_class_offset(lv, (S19518C4*)(S19518C9*), ABISELECT(2608,1692), "S19518C1");
    check_base_class_offset(lv, (S19518C9*)(S19518C10*), ABISELECT(2608,1692), "S19518C1");
    check_base_class_offset(lv, (S19518C10*)(S19518C3*)(S19518C2*), ABISELECT(2168,1428), "S19518C1");
    check_base_class_offset(lv, (S19518C3*)(S19518C2*), ABISELECT(800,580), "S19518C1");
    check_base_class_offset(lv, (S19518C4*)(S19518C11*)(S19518C2*), ABISELECT(1776,1176), "S19518C1");
    check_base_class_offset(lv, (S19518C11*)(S19518C2*), ABISELECT(1776,1176), "S19518C1");
    check_base_class_offset(lv, (S19518C2*), ABISELECT(800,580), "S19518C1");
    check_field_offset(lv, s19518c1f0, ABISELECT(8,4), "S19518C1.s19518c1f0");
    check_field_offset(lv, s19518c1f1, ABISELECT(16,8), "S19518C1.s19518c1f1");
    check_field_offset(lv, s19518c1f2, ABISELECT(32,20), "S19518C1.s19518c1f2");
    set_bf_and_test(lv, s19518c1f3, ABISELECT(48,28), 0, 1, 1, "S19518C1");
    check_field_offset(lv, s19518c1f4, ABISELECT(52,32), "S19518C1.s19518c1f4");
    check_field_offset(lv, s19518c1f5, ABISELECT(56,36), "S19518C1.s19518c1f5");
    check_field_offset(lv, s19518c1f6, ABISELECT(64,40), "S19518C1.s19518c1f6");
    check_field_offset(lv, s19518c1f7, ABISELECT(80,52), "S19518C1.s19518c1f7");
    check_field_offset(lv, s19518c1f8, ABISELECT(88,60), "S19518C1.s19518c1f8");
    check_field_offset(lv, s19518c1f9, ABISELECT(720,500), "S19518C1.s19518c1f9");
    test_class_info(&lv, &cd_S19518C1);
    dp->~S19518C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19518C1(Test_S19518C1, "S19518C1", ABISELECT(2912,1876));

#else // __cplusplus

extern void _ZN8S19518C1C1Ev();
extern void _ZN8S19518C1D2Ev();
Name_Map name_map_S19518C1[] = {
  NSPAIR(_ZN8S19518C1C1Ev),
  NSPAIR(_ZN8S19518C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19518C4;
extern VTBL_ENTRY _ZTI8S19518C4[];
extern  VTBL_ENTRY _ZTV8S19518C4[];
extern Class_Descriptor cd_S19518C6;
extern VTBL_ENTRY _ZTI8S19518C6[];
extern  VTBL_ENTRY _ZTV8S19518C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19518C6[];
extern Class_Descriptor cd_S19518C5;
extern VTBL_ENTRY _ZTI8S19518C5[];
extern  VTBL_ENTRY _ZTV8S19518C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19518C5[];
extern Class_Descriptor cd_S19518C4;
extern VTBL_ENTRY _ZTI8S19518C4[];
extern  VTBL_ENTRY _ZTV8S19518C4[];
extern Class_Descriptor cd_S19518C9;
extern VTBL_ENTRY _ZTI8S19518C9[];
extern  VTBL_ENTRY _ZTV8S19518C9[];
extern Class_Descriptor cd_S19518C10;
extern VTBL_ENTRY _ZTI9S19518C10[];
extern  VTBL_ENTRY _ZTV9S19518C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19518C10[];
extern Class_Descriptor cd_S19518C3;
extern VTBL_ENTRY _ZTI8S19518C3[];
extern  VTBL_ENTRY _ZTV8S19518C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19518C3[];
extern Class_Descriptor cd_S19518C4;
extern VTBL_ENTRY _ZTI8S19518C4[];
extern  VTBL_ENTRY _ZTV8S19518C4[];
extern Class_Descriptor cd_S19518C11;
extern VTBL_ENTRY _ZTI9S19518C11[];
extern  VTBL_ENTRY _ZTV9S19518C11[];
extern Class_Descriptor cd_S19518C2;
extern VTBL_ENTRY _ZTI8S19518C2[];
extern  VTBL_ENTRY _ZTV8S19518C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19518C2[];
static Base_Class bases_S19518C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19518C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19518C6,    ABISELECT(800,580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19518C5,    ABISELECT(800,580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19518C4,    ABISELECT(2608,1692), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19518C9,    ABISELECT(2608,1692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19518C10,    ABISELECT(2168,1428), //bcp->offset
    40, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19518C3,    ABISELECT(800,580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19518C4,    ABISELECT(1776,1176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19518C11,    ABISELECT(1776,1176), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19518C2,    ABISELECT(800,580), //bcp->offset
    11, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19518C1[];
extern void _ZN8S19518C42v2Ev();
extern void _ZN8S19518C1D1Ev();
extern void _ZN8S19518C1D0Ev();
extern void _ZN8S19518C12v1Ev();
extern void _ZN8S19518C42v2Ev();
extern void _ZN8S19518C62v3Ev();
extern void _ZN8S19518C62v4Ev();
extern void _ZN8S19518C62v5Ev();
extern void _ZN8S19518C52v6Ev();
extern void _ZN8S19518C52v7Ev();
extern void ABISELECT(_ZTv0_n96_N8S19518C1D1Ev,_ZTv0_n48_N8S19518C1D1Ev)();
extern void ABISELECT(_ZThn800_N8S19518C1D1Ev,_ZThn580_N8S19518C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19518C1D0Ev,_ZTv0_n48_N8S19518C1D0Ev)();
extern void ABISELECT(_ZThn800_N8S19518C1D0Ev,_ZThn580_N8S19518C1D0Ev)() __attribute__((weak));
extern void _ZN8S19518C32v9Ev();
extern void _ZN8S19518C23v11Ev();
extern void _ZN8S19518C42v2Ev();
extern void _ZN9S19518C113v10Ev();
extern void _ZN9S19518C102v8Ev();
extern void _ZN8S19518C42v2Ev();
static  VTBL_ENTRY vtc_S19518C1[] = {
  ABISELECT(2608,1692),
  ABISELECT(2168,1428),
  0,
  ABISELECT(800,580),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19518C1[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19518C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19518C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19518C12v1Ev,
  ABISELECT(976,596),
  0,
  0,
  ABISELECT(-800,-580),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1808,1112),
  ABISELECT(1368,848),
  ABISELECT(-800,-580),
  ABISELECT(-800,-580),
  ABISELECT(-800,-580),
  (VTBL_ENTRY)&(_ZTI8S19518C1[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19518C1D1Ev,_ZTv0_n48_N8S19518C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19518C1D0Ev,_ZTv0_n48_N8S19518C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19518C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19518C23v11Ev,
  ABISELECT(-1776,-1176),
  (VTBL_ENTRY)&(_ZTI8S19518C1[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
  (VTBL_ENTRY)&_ZN9S19518C113v10Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-2168,-1428),
  (VTBL_ENTRY)&(_ZTI8S19518C1[0]),
  (VTBL_ENTRY)&_ZN9S19518C102v8Ev,
  0,
  ABISELECT(-2608,-1692),
  (VTBL_ENTRY)&(_ZTI8S19518C1[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S19518C1[];
extern void _ZN8S19518C42v2Ev();
extern void _ZN8S19518C62v3Ev();
extern void _ZN8S19518C62v4Ev();
extern void _ZN8S19518C62v5Ev();
extern void _ZN8S19518C52v6Ev();
extern void _ZN8S19518C52v7Ev();
extern void _ZN8S19518C2D1Ev();
extern void _ZN8S19518C2D0Ev();
extern void _ZN8S19518C32v9Ev();
extern void _ZN8S19518C23v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C2__8S19518C1[] = {
  ABISELECT(1808,1112),
  ABISELECT(1368,848),
  ABISELECT(-800,-580),
  ABISELECT(-800,-580),
  0,
  (VTBL_ENTRY)&(_ZTI8S19518C2[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19518C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19518C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19518C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19518C23v11Ev,
};
extern void _ZN8S19518C42v2Ev();
extern void _ZN8S19518C62v3Ev();
extern void _ZN8S19518C62v4Ev();
extern void _ZN8S19518C62v5Ev();
extern void _ZN8S19518C52v6Ev();
extern void _ZN8S19518C52v7Ev();
extern void _ZN8S19518C3D1Ev();
extern void _ZN8S19518C3D0Ev();
extern void _ZN8S19518C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C38S19518C2__8S19518C1[] = {
  ABISELECT(1808,1112),
  ABISELECT(1368,848),
  ABISELECT(-800,-580),
  ABISELECT(-800,-580),
  0,
  (VTBL_ENTRY)&(_ZTI8S19518C3[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19518C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19518C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19518C32v9Ev,
};
extern void _ZN8S19518C42v2Ev();
extern void _ZN8S19518C62v3Ev();
extern void _ZN8S19518C62v4Ev();
extern void _ZN8S19518C62v5Ev();
extern void _ZN8S19518C52v6Ev();
extern void _ZN8S19518C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C58S19518C38S19518C2__8S19518C1[] = {
  ABISELECT(-800,-580),
  ABISELECT(-800,-580),
  0,
  (VTBL_ENTRY)&(_ZTI8S19518C5[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19518C52v7Ev,
};
extern void _ZN8S19518C42v2Ev();
extern void _ZN8S19518C62v3Ev();
extern void _ZN8S19518C62v4Ev();
extern void _ZN8S19518C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C68S19518C58S19518C38S19518C2__8S19518C1[] = {
  ABISELECT(-800,-580),
  ABISELECT(-800,-580),
  0,
  (VTBL_ENTRY)&(_ZTI8S19518C6[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19518C62v5Ev,
};
extern void _ZN8S19518C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C4__8S19518C68S19518C58S19518C38S19518C2__8S19518C1[] = {
  0,
  ABISELECT(800,580),
  (VTBL_ENTRY)&(_ZTI8S19518C6[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
};
extern void _ZN8S19518C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C4__8S19518C58S19518C38S19518C2__8S19518C1[] = {
  0,
  ABISELECT(800,580),
  (VTBL_ENTRY)&(_ZTI8S19518C5[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
};
extern void _ZN8S19518C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C4__8S19518C38S19518C2__8S19518C1[] = {
  0,
  ABISELECT(800,580),
  (VTBL_ENTRY)&(_ZTI8S19518C3[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
};
extern void _ZN9S19518C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19518C10__8S19518C38S19518C2__8S19518C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-1368,-848),
  (VTBL_ENTRY)&(_ZTI8S19518C3[0]),
  (VTBL_ENTRY)&_ZN9S19518C102v8Ev,
};
extern void _ZN8S19518C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C48S19518C9__A1__8S19518C38S19518C2__8S19518C1[] = {
  0,
  ABISELECT(-1808,-1112),
  (VTBL_ENTRY)&(_ZTI8S19518C3[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
};
extern void _ZN8S19518C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C4__8S19518C2__8S19518C1[] = {
  0,
  ABISELECT(800,580),
  (VTBL_ENTRY)&(_ZTI8S19518C2[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
};
extern void _ZN9S19518C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19518C10__8S19518C2__8S19518C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-1368,-848),
  (VTBL_ENTRY)&(_ZTI8S19518C2[0]),
  (VTBL_ENTRY)&_ZN9S19518C102v8Ev,
};
extern void _ZN8S19518C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C48S19518C9__A1__8S19518C2__8S19518C1[] = {
  0,
  ABISELECT(-1808,-1112),
  (VTBL_ENTRY)&(_ZTI8S19518C2[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
};
extern void _ZN9S19518C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19518C10__8S19518C1[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19518C10[0]),
  (VTBL_ENTRY)&_ZN9S19518C102v8Ev,
};
extern void _ZN8S19518C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19518C48S19518C9__9S19518C10__8S19518C1[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19518C10[0]),
  (VTBL_ENTRY)&_ZN8S19518C42v2Ev,
};
static  VTT_ENTRY vtt_S19518C1[] = {
  {&(_ZTV8S19518C1[7]),  7,49},
  {&(_ZTV8S19518C1[26]),  26,49},
  {&(_ZTV8S19518C1[7]),  7,49},
  {&(_ZTV8S19518C1[44]),  44,49},
  {&(_ZTV8S19518C1[48]),  48,49},
  {&(_ZTV8S19518C1[38]),  38,49},
  {&(_tg__ZTV8S19518C2__8S19518C1[6]),  6,16},
  {&(_tg__ZTV8S19518C38S19518C2__8S19518C1[6]),  6,15},
  {&(_tg__ZTV8S19518C58S19518C38S19518C2__8S19518C1[4]),  4,10},
  {&(_tg__ZTV8S19518C68S19518C58S19518C38S19518C2__8S19518C1[4]),  4,8},
  {&(_tg__ZTV8S19518C4__8S19518C68S19518C58S19518C38S19518C2__8S19518C1[3]),  3,4},
  {&(_tg__ZTV8S19518C4__8S19518C58S19518C38S19518C2__8S19518C1[3]),  3,4},
  {&(_tg__ZTV8S19518C4__8S19518C38S19518C2__8S19518C1[3]),  3,4},
  {&(_tg__ZTV9S19518C10__8S19518C38S19518C2__8S19518C1[4]),  4,5},
  {&(_tg__ZTV8S19518C48S19518C9__A1__8S19518C38S19518C2__8S19518C1[3]),  3,4},
  {&(_tg__ZTV8S19518C4__8S19518C2__8S19518C1[3]),  3,4},
  {&(_tg__ZTV9S19518C10__8S19518C2__8S19518C1[4]),  4,5},
  {&(_tg__ZTV8S19518C48S19518C9__A1__8S19518C2__8S19518C1[3]),  3,4},
  {&(_tg__ZTV9S19518C10__8S19518C1[3]),  3,4},
  {&(_tg__ZTV8S19518C48S19518C9__9S19518C10__8S19518C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19518C1[];
extern  VTBL_ENTRY _ZTV8S19518C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19518C1[];
static VTBL_ENTRY alt_thunk_names76[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19518C1D0Ev,_ZTv0_n48_N8S19518C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S19518C1D0Ev,_ZThn580_N8S19518C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19518C1D1Ev,_ZTv0_n48_N8S19518C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S19518C1D1Ev,_ZThn580_N8S19518C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19518C1 = {  "S19518C1", // class name
  bases_S19518C1, 10,
  &(vtc_S19518C1[0]), // expected_vtbl_contents
  &(vtt_S19518C1[0]), // expected_vtt_contents
  ABISELECT(2912,1876), // object size
  NSPAIRA(_ZTI8S19518C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19518C1),49, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19518C1),20, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names76,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20112C2  {
  void *s20112c2f0[2];
  char s20112c2f1[10];
  __tsi64 s20112c2f2;
  long double s20112c2f3;
  __tsi64 s20112c2f4:8;
  void *s20112c2f5;
  long double s20112c2f6;
  virtual void  v3(); // _ZN8S20112C22v3Ev
  ~S20112C2(); // tgen
  S20112C2(); // tgen
};
//SIG(-1 S20112C2) C1{ v1 Fp[2] Fc[10] FL FD FL:8 Fp FD}


void  S20112C2 ::v3(){vfunc_called(this, "_ZN8S20112C22v3Ev");}
S20112C2 ::~S20112C2(){ note_dtor("S20112C2", this);} // tgen
S20112C2 ::S20112C2(){ note_ctor("S20112C2", this);} // tgen

static void Test_S20112C2()
{
  extern Class_Descriptor cd_S20112C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,17)];
    init_test(&cd_S20112C2, buf);
    S20112C2 *dp, &lv = *(dp=new (buf) S20112C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S20112C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20112C2)");
    check_field_offset(lv, s20112c2f0, ABISELECT(8,4), "S20112C2.s20112c2f0");
    check_field_offset(lv, s20112c2f1, ABISELECT(24,12), "S20112C2.s20112c2f1");
    check_field_offset(lv, s20112c2f2, ABISELECT(40,24), "S20112C2.s20112c2f2");
    check_field_offset(lv, s20112c2f3, ABISELECT(48,32), "S20112C2.s20112c2f3");
    set_bf_and_test(lv, s20112c2f4, ABISELECT(64,44), 0, 8, 1, "S20112C2");
    set_bf_and_test(lv, s20112c2f4, ABISELECT(64,44), 0, 8, hide_sll(1LL<<7), "S20112C2");
    check_field_offset(lv, s20112c2f5, ABISELECT(72,48), "S20112C2.s20112c2f5");
    check_field_offset(lv, s20112c2f6, ABISELECT(80,52), "S20112C2.s20112c2f6");
    test_class_info(&lv, &cd_S20112C2);
    dp->~S20112C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20112C2(Test_S20112C2, "S20112C2", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN8S20112C2C1Ev();
extern void _ZN8S20112C2D1Ev();
Name_Map name_map_S20112C2[] = {
  NSPAIR(_ZN8S20112C2C1Ev),
  NSPAIR(_ZN8S20112C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20112C2[];
extern void _ZN8S20112C22v3Ev();
static  VTBL_ENTRY vtc_S20112C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C2[0]),
  (VTBL_ENTRY)&_ZN8S20112C22v3Ev,
};
extern VTBL_ENTRY _ZTI8S20112C2[];
extern  VTBL_ENTRY _ZTV8S20112C2[];
Class_Descriptor cd_S20112C2 = {  "S20112C2", // class name
  0,0,//no base classes
  &(vtc_S20112C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI8S20112C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20112C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20112C5  {
  virtual void  v4(); // _ZN8S20112C52v4Ev
  ~S20112C5(); // tgen
  S20112C5(); // tgen
};
//SIG(-1 S20112C5) C1{ v1}


void  S20112C5 ::v4(){vfunc_called(this, "_ZN8S20112C52v4Ev");}
S20112C5 ::~S20112C5(){ note_dtor("S20112C5", this);} // tgen
S20112C5 ::S20112C5(){ note_ctor("S20112C5", this);} // tgen

static void Test_S20112C5()
{
  extern Class_Descriptor cd_S20112C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20112C5, buf);
    S20112C5 *dp, &lv = *(dp=new (buf) S20112C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20112C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20112C5)");
    test_class_info(&lv, &cd_S20112C5);
    dp->~S20112C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20112C5(Test_S20112C5, "S20112C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20112C5C1Ev();
extern void _ZN8S20112C5D1Ev();
Name_Map name_map_S20112C5[] = {
  NSPAIR(_ZN8S20112C5C1Ev),
  NSPAIR(_ZN8S20112C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20112C5[];
extern void _ZN8S20112C52v4Ev();
static  VTBL_ENTRY vtc_S20112C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C5[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
};
extern VTBL_ENTRY _ZTI8S20112C5[];
extern  VTBL_ENTRY _ZTV8S20112C5[];
Class_Descriptor cd_S20112C5 = {  "S20112C5", // class name
  0,0,//no base classes
  &(vtc_S20112C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20112C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20112C5),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20112C7  : virtual S20112C5 {
  void *s20112c7f0[3];
  ::S2489C12_nt s20112c7f1;
  void *s20112c7f2;
  virtual void  v5(); // _ZN8S20112C72v5Ev
  virtual void  v6(); // _ZN8S20112C72v6Ev
  virtual void  v7(); // _ZN8S20112C72v7Ev
  ~S20112C7(); // tgen
  S20112C7(); // tgen
};
//SIG(-1 S20112C7) C1{ VBC2{ v4} v1 v2 v3 Fp[3] FC3{} Fp}


void  S20112C7 ::v5(){vfunc_called(this, "_ZN8S20112C72v5Ev");}
void  S20112C7 ::v6(){vfunc_called(this, "_ZN8S20112C72v6Ev");}
void  S20112C7 ::v7(){vfunc_called(this, "_ZN8S20112C72v7Ev");}
S20112C7 ::~S20112C7(){ note_dtor("S20112C7", this);} // tgen
S20112C7 ::S20112C7(){ note_ctor("S20112C7", this);} // tgen

static void Test_S20112C7()
{
  extern Class_Descriptor cd_S20112C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S20112C7, buf);
    S20112C7 *dp, &lv = *(dp=new (buf) S20112C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20112C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20112C7)");
    check_base_class_offset(lv, (S20112C5*), 0, "S20112C7");
    check_field_offset(lv, s20112c7f0, ABISELECT(8,4), "S20112C7.s20112c7f0");
    check_field_offset(lv, s20112c7f1, ABISELECT(32,16), "S20112C7.s20112c7f1");
    check_field_offset(lv, s20112c7f2, ABISELECT(40,20), "S20112C7.s20112c7f2");
    test_class_info(&lv, &cd_S20112C7);
    dp->~S20112C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20112C7(Test_S20112C7, "S20112C7", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20112C7C1Ev();
extern void _ZN8S20112C7D1Ev();
Name_Map name_map_S20112C7[] = {
  NSPAIR(_ZN8S20112C7C1Ev),
  NSPAIR(_ZN8S20112C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20112C5;
extern VTBL_ENTRY _ZTI8S20112C5[];
extern  VTBL_ENTRY _ZTV8S20112C5[];
static Base_Class bases_S20112C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20112C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20112C7[];
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
static  VTBL_ENTRY vtc_S20112C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C7[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
};
extern VTBL_ENTRY _ZTV8S20112C7[];
static  VTT_ENTRY vtt_S20112C7[] = {
  {&(_ZTV8S20112C7[4]),  4,8},
  {&(_ZTV8S20112C7[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S20112C7[];
extern  VTBL_ENTRY _ZTV8S20112C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20112C7[];
Class_Descriptor cd_S20112C7 = {  "S20112C7", // class name
  bases_S20112C7, 1,
  &(vtc_S20112C7[0]), // expected_vtbl_contents
  &(vtt_S20112C7[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20112C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20112C7),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20112C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20112C6  : S20112C7 {
  void *s20112c6f0;
  ::S19277C8 s20112c6f1;
  int s20112c6f2;
  void *s20112c6f3;
  int s20112c6f4[2];
  virtual void  v8(); // _ZN8S20112C62v8Ev
  virtual void  v9(); // _ZN8S20112C62v9Ev
  ~S20112C6(); // tgen
  S20112C6(); // tgen
};
//SIG(-1 S20112C6) C1{ BC2{ VBC3{ v3} v4 v5 v6 Fp[3] FC4{} Fp} v1 v2 Fp FC5{ BC6{ BC7{ v7} Fc[5] FC8{ VBC7 v8 v9 v10 Fp[3] FC4 Fp}[2] Fi Fp[7] FC8 FC7 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC7 VBC8 Fi Fp} Fi Fp Fi[2]}


void  S20112C6 ::v8(){vfunc_called(this, "_ZN8S20112C62v8Ev");}
void  S20112C6 ::v9(){vfunc_called(this, "_ZN8S20112C62v9Ev");}
S20112C6 ::~S20112C6(){ note_dtor("S20112C6", this);} // tgen
S20112C6 ::S20112C6(){ note_ctor("S20112C6", this);} // tgen

static void Test_S20112C6()
{
  extern Class_Descriptor cd_S20112C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(56,66)];
    init_test(&cd_S20112C6, buf);
    S20112C6 *dp, &lv = *(dp=new (buf) S20112C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(440,260), "sizeof(S20112C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20112C6)");
    check_base_class_offset(lv, (S20112C5*)(S20112C7*), 0, "S20112C6");
    check_base_class_offset(lv, (S20112C7*), 0, "S20112C6");
    check_field_offset(lv, s20112c6f0, ABISELECT(48,24), "S20112C6.s20112c6f0");
    check_field_offset(lv, s20112c6f1, ABISELECT(56,28), "S20112C6.s20112c6f1");
    check_field_offset(lv, s20112c6f2, ABISELECT(416,244), "S20112C6.s20112c6f2");
    check_field_offset(lv, s20112c6f3, ABISELECT(424,248), "S20112C6.s20112c6f3");
    check_field_offset(lv, s20112c6f4, ABISELECT(432,252), "S20112C6.s20112c6f4");
    test_class_info(&lv, &cd_S20112C6);
    dp->~S20112C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20112C6(Test_S20112C6, "S20112C6", ABISELECT(440,260));

#else // __cplusplus

extern void _ZN8S20112C6C1Ev();
extern void _ZN8S20112C6D1Ev();
Name_Map name_map_S20112C6[] = {
  NSPAIR(_ZN8S20112C6C1Ev),
  NSPAIR(_ZN8S20112C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20112C5;
extern VTBL_ENTRY _ZTI8S20112C5[];
extern  VTBL_ENTRY _ZTV8S20112C5[];
extern Class_Descriptor cd_S20112C7;
extern VTBL_ENTRY _ZTI8S20112C7[];
extern  VTBL_ENTRY _ZTV8S20112C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20112C7[];
static Base_Class bases_S20112C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20112C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20112C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20112C6[];
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
extern void _ZN8S20112C62v8Ev();
extern void _ZN8S20112C62v9Ev();
static  VTBL_ENTRY vtc_S20112C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C6[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v9Ev,
};
extern VTBL_ENTRY _ZTV8S20112C6[];
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C7__8S20112C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C7[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
};
static  VTT_ENTRY vtt_S20112C6[] = {
  {&(_ZTV8S20112C6[4]),  4,10},
  {&(_tg__ZTV8S20112C7__8S20112C6[4]),  4,8},
  {&(_tg__ZTV8S20112C7__8S20112C6[4]),  4,8},
  {&(_ZTV8S20112C6[4]),  4,10},
};
extern VTBL_ENTRY _ZTI8S20112C6[];
extern  VTBL_ENTRY _ZTV8S20112C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20112C6[];
Class_Descriptor cd_S20112C6 = {  "S20112C6", // class name
  bases_S20112C6, 2,
  &(vtc_S20112C6[0]), // expected_vtbl_contents
  &(vtt_S20112C6[0]), // expected_vtt_contents
  ABISELECT(440,260), // object size
  NSPAIRA(_ZTI8S20112C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20112C6),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20112C6),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20112C10  : S20112C5 {
  char s20112c10f0[5];
  ::S20112C7 s20112c10f1[2];
  int s20112c10f2;
  void *s20112c10f3[7];
  ::S20112C7 s20112c10f4;
  ::S20112C5 s20112c10f5;
  char s20112c10f6;
  int s20112c10f7;
  short s20112c10f8[5];
  int s20112c10f9[8];
  __tsi64 s20112c10f10;
  char s20112c10f11:8;
  ~S20112C10(); // tgen
  S20112C10(); // tgen
};
//SIG(-1 S20112C10) C1{ BC2{ v1} Fc[5] FC3{ VBC2 v2 v3 v4 Fp[3] FC4{} Fp}[2] Fi Fp[7] FC3 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}


S20112C10 ::~S20112C10(){ note_dtor("S20112C10", this);} // tgen
S20112C10 ::S20112C10(){ note_ctor("S20112C10", this);} // tgen

static void Test_S20112C10()
{
  extern Class_Descriptor cd_S20112C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,47)];
    init_test(&cd_S20112C10, buf);
    S20112C10 *dp, &lv = *(dp=new (buf) S20112C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,184), "sizeof(S20112C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20112C10)");
    check_base_class_offset(lv, (S20112C5*), 0, "S20112C10");
    check_field_offset(lv, s20112c10f0, ABISELECT(8,4), "S20112C10.s20112c10f0");
    check_field_offset(lv, s20112c10f1, ABISELECT(16,12), "S20112C10.s20112c10f1");
    check_field_offset(lv, s20112c10f2, ABISELECT(112,60), "S20112C10.s20112c10f2");
    check_field_offset(lv, s20112c10f3, ABISELECT(120,64), "S20112C10.s20112c10f3");
    check_field_offset(lv, s20112c10f4, ABISELECT(176,92), "S20112C10.s20112c10f4");
    check_field_offset(lv, s20112c10f5, ABISELECT(224,116), "S20112C10.s20112c10f5");
    check_field_offset(lv, s20112c10f6, ABISELECT(232,120), "S20112C10.s20112c10f6");
    check_field_offset(lv, s20112c10f7, ABISELECT(236,124), "S20112C10.s20112c10f7");
    check_field_offset(lv, s20112c10f8, ABISELECT(240,128), "S20112C10.s20112c10f8");
    check_field_offset(lv, s20112c10f9, ABISELECT(252,140), "S20112C10.s20112c10f9");
    check_field_offset(lv, s20112c10f10, ABISELECT(288,172), "S20112C10.s20112c10f10");
    set_bf_and_test(lv, s20112c10f11, ABISELECT(296,180), 0, 8, 1, "S20112C10");
    set_bf_and_test(lv, s20112c10f11, ABISELECT(296,180), 0, 8, hide_sll(1LL<<7), "S20112C10");
    test_class_info(&lv, &cd_S20112C10);
    dp->~S20112C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20112C10(Test_S20112C10, "S20112C10", ABISELECT(304,184));

#else // __cplusplus

extern void _ZN9S20112C10C1Ev();
extern void _ZN9S20112C10D1Ev();
Name_Map name_map_S20112C10[] = {
  NSPAIR(_ZN9S20112C10C1Ev),
  NSPAIR(_ZN9S20112C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20112C5;
extern VTBL_ENTRY _ZTI8S20112C5[];
extern  VTBL_ENTRY _ZTV8S20112C5[];
static Base_Class bases_S20112C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20112C5,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20112C10[];
extern void _ZN8S20112C52v4Ev();
static  VTBL_ENTRY vtc_S20112C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20112C10[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
};
extern VTBL_ENTRY _ZTI9S20112C10[];
extern  VTBL_ENTRY _ZTV9S20112C10[];
Class_Descriptor cd_S20112C10 = {  "S20112C10", // class name
  bases_S20112C10, 1,
  &(vtc_S20112C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,184), // object size
  NSPAIRA(_ZTI9S20112C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20112C10),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20112C12  : S20112C5 {
  char s20112c12f0;
  __tsi64 s20112c12f1;
  int s20112c12f2[3];
  ::S20112C10 s20112c12f3;
  virtual void  v13(); // _ZN9S20112C123v13Ev
  ~S20112C12(); // tgen
  S20112C12(); // tgen
};
//SIG(-1 S20112C12) C1{ BC2{ v2} v1 Fc FL Fi[3] FC3{ BC2 Fc[5] FC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}}


void  S20112C12 ::v13(){vfunc_called(this, "_ZN9S20112C123v13Ev");}
S20112C12 ::~S20112C12(){ note_dtor("S20112C12", this);} // tgen
S20112C12 ::S20112C12(){ note_ctor("S20112C12", this);} // tgen

static void Test_S20112C12()
{
  extern Class_Descriptor cd_S20112C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,54)];
    init_test(&cd_S20112C12, buf);
    S20112C12 *dp, &lv = *(dp=new (buf) S20112C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,212), "sizeof(S20112C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20112C12)");
    check_base_class_offset(lv, (S20112C5*), 0, "S20112C12");
    check_field_offset(lv, s20112c12f0, ABISELECT(8,4), "S20112C12.s20112c12f0");
    check_field_offset(lv, s20112c12f1, ABISELECT(16,8), "S20112C12.s20112c12f1");
    check_field_offset(lv, s20112c12f2, ABISELECT(24,16), "S20112C12.s20112c12f2");
    check_field_offset(lv, s20112c12f3, ABISELECT(40,28), "S20112C12.s20112c12f3");
    test_class_info(&lv, &cd_S20112C12);
    dp->~S20112C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20112C12(Test_S20112C12, "S20112C12", ABISELECT(344,212));

#else // __cplusplus

extern void _ZN9S20112C12C1Ev();
extern void _ZN9S20112C12D1Ev();
Name_Map name_map_S20112C12[] = {
  NSPAIR(_ZN9S20112C12C1Ev),
  NSPAIR(_ZN9S20112C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20112C5;
extern VTBL_ENTRY _ZTI8S20112C5[];
extern  VTBL_ENTRY _ZTV8S20112C5[];
static Base_Class bases_S20112C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20112C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20112C12[];
extern void _ZN8S20112C52v4Ev();
extern void _ZN9S20112C123v13Ev();
static  VTBL_ENTRY vtc_S20112C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20112C12[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN9S20112C123v13Ev,
};
extern VTBL_ENTRY _ZTI9S20112C12[];
extern  VTBL_ENTRY _ZTV9S20112C12[];
Class_Descriptor cd_S20112C12 = {  "S20112C12", // class name
  bases_S20112C12, 1,
  &(vtc_S20112C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,212), // object size
  NSPAIRA(_ZTI9S20112C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20112C12),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20112C11  : virtual S20112C10 {
  void *s20112c11f0;
  __tsi64 s20112c11f1;
  void *s20112c11f2[6];
  ::S20112C5 s20112c11f3;
  ::S20112C12 s20112c11f4;
  void *s20112c11f5;
  int s20112c11f6;
  virtual void  v10(); // _ZN9S20112C113v10Ev
  ~S20112C11(); // tgen
  S20112C11(); // tgen
};
//SIG(-1 S20112C11) C1{ VBC2{ BC3{ v2} Fc[5] FC4{ VBC3 v4 v5 v6 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v1 Fp FL Fp[6] FC3 FC6{ BC3 v3 Fc FL Fi[3] FC2} Fp Fi}


void  S20112C11 ::v10(){vfunc_called(this, "_ZN9S20112C113v10Ev");}
S20112C11 ::~S20112C11(){ note_dtor("S20112C11", this);} // tgen
S20112C11 ::S20112C11(){ note_ctor("S20112C11", this);} // tgen

static void Test_S20112C11()
{
  extern Class_Descriptor cd_S20112C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(94,113)];
    init_test(&cd_S20112C11, buf);
    S20112C11 *dp, &lv = *(dp=new (buf) S20112C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(744,448), "sizeof(S20112C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20112C11)");
    check_base_class_offset(lv, (S20112C5*)(S20112C10*), ABISELECT(440,264), "S20112C11");
    check_base_class_offset(lv, (S20112C10*), ABISELECT(440,264), "S20112C11");
    check_field_offset(lv, s20112c11f0, ABISELECT(8,4), "S20112C11.s20112c11f0");
    check_field_offset(lv, s20112c11f1, ABISELECT(16,8), "S20112C11.s20112c11f1");
    check_field_offset(lv, s20112c11f2, ABISELECT(24,16), "S20112C11.s20112c11f2");
    check_field_offset(lv, s20112c11f3, ABISELECT(72,40), "S20112C11.s20112c11f3");
    check_field_offset(lv, s20112c11f4, ABISELECT(80,44), "S20112C11.s20112c11f4");
    check_field_offset(lv, s20112c11f5, ABISELECT(424,256), "S20112C11.s20112c11f5");
    check_field_offset(lv, s20112c11f6, ABISELECT(432,260), "S20112C11.s20112c11f6");
    test_class_info(&lv, &cd_S20112C11);
    dp->~S20112C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20112C11(Test_S20112C11, "S20112C11", ABISELECT(744,448));

#else // __cplusplus

extern void _ZN9S20112C11C1Ev();
extern void _ZN9S20112C11D1Ev();
Name_Map name_map_S20112C11[] = {
  NSPAIR(_ZN9S20112C11C1Ev),
  NSPAIR(_ZN9S20112C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20112C5;
extern VTBL_ENTRY _ZTI8S20112C5[];
extern  VTBL_ENTRY _ZTV8S20112C5[];
extern Class_Descriptor cd_S20112C10;
extern VTBL_ENTRY _ZTI9S20112C10[];
extern  VTBL_ENTRY _ZTV9S20112C10[];
static Base_Class bases_S20112C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20112C5,    ABISELECT(440,264), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20112C10,    ABISELECT(440,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20112C11[];
extern void _ZN9S20112C113v10Ev();
extern void _ZN8S20112C52v4Ev();
static  VTBL_ENTRY vtc_S20112C11[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S20112C11[0]),
  (VTBL_ENTRY)&_ZN9S20112C113v10Ev,
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S20112C11[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
};
extern VTBL_ENTRY _ZTV9S20112C11[];
static  VTT_ENTRY vtt_S20112C11[] = {
  {&(_ZTV9S20112C11[3]),  3,8},
  {&(_ZTV9S20112C11[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S20112C11[];
extern  VTBL_ENTRY _ZTV9S20112C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20112C11[];
Class_Descriptor cd_S20112C11 = {  "S20112C11", // class name
  bases_S20112C11, 2,
  &(vtc_S20112C11[0]), // expected_vtbl_contents
  &(vtt_S20112C11[0]), // expected_vtt_contents
  ABISELECT(744,448), // object size
  NSPAIRA(_ZTI9S20112C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20112C11),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20112C11),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20112C4  : virtual S20112C5 , S20112C6 , virtual S20112C11 {
  void *s20112c4f0[2];
  int s20112c4f1[9];
  ::S20112C12 s20112c4f2;
  ::S20112C5 s20112c4f3[9];
  __tsi64 s20112c4f4;
  long double s20112c4f5;
  void *s20112c4f6;
  __tsi64 s20112c4f7;
  long s20112c4f8;
  __tsi64 s20112c4f9;
  virtual  ~S20112C4(); // _ZN8S20112C4D2Ev
  virtual void  v11(); // _ZN8S20112C43v11Ev
  S20112C4(); // tgen
};
//SIG(-1 S20112C4) C1{ VBC2{ v2} BC3{ BC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp} v6 v7 Fp FC6{ BC7{ BC8{ v9} Fc[5] FC9{ VBC8 v10 v11 v12 Fp[3] FC5 Fp}[2] Fi Fp[7] FC9 FC8 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC8 VBC9 Fi Fp} Fi Fp Fi[2]} VBC10{ VBC11{ BC2 Fc[5] FC4[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC2 FC12{ BC2 v13 Fc FL Fi[3] FC11} Fp Fi} vd v1 Fp[2] Fi[9] FC12 FC2[9] FL FD Fp FL Fl FL}


 S20112C4 ::~S20112C4(){ note_dtor("S20112C4", this);}
void  S20112C4 ::v11(){vfunc_called(this, "_ZN8S20112C43v11Ev");}
S20112C4 ::S20112C4(){ note_ctor("S20112C4", this);} // tgen

static void Test_S20112C4()
{
  extern Class_Descriptor cd_S20112C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(109,262)];
    init_test(&cd_S20112C4, buf);
    S20112C4 *dp, &lv = *(dp=new (buf) S20112C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1728,1044), "sizeof(S20112C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20112C4)");
    /*is_ambiguous_... S20112C4::S20112C5 */ AMB_check_base_class_offset(lv, (S20112C5*), 0, "S20112C4");
    check_base_class_offset(lv, (S20112C5*)(S20112C7*)(S20112C6*), 0, "S20112C4");
    check_base_class_offset(lv, (S20112C7*)(S20112C6*), 0, "S20112C4");
    check_base_class_offset(lv, (S20112C6*), 0, "S20112C4");
    check_base_class_offset(lv, (S20112C5*)(S20112C10*), ABISELECT(1416,860), "S20112C4");
    check_base_class_offset(lv, (S20112C10*)(S20112C11*), ABISELECT(1416,860), "S20112C4");
    check_base_class_offset(lv, (S20112C11*), ABISELECT(976,596), "S20112C4");
    check_field_offset(lv, s20112c4f0, ABISELECT(440,260), "S20112C4.s20112c4f0");
    check_field_offset(lv, s20112c4f1, ABISELECT(456,268), "S20112C4.s20112c4f1");
    check_field_offset(lv, s20112c4f2, ABISELECT(496,304), "S20112C4.s20112c4f2");
    check_field_offset(lv, s20112c4f3, ABISELECT(840,516), "S20112C4.s20112c4f3");
    check_field_offset(lv, s20112c4f4, ABISELECT(912,552), "S20112C4.s20112c4f4");
    check_field_offset(lv, s20112c4f5, ABISELECT(928,560), "S20112C4.s20112c4f5");
    check_field_offset(lv, s20112c4f6, ABISELECT(944,572), "S20112C4.s20112c4f6");
    check_field_offset(lv, s20112c4f7, ABISELECT(952,576), "S20112C4.s20112c4f7");
    check_field_offset(lv, s20112c4f8, ABISELECT(960,584), "S20112C4.s20112c4f8");
    check_field_offset(lv, s20112c4f9, ABISELECT(968,588), "S20112C4.s20112c4f9");
    test_class_info(&lv, &cd_S20112C4);
    dp->~S20112C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20112C4(Test_S20112C4, "S20112C4", ABISELECT(1728,1044));

#else // __cplusplus

extern void _ZN8S20112C4C1Ev();
extern void _ZN8S20112C4D2Ev();
Name_Map name_map_S20112C4[] = {
  NSPAIR(_ZN8S20112C4C1Ev),
  NSPAIR(_ZN8S20112C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20112C5;
extern VTBL_ENTRY _ZTI8S20112C5[];
extern  VTBL_ENTRY _ZTV8S20112C5[];
extern Class_Descriptor cd_S20112C7;
extern VTBL_ENTRY _ZTI8S20112C7[];
extern  VTBL_ENTRY _ZTV8S20112C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20112C7[];
extern Class_Descriptor cd_S20112C6;
extern VTBL_ENTRY _ZTI8S20112C6[];
extern  VTBL_ENTRY _ZTV8S20112C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20112C6[];
extern Class_Descriptor cd_S20112C5;
extern VTBL_ENTRY _ZTI8S20112C5[];
extern  VTBL_ENTRY _ZTV8S20112C5[];
extern Class_Descriptor cd_S20112C10;
extern VTBL_ENTRY _ZTI9S20112C10[];
extern  VTBL_ENTRY _ZTV9S20112C10[];
extern Class_Descriptor cd_S20112C11;
extern VTBL_ENTRY _ZTI9S20112C11[];
extern  VTBL_ENTRY _ZTV9S20112C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20112C11[];
static Base_Class bases_S20112C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20112C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20112C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20112C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20112C5,    ABISELECT(1416,860), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20112C10,    ABISELECT(1416,860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20112C11,    ABISELECT(976,596), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20112C4[];
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
extern void _ZN8S20112C62v8Ev();
extern void _ZN8S20112C62v9Ev();
extern void _ZN8S20112C4D1Ev();
extern void _ZN8S20112C4D0Ev();
extern void _ZN8S20112C43v11Ev();
extern void _ZN9S20112C113v10Ev();
extern void _ZN8S20112C52v4Ev();
static  VTBL_ENTRY vtc_S20112C4[] = {
  ABISELECT(1416,860),
  ABISELECT(976,596),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C4[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20112C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20112C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20112C43v11Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S20112C4[0]),
  (VTBL_ENTRY)&_ZN9S20112C113v10Ev,
  0,
  ABISELECT(-1416,-860),
  (VTBL_ENTRY)&(_ZTI8S20112C4[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S20112C4[];
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
extern void _ZN8S20112C62v8Ev();
extern void _ZN8S20112C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C6__8S20112C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C6[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v9Ev,
};
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C78S20112C6__8S20112C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C7[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
};
extern void _ZN9S20112C113v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20112C11__8S20112C4[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S20112C11[0]),
  (VTBL_ENTRY)&_ZN9S20112C113v10Ev,
};
extern void _ZN8S20112C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C59S20112C10__9S20112C11__8S20112C4[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S20112C11[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
};
static  VTT_ENTRY vtt_S20112C4[] = {
  {&(_ZTV8S20112C4[6]),  6,24},
  {&(_tg__ZTV8S20112C6__8S20112C4[4]),  4,10},
  {&(_tg__ZTV8S20112C78S20112C6__8S20112C4[4]),  4,8},
  {&(_tg__ZTV8S20112C78S20112C6__8S20112C4[4]),  4,8},
  {&(_tg__ZTV8S20112C6__8S20112C4[4]),  4,10},
  {&(_ZTV8S20112C4[6]),  6,24},
  {&(_ZTV8S20112C4[19]),  19,24},
  {&(_ZTV8S20112C4[23]),  23,24},
  {&(_tg__ZTV9S20112C11__8S20112C4[3]),  3,4},
  {&(_tg__ZTV8S20112C59S20112C10__9S20112C11__8S20112C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20112C4[];
extern  VTBL_ENTRY _ZTV8S20112C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20112C4[];
Class_Descriptor cd_S20112C4 = {  "S20112C4", // class name
  bases_S20112C4, 6,
  &(vtc_S20112C4[0]), // expected_vtbl_contents
  &(vtt_S20112C4[0]), // expected_vtt_contents
  ABISELECT(1728,1044), // object size
  NSPAIRA(_ZTI8S20112C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20112C4),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20112C4),10, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20112C3  : S20112C4 , S20112C6 {
  __tsi64 s20112c3f0;
  int s20112c3f1;
  ::S2489C12_nt s20112c3f2;
  long double s20112c3f3[2];
  short s20112c3f4[3];
  ::S20112C4 s20112c3f5;
  int s20112c3f6:2;
  virtual  ~S20112C3(); // _ZN8S20112C3D2Ev
  virtual void  v12(); // _ZN8S20112C33v12Ev
  S20112C3(); // tgen
};
//SIG(-1 S20112C3) C1{ BC2{ VBC3{ v2} BC4{ BC5{ VBC3 v3 v4 v5 Fp[3] FC6{} Fp} v6 v7 Fp FC7{ BC8{ BC9{ v10} Fc[5] FC10{ VBC9 v11 v12 v13 Fp[3] FC6 Fp}[2] Fi Fp[7] FC10 FC9 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC9 VBC10 Fi Fp} Fi Fp Fi[2]} VBC11{ VBC12{ BC3 Fc[5] FC5[2] Fi Fp[7] FC5 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC3 FC13{ BC3 v14 Fc FL Fi[3] FC12} Fp Fi} vd v9 Fp[2] Fi[9] FC13 FC3[9] FL FD Fp FL Fl FL} BC4 vd v1 FL Fi FC6 FD[2] Fs[3] FC2 Fi:2}


 S20112C3 ::~S20112C3(){ note_dtor("S20112C3", this);}
void  S20112C3 ::v12(){vfunc_called(this, "_ZN8S20112C33v12Ev");}
S20112C3 ::S20112C3(){ note_ctor("S20112C3", this);} // tgen

static void Test_S20112C3()
{
  extern Class_Descriptor cd_S20112C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(249,601)];
    init_test(&cd_S20112C3, buf);
    S20112C3 *dp, &lv = *(dp=new (buf) S20112C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3968,2400), "sizeof(S20112C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20112C3)");
    /*is_ambiguous_... S20112C4::S20112C5 */ AMB_check_base_class_offset(lv, (S20112C5*)(S20112C4*), 0, "S20112C3");
    check_base_class_offset(lv, (S20112C5*)(S20112C7*)(S20112C6*)(S20112C4*), 0, "S20112C3");
    /*is_ambiguous_... S20112C3::S20112C6 */ AMB_check_base_class_offset(lv, (S20112C5*)(S20112C7*)(S20112C6*), 0, "S20112C3");
    check_base_class_offset(lv, (S20112C7*)(S20112C6*)(S20112C4*), 0, "S20112C3");
    check_base_class_offset(lv, (S20112C6*)(S20112C4*), 0, "S20112C3");
    check_base_class_offset(lv, (S20112C5*)(S20112C10*), ABISELECT(3664,2216), "S20112C3");
    check_base_class_offset(lv, (S20112C10*)(S20112C11*), ABISELECT(3664,2216), "S20112C3");
    check_base_class_offset(lv, (S20112C11*)(S20112C4*), ABISELECT(3224,1952), "S20112C3");
    check_base_class_offset(lv, (S20112C4*), 0, "S20112C3");
    /*is_ambiguous_... S20112C3::S20112C6 */ AMB_check_base_class_offset(lv, (S20112C7*)(S20112C6*), ABISELECT(976,596), "S20112C3");
    /*is_ambiguous_... S20112C3::S20112C6 */ AMB_check_base_class_offset(lv, (S20112C6*), ABISELECT(976,596), "S20112C3");
    check_field_offset(lv, s20112c3f0, ABISELECT(1416,856), "S20112C3.s20112c3f0");
    check_field_offset(lv, s20112c3f1, ABISELECT(1424,864), "S20112C3.s20112c3f1");
    check_field_offset(lv, s20112c3f2, ABISELECT(1428,868), "S20112C3.s20112c3f2");
    check_field_offset(lv, s20112c3f3, ABISELECT(1440,872), "S20112C3.s20112c3f3");
    check_field_offset(lv, s20112c3f4, ABISELECT(1472,896), "S20112C3.s20112c3f4");
    check_field_offset(lv, s20112c3f5, ABISELECT(1488,904), "S20112C3.s20112c3f5");
    set_bf_and_test(lv, s20112c3f6, ABISELECT(3216,1948), 0, 2, 1, "S20112C3");
    set_bf_and_test(lv, s20112c3f6, ABISELECT(3216,1948), 0, 2, hide_sll(1LL<<1), "S20112C3");
    test_class_info(&lv, &cd_S20112C3);
    dp->~S20112C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20112C3(Test_S20112C3, "S20112C3", ABISELECT(3968,2400));

#else // __cplusplus

extern void _ZN8S20112C3C1Ev();
extern void _ZN8S20112C3D2Ev();
Name_Map name_map_S20112C3[] = {
  NSPAIR(_ZN8S20112C3C1Ev),
  NSPAIR(_ZN8S20112C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20112C5;
extern VTBL_ENTRY _ZTI8S20112C5[];
extern  VTBL_ENTRY _ZTV8S20112C5[];
extern Class_Descriptor cd_S20112C7;
extern VTBL_ENTRY _ZTI8S20112C7[];
extern  VTBL_ENTRY _ZTV8S20112C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20112C7[];
extern Class_Descriptor cd_S20112C6;
extern VTBL_ENTRY _ZTI8S20112C6[];
extern  VTBL_ENTRY _ZTV8S20112C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20112C6[];
extern Class_Descriptor cd_S20112C5;
extern VTBL_ENTRY _ZTI8S20112C5[];
extern  VTBL_ENTRY _ZTV8S20112C5[];
extern Class_Descriptor cd_S20112C10;
extern VTBL_ENTRY _ZTI9S20112C10[];
extern  VTBL_ENTRY _ZTV9S20112C10[];
extern Class_Descriptor cd_S20112C11;
extern VTBL_ENTRY _ZTI9S20112C11[];
extern  VTBL_ENTRY _ZTV9S20112C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20112C11[];
extern Class_Descriptor cd_S20112C4;
extern VTBL_ENTRY _ZTI8S20112C4[];
extern  VTBL_ENTRY _ZTV8S20112C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20112C4[];
extern Class_Descriptor cd_S20112C7;
extern VTBL_ENTRY _ZTI8S20112C7[];
extern  VTBL_ENTRY _ZTV8S20112C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20112C7[];
extern Class_Descriptor cd_S20112C6;
extern VTBL_ENTRY _ZTI8S20112C6[];
extern  VTBL_ENTRY _ZTV8S20112C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20112C6[];
static Base_Class bases_S20112C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20112C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20112C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20112C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20112C5,    ABISELECT(3664,2216), //bcp->offset
    31, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20112C10,    ABISELECT(3664,2216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20112C11,    ABISELECT(3224,1952), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20112C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20112C7,    ABISELECT(976,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20112C6,    ABISELECT(976,596), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20112C3[];
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
extern void _ZN8S20112C62v8Ev();
extern void _ZN8S20112C62v9Ev();
extern void _ZN8S20112C3D1Ev();
extern void _ZN8S20112C3D0Ev();
extern void _ZN8S20112C43v11Ev();
extern void _ZN8S20112C33v12Ev();
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
extern void _ZN8S20112C62v8Ev();
extern void _ZN8S20112C62v9Ev();
extern void _ZN9S20112C113v10Ev();
extern void _ZN8S20112C52v4Ev();
static  VTBL_ENTRY vtc_S20112C3[] = {
  ABISELECT(3664,2216),
  ABISELECT(3224,1952),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C3[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20112C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20112C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20112C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20112C33v12Ev,
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S20112C3[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v9Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-3224,-1952),
  (VTBL_ENTRY)&(_ZTI8S20112C3[0]),
  (VTBL_ENTRY)&_ZN9S20112C113v10Ev,
  0,
  ABISELECT(-3664,-2216),
  (VTBL_ENTRY)&(_ZTI8S20112C3[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S20112C3[];
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
extern void _ZN8S20112C62v8Ev();
extern void _ZN8S20112C62v9Ev();
extern void _ZN8S20112C4D1Ev();
extern void _ZN8S20112C4D0Ev();
extern void _ZN8S20112C43v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C4__8S20112C3[] = {
  ABISELECT(3664,2216),
  ABISELECT(3224,1952),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C4[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20112C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20112C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20112C43v11Ev,
};
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
extern void _ZN8S20112C62v8Ev();
extern void _ZN8S20112C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C68S20112C4__8S20112C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C6[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v9Ev,
};
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C78S20112C68S20112C4__8S20112C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C7[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
};
extern void _ZN9S20112C113v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20112C11__8S20112C4__8S20112C3[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-3224,-1952),
  (VTBL_ENTRY)&(_ZTI8S20112C4[0]),
  (VTBL_ENTRY)&_ZN9S20112C113v10Ev,
};
extern void _ZN8S20112C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C59S20112C10__A1__8S20112C4__8S20112C3[] = {
  0,
  ABISELECT(-3664,-2216),
  (VTBL_ENTRY)&(_ZTI8S20112C4[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
};
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
extern void _ZN8S20112C62v8Ev();
extern void _ZN8S20112C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C6__A1__8S20112C3[] = {
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C6[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v9Ev,
};
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C78S20112C6__A1__8S20112C3[] = {
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C7[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
};
extern void _ZN8S20112C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C5__8S20112C78S20112C6__A1__8S20112C3[] = {
  0,
  ABISELECT(976,596),
  (VTBL_ENTRY)&(_ZTI8S20112C7[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
};
extern void _ZN8S20112C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C5__8S20112C6__A1__8S20112C3[] = {
  0,
  ABISELECT(976,596),
  (VTBL_ENTRY)&(_ZTI8S20112C6[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
};
extern void _ZN9S20112C113v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20112C11__8S20112C3[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S20112C11[0]),
  (VTBL_ENTRY)&_ZN9S20112C113v10Ev,
};
extern void _ZN8S20112C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C59S20112C10__9S20112C11__8S20112C3[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S20112C11[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
};
static  VTT_ENTRY vtt_S20112C3[] = {
  {&(_ZTV8S20112C3[6]),  6,35},
  {&(_tg__ZTV8S20112C4__8S20112C3[6]),  6,15},
  {&(_tg__ZTV8S20112C68S20112C4__8S20112C3[4]),  4,10},
  {&(_tg__ZTV8S20112C78S20112C68S20112C4__8S20112C3[4]),  4,8},
  {&(_tg__ZTV8S20112C78S20112C68S20112C4__8S20112C3[4]),  4,8},
  {&(_tg__ZTV8S20112C68S20112C4__8S20112C3[4]),  4,10},
  {&(_tg__ZTV8S20112C4__8S20112C3[6]),  6,15},
  {&(_tg__ZTV9S20112C11__8S20112C4__8S20112C3[4]),  4,5},
  {&(_tg__ZTV8S20112C59S20112C10__A1__8S20112C4__8S20112C3[3]),  3,4},
  {&(_tg__ZTV8S20112C6__A1__8S20112C3[4]),  4,10},
  {&(_tg__ZTV8S20112C78S20112C6__A1__8S20112C3[4]),  4,8},
  {&(_tg__ZTV8S20112C5__8S20112C78S20112C6__A1__8S20112C3[3]),  3,4},
  {&(_tg__ZTV8S20112C5__8S20112C6__A1__8S20112C3[3]),  3,4},
  {&(_ZTV8S20112C3[6]),  6,35},
  {&(_ZTV8S20112C3[30]),  30,35},
  {&(_ZTV8S20112C3[34]),  34,35},
  {&(_ZTV8S20112C3[20]),  20,35},
  {&(_tg__ZTV9S20112C11__8S20112C3[3]),  3,4},
  {&(_tg__ZTV8S20112C59S20112C10__9S20112C11__8S20112C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20112C3[];
extern  VTBL_ENTRY _ZTV8S20112C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20112C3[];
Class_Descriptor cd_S20112C3 = {  "S20112C3", // class name
  bases_S20112C3, 9,
  &(vtc_S20112C3[0]), // expected_vtbl_contents
  &(vtt_S20112C3[0]), // expected_vtt_contents
  ABISELECT(3968,2400), // object size
  NSPAIRA(_ZTI8S20112C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20112C3),35, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20112C3),19, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20112C1  : virtual S20112C2 , S20112C3 {
  void *s20112c1f0[7];
  __tsi64 s20112c1f1;
  ::S19277C12_nt s20112c1f2;
  __tsi64 s20112c1f3;
  ::S19518C2 s20112c1f4[3];
  void *s20112c1f5[3];
  virtual void  v1(); // _ZN8S20112C12v1Ev
  virtual void  v2(); // _ZN8S20112C12v2Ev
  ~S20112C1(); // tgen
  S20112C1(); // tgen
};
//SIG(1 S20112C1) C1{ VBC2{ v3 Fp[2] Fc[10] FL FD FL:8 Fp FD} BC3{ BC4{ VBC5{ v4} BC6{ BC7{ VBC5 v5 v6 v7 Fp[3] FC8{} Fp} v8 v9 Fp FC9{ BC10{ BC11{ v13} Fc[5] FC12{ VBC11 v14 v15 v16 Fp[3] FC8 Fp}[2] Fi Fp[7] FC12 FC11 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC11 VBC12 Fi Fp} Fi Fp Fi[2]} VBC13{ VBC14{ BC5 Fc[5] FC7[2] Fi Fp[7] FC7 FC5 Fc Fi Fs[5] Fi[8] FL Fc:8} v10 Fp FL Fp[6] FC5 FC15{ BC5 v17 Fc FL Fi[3] FC14} Fp Fi} vd v11 Fp[2] Fi[9] FC15 FC5[9] FL FD Fp FL Fl FL} BC6 vd v12 FL Fi FC8 FD[2] Fs[3] FC4 Fi:2} v1 v2 Fp[7] FL FC16{ vd v18 Fi} FL FC17{ BC18{ VBC19{ v20} BC20{ BC21{ VBC19 v21 v22 v23 Fp[3] FC8 Fp} v24 v25 Fp FC9 Fi Fp Fi[2]} VBC22{ VBC23{ BC19 Fc[5] FC21[2] Fi Fp[7] FC21 FC19 Fc Fi Fs[5] Fi[8] FL Fc:8} v26 Fp FL Fp[6] FC19 FC24{ BC19 v28 Fc FL Fi[3] FC23} Fp Fi} vd v27 Fp[2] Fi[9] FC24 FC19[9] FL FD Fp FL Fl FL} BC24 vd v19 Fp FL[3] Fi FL}[3] Fp[3]}


void  S20112C1 ::v1(){vfunc_called(this, "_ZN8S20112C12v1Ev");}
void  S20112C1 ::v2(){vfunc_called(this, "_ZN8S20112C12v2Ev");}
S20112C1 ::~S20112C1(){ note_dtor("S20112C1", this);} // tgen
S20112C1 ::S20112C1(){ note_ctor("S20112C1", this);} // tgen

static void Test_S20112C1()
{
  extern Class_Descriptor cd_S20112C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(659,1605)];
    init_test(&cd_S20112C1, buf);
    S20112C1 *dp, &lv = *(dp=new (buf) S20112C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(10528,6416), "sizeof(S20112C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20112C1)");
    check_base_class_offset(lv, (S20112C2*), ABISELECT(9680,5904), "S20112C1");
    /*is_ambiguous_... S20112C4::S20112C5 */ AMB_check_base_class_offset(lv, (S20112C5*)(S20112C4*)(S20112C3*), 0, "S20112C1");
    check_base_class_offset(lv, (S20112C5*)(S20112C7*)(S20112C6*)(S20112C4*)(S20112C3*), 0, "S20112C1");
    /*is_ambiguous_... S20112C3::S20112C6 */ AMB_check_base_class_offset(lv, (S20112C5*)(S20112C7*)(S20112C6*)(S20112C3*), 0, "S20112C1");
    check_base_class_offset(lv, (S20112C7*)(S20112C6*)(S20112C4*)(S20112C3*), 0, "S20112C1");
    check_base_class_offset(lv, (S20112C6*)(S20112C4*)(S20112C3*), 0, "S20112C1");
    check_base_class_offset(lv, (S20112C5*)(S20112C10*), ABISELECT(10216,6232), "S20112C1");
    check_base_class_offset(lv, (S20112C10*)(S20112C11*), ABISELECT(10216,6232), "S20112C1");
    check_base_class_offset(lv, (S20112C11*)(S20112C4*)(S20112C3*), ABISELECT(9776,5968), "S20112C1");
    check_base_class_offset(lv, (S20112C4*)(S20112C3*), 0, "S20112C1");
    /*is_ambiguous_... S20112C3::S20112C6 */ AMB_check_base_class_offset(lv, (S20112C7*)(S20112C6*)(S20112C3*), ABISELECT(976,596), "S20112C1");
    /*is_ambiguous_... S20112C3::S20112C6 */ AMB_check_base_class_offset(lv, (S20112C6*)(S20112C3*), ABISELECT(976,596), "S20112C1");
    check_base_class_offset(lv, (S20112C3*), 0, "S20112C1");
    check_field_offset(lv, s20112c1f0, ABISELECT(3224,1952), "S20112C1.s20112c1f0");
    check_field_offset(lv, s20112c1f1, ABISELECT(3280,1980), "S20112C1.s20112c1f1");
    check_field_offset(lv, s20112c1f2, ABISELECT(3288,1988), "S20112C1.s20112c1f2");
    check_field_offset(lv, s20112c1f3, ABISELECT(3304,1996), "S20112C1.s20112c1f3");
    check_field_offset(lv, s20112c1f4, ABISELECT(3312,2004), "S20112C1.s20112c1f4");
    check_field_offset(lv, s20112c1f5, ABISELECT(9648,5892), "S20112C1.s20112c1f5");
    test_class_info(&lv, &cd_S20112C1);
    dp->~S20112C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20112C1(Test_S20112C1, "S20112C1", ABISELECT(10528,6416));

#else // __cplusplus

extern void _ZN8S20112C1C1Ev();
extern void _ZN8S20112C1D1Ev();
Name_Map name_map_S20112C1[] = {
  NSPAIR(_ZN8S20112C1C1Ev),
  NSPAIR(_ZN8S20112C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20112C2;
extern VTBL_ENTRY _ZTI8S20112C2[];
extern  VTBL_ENTRY _ZTV8S20112C2[];
extern Class_Descriptor cd_S20112C5;
extern VTBL_ENTRY _ZTI8S20112C5[];
extern  VTBL_ENTRY _ZTV8S20112C5[];
extern Class_Descriptor cd_S20112C7;
extern VTBL_ENTRY _ZTI8S20112C7[];
extern  VTBL_ENTRY _ZTV8S20112C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20112C7[];
extern Class_Descriptor cd_S20112C6;
extern VTBL_ENTRY _ZTI8S20112C6[];
extern  VTBL_ENTRY _ZTV8S20112C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20112C6[];
extern Class_Descriptor cd_S20112C5;
extern VTBL_ENTRY _ZTI8S20112C5[];
extern  VTBL_ENTRY _ZTV8S20112C5[];
extern Class_Descriptor cd_S20112C10;
extern VTBL_ENTRY _ZTI9S20112C10[];
extern  VTBL_ENTRY _ZTV9S20112C10[];
extern Class_Descriptor cd_S20112C11;
extern VTBL_ENTRY _ZTI9S20112C11[];
extern  VTBL_ENTRY _ZTV9S20112C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20112C11[];
extern Class_Descriptor cd_S20112C4;
extern VTBL_ENTRY _ZTI8S20112C4[];
extern  VTBL_ENTRY _ZTV8S20112C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20112C4[];
extern Class_Descriptor cd_S20112C7;
extern VTBL_ENTRY _ZTI8S20112C7[];
extern  VTBL_ENTRY _ZTV8S20112C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20112C7[];
extern Class_Descriptor cd_S20112C6;
extern VTBL_ENTRY _ZTI8S20112C6[];
extern  VTBL_ENTRY _ZTV8S20112C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20112C6[];
extern Class_Descriptor cd_S20112C3;
extern VTBL_ENTRY _ZTI8S20112C3[];
extern  VTBL_ENTRY _ZTV8S20112C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20112C3[];
static Base_Class bases_S20112C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20112C2,    ABISELECT(9680,5904), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20112C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20112C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20112C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20112C5,    ABISELECT(10216,6232), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20112C10,    ABISELECT(10216,6232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20112C11,    ABISELECT(9776,5968), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20112C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20112C7,    ABISELECT(976,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20112C6,    ABISELECT(976,596), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20112C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20112C1[];
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
extern void _ZN8S20112C62v8Ev();
extern void _ZN8S20112C62v9Ev();
extern void _ZN8S20112C1D1Ev();
extern void _ZN8S20112C1D0Ev();
extern void _ZN8S20112C43v11Ev();
extern void _ZN8S20112C33v12Ev();
extern void _ZN8S20112C12v1Ev();
extern void _ZN8S20112C12v2Ev();
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
extern void _ZN8S20112C62v8Ev();
extern void _ZN8S20112C62v9Ev();
extern void _ZN8S20112C22v3Ev();
extern void _ZN9S20112C113v10Ev();
extern void _ZN8S20112C52v4Ev();
static  VTBL_ENTRY vtc_S20112C1[] = {
  ABISELECT(9680,5904),
  ABISELECT(10216,6232),
  ABISELECT(9776,5968),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C1[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20112C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20112C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20112C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20112C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20112C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20112C12v2Ev,
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S20112C1[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v9Ev,
  0,
  ABISELECT(-9680,-5904),
  (VTBL_ENTRY)&(_ZTI8S20112C1[0]),
  (VTBL_ENTRY)&_ZN8S20112C22v3Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-9776,-5968),
  (VTBL_ENTRY)&(_ZTI8S20112C1[0]),
  (VTBL_ENTRY)&_ZN9S20112C113v10Ev,
  0,
  ABISELECT(-10216,-6232),
  (VTBL_ENTRY)&(_ZTI8S20112C1[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S20112C1[];
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
extern void _ZN8S20112C62v8Ev();
extern void _ZN8S20112C62v9Ev();
extern void _ZN8S20112C3D1Ev();
extern void _ZN8S20112C3D0Ev();
extern void _ZN8S20112C43v11Ev();
extern void _ZN8S20112C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C3__8S20112C1[] = {
  ABISELECT(10216,6232),
  ABISELECT(9776,5968),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C3[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20112C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20112C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20112C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20112C33v12Ev,
};
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
extern void _ZN8S20112C62v8Ev();
extern void _ZN8S20112C62v9Ev();
extern void _ZN8S20112C4D1Ev();
extern void _ZN8S20112C4D0Ev();
extern void _ZN8S20112C43v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C48S20112C3__8S20112C1[] = {
  ABISELECT(10216,6232),
  ABISELECT(9776,5968),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C4[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20112C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20112C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20112C43v11Ev,
};
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
extern void _ZN8S20112C62v8Ev();
extern void _ZN8S20112C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C68S20112C48S20112C3__8S20112C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C6[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v9Ev,
};
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C78S20112C68S20112C48S20112C3__8S20112C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C7[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
};
extern void _ZN9S20112C113v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20112C11__8S20112C48S20112C3__8S20112C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-9776,-5968),
  (VTBL_ENTRY)&(_ZTI8S20112C4[0]),
  (VTBL_ENTRY)&_ZN9S20112C113v10Ev,
};
extern void _ZN8S20112C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C59S20112C10__A1__8S20112C48S20112C3__8S20112C1[] = {
  0,
  ABISELECT(-10216,-6232),
  (VTBL_ENTRY)&(_ZTI8S20112C4[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
};
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
extern void _ZN8S20112C62v8Ev();
extern void _ZN8S20112C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C68S20112C3__A1__8S20112C1[] = {
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C6[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v9Ev,
};
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C78S20112C68S20112C3__A1__8S20112C1[] = {
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  0,
  (VTBL_ENTRY)&(_ZTI8S20112C7[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
};
extern void _ZN8S20112C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C5__8S20112C78S20112C68S20112C3__A1__8S20112C1[] = {
  0,
  ABISELECT(976,596),
  (VTBL_ENTRY)&(_ZTI8S20112C7[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
};
extern void _ZN8S20112C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C5__8S20112C68S20112C3__A1__8S20112C1[] = {
  0,
  ABISELECT(976,596),
  (VTBL_ENTRY)&(_ZTI8S20112C6[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
};
extern void _ZN9S20112C113v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20112C11__8S20112C3__8S20112C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-9776,-5968),
  (VTBL_ENTRY)&(_ZTI8S20112C3[0]),
  (VTBL_ENTRY)&_ZN9S20112C113v10Ev,
};
extern void _ZN8S20112C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C59S20112C10__A1__8S20112C3__8S20112C1[] = {
  0,
  ABISELECT(-10216,-6232),
  (VTBL_ENTRY)&(_ZTI8S20112C3[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
};
extern void _ZN8S20112C52v4Ev();
extern void _ZN8S20112C72v5Ev();
extern void _ZN8S20112C72v6Ev();
extern void _ZN8S20112C72v7Ev();
extern void _ZN8S20112C62v8Ev();
extern void _ZN8S20112C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C6__A1__8S20112C3__8S20112C1[] = {
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S20112C3[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20112C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20112C62v9Ev,
};
extern void _ZN9S20112C113v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20112C11__8S20112C1[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S20112C11[0]),
  (VTBL_ENTRY)&_ZN9S20112C113v10Ev,
};
extern void _ZN8S20112C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20112C59S20112C10__9S20112C11__8S20112C1[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S20112C11[0]),
  (VTBL_ENTRY)&_ZN8S20112C52v4Ev,
};
static  VTT_ENTRY vtt_S20112C1[] = {
  {&(_ZTV8S20112C1[7]),  7,42},
  {&(_tg__ZTV8S20112C3__8S20112C1[6]),  6,16},
  {&(_tg__ZTV8S20112C48S20112C3__8S20112C1[6]),  6,15},
  {&(_tg__ZTV8S20112C68S20112C48S20112C3__8S20112C1[4]),  4,10},
  {&(_tg__ZTV8S20112C78S20112C68S20112C48S20112C3__8S20112C1[4]),  4,8},
  {&(_tg__ZTV8S20112C78S20112C68S20112C48S20112C3__8S20112C1[4]),  4,8},
  {&(_tg__ZTV8S20112C68S20112C48S20112C3__8S20112C1[4]),  4,10},
  {&(_tg__ZTV8S20112C48S20112C3__8S20112C1[6]),  6,15},
  {&(_tg__ZTV9S20112C11__8S20112C48S20112C3__8S20112C1[4]),  4,5},
  {&(_tg__ZTV8S20112C59S20112C10__A1__8S20112C48S20112C3__8S20112C1[3]),  3,4},
  {&(_tg__ZTV8S20112C68S20112C3__A1__8S20112C1[4]),  4,10},
  {&(_tg__ZTV8S20112C78S20112C68S20112C3__A1__8S20112C1[4]),  4,8},
  {&(_tg__ZTV8S20112C5__8S20112C78S20112C68S20112C3__A1__8S20112C1[3]),  3,4},
  {&(_tg__ZTV8S20112C5__8S20112C68S20112C3__A1__8S20112C1[3]),  3,4},
  {&(_tg__ZTV8S20112C3__8S20112C1[6]),  6,16},
  {&(_tg__ZTV9S20112C11__8S20112C3__8S20112C1[4]),  4,5},
  {&(_tg__ZTV8S20112C59S20112C10__A1__8S20112C3__8S20112C1[3]),  3,4},
  {&(_tg__ZTV8S20112C6__A1__8S20112C3__8S20112C1[4]),  4,10},
  {&(_ZTV8S20112C1[32]),  32,42},
  {&(_ZTV8S20112C1[7]),  7,42},
  {&(_ZTV8S20112C1[37]),  37,42},
  {&(_ZTV8S20112C1[41]),  41,42},
  {&(_ZTV8S20112C1[23]),  23,42},
  {&(_tg__ZTV9S20112C11__8S20112C1[3]),  3,4},
  {&(_tg__ZTV8S20112C59S20112C10__9S20112C11__8S20112C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20112C1[];
extern  VTBL_ENTRY _ZTV8S20112C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20112C1[];
Class_Descriptor cd_S20112C1 = {  "S20112C1", // class name
  bases_S20112C1, 11,
  &(vtc_S20112C1[0]), // expected_vtbl_contents
  &(vtt_S20112C1[0]), // expected_vtt_contents
  ABISELECT(10528,6416), // object size
  NSPAIRA(_ZTI8S20112C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20112C1),42, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20112C1),25, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6469C3_nt  {
  int s6469c3f0[2];
  void  mf6469c3(); // _ZN10S6469C3_nt8mf6469c3Ev
};
//SIG(-1 S6469C3_nt) C1{ m Fi[2]}


void  S6469C3_nt ::mf6469c3(){}

//skip512 S6469C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6469C2_nt  {
  int s6469c2f0;
  __tsi64 s6469c2f1;
  void *s6469c2f2[4];
  int s6469c2f3[2];
  void *s6469c2f4;
  ::S6469C3_nt s6469c2f5;
  void *s6469c2f6[2];
  virtual  ~S6469C2_nt(); // _ZN10S6469C2_ntD1Ev
  virtual void  v13(); // _ZN10S6469C2_nt3v13Ev
  virtual void  v14(); // _ZN10S6469C2_nt3v14Ev
  virtual void  v15(); // _ZN10S6469C2_nt3v15Ev
  virtual void  v16(); // _ZN10S6469C2_nt3v16Ev
  virtual void  v17(); // _ZN10S6469C2_nt3v17Ev
  virtual void  v18(); // _ZN10S6469C2_nt3v18Ev
  virtual void  v19(); // _ZN10S6469C2_nt3v19Ev
  virtual void  v20(); // _ZN10S6469C2_nt3v20Ev
  virtual void  v21(); // _ZN10S6469C2_nt3v21Ev
  virtual void  v22(); // _ZN10S6469C2_nt3v22Ev
  virtual void  v23(); // _ZN10S6469C2_nt3v23Ev
  virtual void  v24(); // _ZN10S6469C2_nt3v24Ev
  virtual void  v25(); // _ZN10S6469C2_nt3v25Ev
  virtual void  v26(); // _ZN10S6469C2_nt3v26Ev
  virtual void  v27(); // _ZN10S6469C2_nt3v27Ev
  virtual void  v28(); // _ZN10S6469C2_nt3v28Ev
  virtual void  v29(); // _ZN10S6469C2_nt3v29Ev
  virtual void  v30(); // _ZN10S6469C2_nt3v30Ev
  virtual void  v31(); // _ZN10S6469C2_nt3v31Ev
  virtual void  v32(); // _ZN10S6469C2_nt3v32Ev
  virtual void  v33(); // _ZN10S6469C2_nt3v33Ev
  virtual void  v34(); // _ZN10S6469C2_nt3v34Ev
  virtual void  v35(); // _ZN10S6469C2_nt3v35Ev
  virtual void  v36(); // _ZN10S6469C2_nt3v36Ev
  virtual void  v37(); // _ZN10S6469C2_nt3v37Ev
  virtual void  v38(); // _ZN10S6469C2_nt3v38Ev
  virtual void  v39(); // _ZN10S6469C2_nt3v39Ev
  virtual void  v40(); // _ZN10S6469C2_nt3v40Ev
  virtual void  v41(); // _ZN10S6469C2_nt3v41Ev
  virtual void  v42(); // _ZN10S6469C2_nt3v42Ev
  virtual void  v43(); // _ZN10S6469C2_nt3v43Ev
  virtual void  v44(); // _ZN10S6469C2_nt3v44Ev
  virtual void  v45(); // _ZN10S6469C2_nt3v45Ev
  virtual void  v46(); // _ZN10S6469C2_nt3v46Ev
  virtual void  v47(); // _ZN10S6469C2_nt3v47Ev
  virtual void  v48(); // _ZN10S6469C2_nt3v48Ev
  virtual void  v49(); // _ZN10S6469C2_nt3v49Ev
  virtual void  v50(); // _ZN10S6469C2_nt3v50Ev
  virtual void  v51(); // _ZN10S6469C2_nt3v51Ev
  virtual void  v52(); // _ZN10S6469C2_nt3v52Ev
  virtual void  v53(); // _ZN10S6469C2_nt3v53Ev
  virtual void  v54(); // _ZN10S6469C2_nt3v54Ev
  virtual void  v55(); // _ZN10S6469C2_nt3v55Ev
  virtual void  v56(); // _ZN10S6469C2_nt3v56Ev
  virtual void  v57(); // _ZN10S6469C2_nt3v57Ev
  virtual void  v58(); // _ZN10S6469C2_nt3v58Ev
  virtual void  v59(); // _ZN10S6469C2_nt3v59Ev
  virtual void  v60(); // _ZN10S6469C2_nt3v60Ev
  virtual void  v61(); // _ZN10S6469C2_nt3v61Ev
  virtual void  v62(); // _ZN10S6469C2_nt3v62Ev
  virtual void  v63(); // _ZN10S6469C2_nt3v63Ev
  virtual void  v64(); // _ZN10S6469C2_nt3v64Ev
  virtual void  v65(); // _ZN10S6469C2_nt3v65Ev
  virtual void  v66(); // _ZN10S6469C2_nt3v66Ev
  virtual void  v67(); // _ZN10S6469C2_nt3v67Ev
  virtual void  v68(); // _ZN10S6469C2_nt3v68Ev
  virtual void  v69(); // _ZN10S6469C2_nt3v69Ev
  virtual void  v70(); // _ZN10S6469C2_nt3v70Ev
  virtual void  v71(); // _ZN10S6469C2_nt3v71Ev
  virtual void  v72(); // _ZN10S6469C2_nt3v72Ev
  virtual void  v73(); // _ZN10S6469C2_nt3v73Ev
  virtual void  v74(); // _ZN10S6469C2_nt3v74Ev
  virtual void  v75(); // _ZN10S6469C2_nt3v75Ev
  virtual void  v76(); // _ZN10S6469C2_nt3v76Ev
  S6469C2_nt(); // tgen
};
//SIG(-1 S6469C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S6469C2_nt ::~S6469C2_nt(){ note_dtor("S6469C2_nt", this);}
void  S6469C2_nt ::v13(){vfunc_called(this, "_ZN10S6469C2_nt3v13Ev");}
void  S6469C2_nt ::v14(){vfunc_called(this, "_ZN10S6469C2_nt3v14Ev");}
void  S6469C2_nt ::v15(){vfunc_called(this, "_ZN10S6469C2_nt3v15Ev");}
void  S6469C2_nt ::v16(){vfunc_called(this, "_ZN10S6469C2_nt3v16Ev");}
void  S6469C2_nt ::v17(){vfunc_called(this, "_ZN10S6469C2_nt3v17Ev");}
void  S6469C2_nt ::v18(){vfunc_called(this, "_ZN10S6469C2_nt3v18Ev");}
void  S6469C2_nt ::v19(){vfunc_called(this, "_ZN10S6469C2_nt3v19Ev");}
void  S6469C2_nt ::v20(){vfunc_called(this, "_ZN10S6469C2_nt3v20Ev");}
void  S6469C2_nt ::v21(){vfunc_called(this, "_ZN10S6469C2_nt3v21Ev");}
void  S6469C2_nt ::v22(){vfunc_called(this, "_ZN10S6469C2_nt3v22Ev");}
void  S6469C2_nt ::v23(){vfunc_called(this, "_ZN10S6469C2_nt3v23Ev");}
void  S6469C2_nt ::v24(){vfunc_called(this, "_ZN10S6469C2_nt3v24Ev");}
void  S6469C2_nt ::v25(){vfunc_called(this, "_ZN10S6469C2_nt3v25Ev");}
void  S6469C2_nt ::v26(){vfunc_called(this, "_ZN10S6469C2_nt3v26Ev");}
void  S6469C2_nt ::v27(){vfunc_called(this, "_ZN10S6469C2_nt3v27Ev");}
void  S6469C2_nt ::v28(){vfunc_called(this, "_ZN10S6469C2_nt3v28Ev");}
void  S6469C2_nt ::v29(){vfunc_called(this, "_ZN10S6469C2_nt3v29Ev");}
void  S6469C2_nt ::v30(){vfunc_called(this, "_ZN10S6469C2_nt3v30Ev");}
void  S6469C2_nt ::v31(){vfunc_called(this, "_ZN10S6469C2_nt3v31Ev");}
void  S6469C2_nt ::v32(){vfunc_called(this, "_ZN10S6469C2_nt3v32Ev");}
void  S6469C2_nt ::v33(){vfunc_called(this, "_ZN10S6469C2_nt3v33Ev");}
void  S6469C2_nt ::v34(){vfunc_called(this, "_ZN10S6469C2_nt3v34Ev");}
void  S6469C2_nt ::v35(){vfunc_called(this, "_ZN10S6469C2_nt3v35Ev");}
void  S6469C2_nt ::v36(){vfunc_called(this, "_ZN10S6469C2_nt3v36Ev");}
void  S6469C2_nt ::v37(){vfunc_called(this, "_ZN10S6469C2_nt3v37Ev");}
void  S6469C2_nt ::v38(){vfunc_called(this, "_ZN10S6469C2_nt3v38Ev");}
void  S6469C2_nt ::v39(){vfunc_called(this, "_ZN10S6469C2_nt3v39Ev");}
void  S6469C2_nt ::v40(){vfunc_called(this, "_ZN10S6469C2_nt3v40Ev");}
void  S6469C2_nt ::v41(){vfunc_called(this, "_ZN10S6469C2_nt3v41Ev");}
void  S6469C2_nt ::v42(){vfunc_called(this, "_ZN10S6469C2_nt3v42Ev");}
void  S6469C2_nt ::v43(){vfunc_called(this, "_ZN10S6469C2_nt3v43Ev");}
void  S6469C2_nt ::v44(){vfunc_called(this, "_ZN10S6469C2_nt3v44Ev");}
void  S6469C2_nt ::v45(){vfunc_called(this, "_ZN10S6469C2_nt3v45Ev");}
void  S6469C2_nt ::v46(){vfunc_called(this, "_ZN10S6469C2_nt3v46Ev");}
void  S6469C2_nt ::v47(){vfunc_called(this, "_ZN10S6469C2_nt3v47Ev");}
void  S6469C2_nt ::v48(){vfunc_called(this, "_ZN10S6469C2_nt3v48Ev");}
void  S6469C2_nt ::v49(){vfunc_called(this, "_ZN10S6469C2_nt3v49Ev");}
void  S6469C2_nt ::v50(){vfunc_called(this, "_ZN10S6469C2_nt3v50Ev");}
void  S6469C2_nt ::v51(){vfunc_called(this, "_ZN10S6469C2_nt3v51Ev");}
void  S6469C2_nt ::v52(){vfunc_called(this, "_ZN10S6469C2_nt3v52Ev");}
void  S6469C2_nt ::v53(){vfunc_called(this, "_ZN10S6469C2_nt3v53Ev");}
void  S6469C2_nt ::v54(){vfunc_called(this, "_ZN10S6469C2_nt3v54Ev");}
void  S6469C2_nt ::v55(){vfunc_called(this, "_ZN10S6469C2_nt3v55Ev");}
void  S6469C2_nt ::v56(){vfunc_called(this, "_ZN10S6469C2_nt3v56Ev");}
void  S6469C2_nt ::v57(){vfunc_called(this, "_ZN10S6469C2_nt3v57Ev");}
void  S6469C2_nt ::v58(){vfunc_called(this, "_ZN10S6469C2_nt3v58Ev");}
void  S6469C2_nt ::v59(){vfunc_called(this, "_ZN10S6469C2_nt3v59Ev");}
void  S6469C2_nt ::v60(){vfunc_called(this, "_ZN10S6469C2_nt3v60Ev");}
void  S6469C2_nt ::v61(){vfunc_called(this, "_ZN10S6469C2_nt3v61Ev");}
void  S6469C2_nt ::v62(){vfunc_called(this, "_ZN10S6469C2_nt3v62Ev");}
void  S6469C2_nt ::v63(){vfunc_called(this, "_ZN10S6469C2_nt3v63Ev");}
void  S6469C2_nt ::v64(){vfunc_called(this, "_ZN10S6469C2_nt3v64Ev");}
void  S6469C2_nt ::v65(){vfunc_called(this, "_ZN10S6469C2_nt3v65Ev");}
void  S6469C2_nt ::v66(){vfunc_called(this, "_ZN10S6469C2_nt3v66Ev");}
void  S6469C2_nt ::v67(){vfunc_called(this, "_ZN10S6469C2_nt3v67Ev");}
void  S6469C2_nt ::v68(){vfunc_called(this, "_ZN10S6469C2_nt3v68Ev");}
void  S6469C2_nt ::v69(){vfunc_called(this, "_ZN10S6469C2_nt3v69Ev");}
void  S6469C2_nt ::v70(){vfunc_called(this, "_ZN10S6469C2_nt3v70Ev");}
void  S6469C2_nt ::v71(){vfunc_called(this, "_ZN10S6469C2_nt3v71Ev");}
void  S6469C2_nt ::v72(){vfunc_called(this, "_ZN10S6469C2_nt3v72Ev");}
void  S6469C2_nt ::v73(){vfunc_called(this, "_ZN10S6469C2_nt3v73Ev");}
void  S6469C2_nt ::v74(){vfunc_called(this, "_ZN10S6469C2_nt3v74Ev");}
void  S6469C2_nt ::v75(){vfunc_called(this, "_ZN10S6469C2_nt3v75Ev");}
void  S6469C2_nt ::v76(){vfunc_called(this, "_ZN10S6469C2_nt3v76Ev");}
S6469C2_nt ::S6469C2_nt(){ note_ctor("S6469C2_nt", this);} // tgen

//skip512 S6469C2_nt

#else // __cplusplus

extern void _ZN10S6469C2_ntC1Ev();
extern void _ZN10S6469C2_ntD1Ev();
Name_Map name_map_S6469C2_nt[] = {
  NSPAIR(_ZN10S6469C2_ntC1Ev),
  NSPAIR(_ZN10S6469C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S6469C2_nt[];
extern void _ZN10S6469C2_ntD1Ev();
extern void _ZN10S6469C2_ntD0Ev();
extern void _ZN10S6469C2_nt3v13Ev();
extern void _ZN10S6469C2_nt3v14Ev();
extern void _ZN10S6469C2_nt3v15Ev();
extern void _ZN10S6469C2_nt3v16Ev();
extern void _ZN10S6469C2_nt3v17Ev();
extern void _ZN10S6469C2_nt3v18Ev();
extern void _ZN10S6469C2_nt3v19Ev();
extern void _ZN10S6469C2_nt3v20Ev();
extern void _ZN10S6469C2_nt3v21Ev();
extern void _ZN10S6469C2_nt3v22Ev();
extern void _ZN10S6469C2_nt3v23Ev();
extern void _ZN10S6469C2_nt3v24Ev();
extern void _ZN10S6469C2_nt3v25Ev();
extern void _ZN10S6469C2_nt3v26Ev();
extern void _ZN10S6469C2_nt3v27Ev();
extern void _ZN10S6469C2_nt3v28Ev();
extern void _ZN10S6469C2_nt3v29Ev();
extern void _ZN10S6469C2_nt3v30Ev();
extern void _ZN10S6469C2_nt3v31Ev();
extern void _ZN10S6469C2_nt3v32Ev();
extern void _ZN10S6469C2_nt3v33Ev();
extern void _ZN10S6469C2_nt3v34Ev();
extern void _ZN10S6469C2_nt3v35Ev();
extern void _ZN10S6469C2_nt3v36Ev();
extern void _ZN10S6469C2_nt3v37Ev();
extern void _ZN10S6469C2_nt3v38Ev();
extern void _ZN10S6469C2_nt3v39Ev();
extern void _ZN10S6469C2_nt3v40Ev();
extern void _ZN10S6469C2_nt3v41Ev();
extern void _ZN10S6469C2_nt3v42Ev();
extern void _ZN10S6469C2_nt3v43Ev();
extern void _ZN10S6469C2_nt3v44Ev();
extern void _ZN10S6469C2_nt3v45Ev();
extern void _ZN10S6469C2_nt3v46Ev();
extern void _ZN10S6469C2_nt3v47Ev();
extern void _ZN10S6469C2_nt3v48Ev();
extern void _ZN10S6469C2_nt3v49Ev();
extern void _ZN10S6469C2_nt3v50Ev();
extern void _ZN10S6469C2_nt3v51Ev();
extern void _ZN10S6469C2_nt3v52Ev();
extern void _ZN10S6469C2_nt3v53Ev();
extern void _ZN10S6469C2_nt3v54Ev();
extern void _ZN10S6469C2_nt3v55Ev();
extern void _ZN10S6469C2_nt3v56Ev();
extern void _ZN10S6469C2_nt3v57Ev();
extern void _ZN10S6469C2_nt3v58Ev();
extern void _ZN10S6469C2_nt3v59Ev();
extern void _ZN10S6469C2_nt3v60Ev();
extern void _ZN10S6469C2_nt3v61Ev();
extern void _ZN10S6469C2_nt3v62Ev();
extern void _ZN10S6469C2_nt3v63Ev();
extern void _ZN10S6469C2_nt3v64Ev();
extern void _ZN10S6469C2_nt3v65Ev();
extern void _ZN10S6469C2_nt3v66Ev();
extern void _ZN10S6469C2_nt3v67Ev();
extern void _ZN10S6469C2_nt3v68Ev();
extern void _ZN10S6469C2_nt3v69Ev();
extern void _ZN10S6469C2_nt3v70Ev();
extern void _ZN10S6469C2_nt3v71Ev();
extern void _ZN10S6469C2_nt3v72Ev();
extern void _ZN10S6469C2_nt3v73Ev();
extern void _ZN10S6469C2_nt3v74Ev();
extern void _ZN10S6469C2_nt3v75Ev();
extern void _ZN10S6469C2_nt3v76Ev();
static  VTBL_ENTRY vtc_S6469C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6469C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S6469C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v76Ev,
};
extern VTBL_ENTRY _ZTI10S6469C2_nt[];
VTBL_ENTRY *P__ZTI10S6469C2_nt = _ZTI10S6469C2_nt; 
extern  VTBL_ENTRY _ZTV10S6469C2_nt[];
Class_Descriptor cd_S6469C2_nt = {  "S6469C2_nt", // class name
  0,0,//no base classes
  &(vtc_S6469C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI10S6469C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S6469C2_nt),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6469C1  : S6469C2_nt {
  void *s6469c1f0;
  int s6469c1f1[3];
  void *s6469c1f2[4];
  int s6469c1f3[26];
  virtual  ~S6469C1(); // _ZN7S6469C1D1Ev
  virtual void  v1(); // _ZN7S6469C12v1Ev
  virtual void  v2(); // _ZN7S6469C12v2Ev
  virtual void  v3(); // _ZN7S6469C12v3Ev
  virtual void  v4(); // _ZN7S6469C12v4Ev
  virtual void  v5(); // _ZN7S6469C12v5Ev
  virtual void  v6(); // _ZN7S6469C12v6Ev
  virtual void  v7(); // _ZN7S6469C12v7Ev
  virtual void  v8(); // _ZN7S6469C12v8Ev
  virtual void  v9(); // _ZN7S6469C12v9Ev
  virtual void  v10(); // _ZN7S6469C13v10Ev
  virtual void  v11(); // _ZN7S6469C13v11Ev
  virtual void  v12(); // _ZN7S6469C13v12Ev
  S6469C1(); // tgen
};
//SIG(1 S6469C1) C1{ BC2{ vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp Fi[3] Fp[4] Fi[26]}


 S6469C1 ::~S6469C1(){ note_dtor("S6469C1", this);}
void  S6469C1 ::v1(){vfunc_called(this, "_ZN7S6469C12v1Ev");}
void  S6469C1 ::v2(){vfunc_called(this, "_ZN7S6469C12v2Ev");}
void  S6469C1 ::v3(){vfunc_called(this, "_ZN7S6469C12v3Ev");}
void  S6469C1 ::v4(){vfunc_called(this, "_ZN7S6469C12v4Ev");}
void  S6469C1 ::v5(){vfunc_called(this, "_ZN7S6469C12v5Ev");}
void  S6469C1 ::v6(){vfunc_called(this, "_ZN7S6469C12v6Ev");}
void  S6469C1 ::v7(){vfunc_called(this, "_ZN7S6469C12v7Ev");}
void  S6469C1 ::v8(){vfunc_called(this, "_ZN7S6469C12v8Ev");}
void  S6469C1 ::v9(){vfunc_called(this, "_ZN7S6469C12v9Ev");}
void  S6469C1 ::v10(){vfunc_called(this, "_ZN7S6469C13v10Ev");}
void  S6469C1 ::v11(){vfunc_called(this, "_ZN7S6469C13v11Ev");}
void  S6469C1 ::v12(){vfunc_called(this, "_ZN7S6469C13v12Ev");}
S6469C1 ::S6469C1(){ note_ctor("S6469C1", this);} // tgen

static void Test_S6469C1()
{
  extern Class_Descriptor cd_S6469C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S6469C1, buf);
    S6469C1 *dp, &lv = *(dp=new (buf) S6469C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S6469C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6469C1)");
    check_base_class_offset(lv, (S6469C2_nt*), 0, "S6469C1");
    check_field_offset(lv, s6469c1f0, ABISELECT(96,60), "S6469C1.s6469c1f0");
    check_field_offset(lv, s6469c1f1, ABISELECT(104,64), "S6469C1.s6469c1f1");
    check_field_offset(lv, s6469c1f2, ABISELECT(120,76), "S6469C1.s6469c1f2");
    check_field_offset(lv, s6469c1f3, ABISELECT(152,92), "S6469C1.s6469c1f3");
    test_class_info(&lv, &cd_S6469C1);
    dp->~S6469C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6469C1(Test_S6469C1, "S6469C1", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S6469C1C1Ev();
extern void _ZN7S6469C1D1Ev();
Name_Map name_map_S6469C1[] = {
  NSPAIR(_ZN7S6469C1C1Ev),
  NSPAIR(_ZN7S6469C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6469C2_nt;
extern VTBL_ENTRY _ZTI10S6469C2_nt[];
extern  VTBL_ENTRY _ZTV10S6469C2_nt[];
static Base_Class bases_S6469C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6469C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6469C1[];
extern void _ZN7S6469C1D1Ev();
extern void _ZN7S6469C1D0Ev();
extern void _ZN10S6469C2_nt3v13Ev();
extern void _ZN10S6469C2_nt3v14Ev();
extern void _ZN10S6469C2_nt3v15Ev();
extern void _ZN10S6469C2_nt3v16Ev();
extern void _ZN10S6469C2_nt3v17Ev();
extern void _ZN10S6469C2_nt3v18Ev();
extern void _ZN10S6469C2_nt3v19Ev();
extern void _ZN10S6469C2_nt3v20Ev();
extern void _ZN10S6469C2_nt3v21Ev();
extern void _ZN10S6469C2_nt3v22Ev();
extern void _ZN10S6469C2_nt3v23Ev();
extern void _ZN10S6469C2_nt3v24Ev();
extern void _ZN10S6469C2_nt3v25Ev();
extern void _ZN10S6469C2_nt3v26Ev();
extern void _ZN10S6469C2_nt3v27Ev();
extern void _ZN10S6469C2_nt3v28Ev();
extern void _ZN10S6469C2_nt3v29Ev();
extern void _ZN10S6469C2_nt3v30Ev();
extern void _ZN10S6469C2_nt3v31Ev();
extern void _ZN10S6469C2_nt3v32Ev();
extern void _ZN10S6469C2_nt3v33Ev();
extern void _ZN10S6469C2_nt3v34Ev();
extern void _ZN10S6469C2_nt3v35Ev();
extern void _ZN10S6469C2_nt3v36Ev();
extern void _ZN10S6469C2_nt3v37Ev();
extern void _ZN10S6469C2_nt3v38Ev();
extern void _ZN10S6469C2_nt3v39Ev();
extern void _ZN10S6469C2_nt3v40Ev();
extern void _ZN10S6469C2_nt3v41Ev();
extern void _ZN10S6469C2_nt3v42Ev();
extern void _ZN10S6469C2_nt3v43Ev();
extern void _ZN10S6469C2_nt3v44Ev();
extern void _ZN10S6469C2_nt3v45Ev();
extern void _ZN10S6469C2_nt3v46Ev();
extern void _ZN10S6469C2_nt3v47Ev();
extern void _ZN10S6469C2_nt3v48Ev();
extern void _ZN10S6469C2_nt3v49Ev();
extern void _ZN10S6469C2_nt3v50Ev();
extern void _ZN10S6469C2_nt3v51Ev();
extern void _ZN10S6469C2_nt3v52Ev();
extern void _ZN10S6469C2_nt3v53Ev();
extern void _ZN10S6469C2_nt3v54Ev();
extern void _ZN10S6469C2_nt3v55Ev();
extern void _ZN10S6469C2_nt3v56Ev();
extern void _ZN10S6469C2_nt3v57Ev();
extern void _ZN10S6469C2_nt3v58Ev();
extern void _ZN10S6469C2_nt3v59Ev();
extern void _ZN10S6469C2_nt3v60Ev();
extern void _ZN10S6469C2_nt3v61Ev();
extern void _ZN10S6469C2_nt3v62Ev();
extern void _ZN10S6469C2_nt3v63Ev();
extern void _ZN10S6469C2_nt3v64Ev();
extern void _ZN10S6469C2_nt3v65Ev();
extern void _ZN10S6469C2_nt3v66Ev();
extern void _ZN10S6469C2_nt3v67Ev();
extern void _ZN10S6469C2_nt3v68Ev();
extern void _ZN10S6469C2_nt3v69Ev();
extern void _ZN10S6469C2_nt3v70Ev();
extern void _ZN10S6469C2_nt3v71Ev();
extern void _ZN10S6469C2_nt3v72Ev();
extern void _ZN10S6469C2_nt3v73Ev();
extern void _ZN10S6469C2_nt3v74Ev();
extern void _ZN10S6469C2_nt3v75Ev();
extern void _ZN10S6469C2_nt3v76Ev();
extern void _ZN7S6469C12v1Ev();
extern void _ZN7S6469C12v2Ev();
extern void _ZN7S6469C12v3Ev();
extern void _ZN7S6469C12v4Ev();
extern void _ZN7S6469C12v5Ev();
extern void _ZN7S6469C12v6Ev();
extern void _ZN7S6469C12v7Ev();
extern void _ZN7S6469C12v8Ev();
extern void _ZN7S6469C12v9Ev();
extern void _ZN7S6469C13v10Ev();
extern void _ZN7S6469C13v11Ev();
extern void _ZN7S6469C13v12Ev();
static  VTBL_ENTRY vtc_S6469C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6469C1[0]),
  (VTBL_ENTRY)&_ZN7S6469C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6469C1D0Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S6469C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN7S6469C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6469C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6469C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6469C12v4Ev,
  (VTBL_ENTRY)&_ZN7S6469C12v5Ev,
  (VTBL_ENTRY)&_ZN7S6469C12v6Ev,
  (VTBL_ENTRY)&_ZN7S6469C12v7Ev,
  (VTBL_ENTRY)&_ZN7S6469C12v8Ev,
  (VTBL_ENTRY)&_ZN7S6469C12v9Ev,
  (VTBL_ENTRY)&_ZN7S6469C13v10Ev,
  (VTBL_ENTRY)&_ZN7S6469C13v11Ev,
  (VTBL_ENTRY)&_ZN7S6469C13v12Ev,
};
extern VTBL_ENTRY _ZTI7S6469C1[];
extern  VTBL_ENTRY _ZTV7S6469C1[];
Class_Descriptor cd_S6469C1 = {  "S6469C1", // class name
  bases_S6469C1, 1,
  &(vtc_S6469C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S6469C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6469C1),80, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19520C4  {
  virtual void  v2(); // _ZN8S19520C42v2Ev
  ~S19520C4(); // tgen
  S19520C4(); // tgen
};
//SIG(-1 S19520C4) C1{ v1}


void  S19520C4 ::v2(){vfunc_called(this, "_ZN8S19520C42v2Ev");}
S19520C4 ::~S19520C4(){ note_dtor("S19520C4", this);} // tgen
S19520C4 ::S19520C4(){ note_ctor("S19520C4", this);} // tgen

static void Test_S19520C4()
{
  extern Class_Descriptor cd_S19520C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19520C4, buf);
    S19520C4 *dp, &lv = *(dp=new (buf) S19520C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19520C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19520C4)");
    test_class_info(&lv, &cd_S19520C4);
    dp->~S19520C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19520C4(Test_S19520C4, "S19520C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19520C4C1Ev();
extern void _ZN8S19520C4D1Ev();
Name_Map name_map_S19520C4[] = {
  NSPAIR(_ZN8S19520C4C1Ev),
  NSPAIR(_ZN8S19520C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19520C4[];
extern void _ZN8S19520C42v2Ev();
static  VTBL_ENTRY vtc_S19520C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C4[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S19520C4[];
extern  VTBL_ENTRY _ZTV8S19520C4[];
Class_Descriptor cd_S19520C4 = {  "S19520C4", // class name
  0,0,//no base classes
  &(vtc_S19520C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19520C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19520C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19520C6  : virtual S19520C4 {
  void *s19520c6f0[3];
  ::S2489C12_nt s19520c6f1;
  void *s19520c6f2;
  virtual void  v3(); // _ZN8S19520C62v3Ev
  virtual void  v4(); // _ZN8S19520C62v4Ev
  virtual void  v5(); // _ZN8S19520C62v5Ev
  ~S19520C6(); // tgen
  S19520C6(); // tgen
};
//SIG(-1 S19520C6) C1{ VBC2{ v4} v1 v2 v3 Fp[3] FC3{} Fp}


void  S19520C6 ::v3(){vfunc_called(this, "_ZN8S19520C62v3Ev");}
void  S19520C6 ::v4(){vfunc_called(this, "_ZN8S19520C62v4Ev");}
void  S19520C6 ::v5(){vfunc_called(this, "_ZN8S19520C62v5Ev");}
S19520C6 ::~S19520C6(){ note_dtor("S19520C6", this);} // tgen
S19520C6 ::S19520C6(){ note_ctor("S19520C6", this);} // tgen

static void Test_S19520C6()
{
  extern Class_Descriptor cd_S19520C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S19520C6, buf);
    S19520C6 *dp, &lv = *(dp=new (buf) S19520C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19520C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19520C6)");
    check_base_class_offset(lv, (S19520C4*), 0, "S19520C6");
    check_field_offset(lv, s19520c6f0, ABISELECT(8,4), "S19520C6.s19520c6f0");
    check_field_offset(lv, s19520c6f1, ABISELECT(32,16), "S19520C6.s19520c6f1");
    check_field_offset(lv, s19520c6f2, ABISELECT(40,20), "S19520C6.s19520c6f2");
    test_class_info(&lv, &cd_S19520C6);
    dp->~S19520C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19520C6(Test_S19520C6, "S19520C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19520C6C1Ev();
extern void _ZN8S19520C6D1Ev();
Name_Map name_map_S19520C6[] = {
  NSPAIR(_ZN8S19520C6C1Ev),
  NSPAIR(_ZN8S19520C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19520C4;
extern VTBL_ENTRY _ZTI8S19520C4[];
extern  VTBL_ENTRY _ZTV8S19520C4[];
static Base_Class bases_S19520C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19520C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19520C6[];
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
static  VTBL_ENTRY vtc_S19520C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C6[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
};
extern VTBL_ENTRY _ZTV8S19520C6[];
static  VTT_ENTRY vtt_S19520C6[] = {
  {&(_ZTV8S19520C6[4]),  4,8},
  {&(_ZTV8S19520C6[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S19520C6[];
extern  VTBL_ENTRY _ZTV8S19520C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19520C6[];
Class_Descriptor cd_S19520C6 = {  "S19520C6", // class name
  bases_S19520C6, 1,
  &(vtc_S19520C6[0]), // expected_vtbl_contents
  &(vtt_S19520C6[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19520C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19520C6),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19520C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19520C5  : S19520C6 {
  void *s19520c5f0;
  ::S19277C8 s19520c5f1;
  int s19520c5f2;
  void *s19520c5f3;
  int s19520c5f4[2];
  virtual void  v6(); // _ZN8S19520C52v6Ev
  virtual void  v7(); // _ZN8S19520C52v7Ev
  ~S19520C5(); // tgen
  S19520C5(); // tgen
};
//SIG(-1 S19520C5) C1{ BC2{ VBC3{ v3} v4 v5 v6 Fp[3] FC4{} Fp} v1 v2 Fp FC5{ BC6{ BC7{ v7} Fc[5] FC8{ VBC7 v8 v9 v10 Fp[3] FC4 Fp}[2] Fi Fp[7] FC8 FC7 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC7 VBC8 Fi Fp} Fi Fp Fi[2]}


void  S19520C5 ::v6(){vfunc_called(this, "_ZN8S19520C52v6Ev");}
void  S19520C5 ::v7(){vfunc_called(this, "_ZN8S19520C52v7Ev");}
S19520C5 ::~S19520C5(){ note_dtor("S19520C5", this);} // tgen
S19520C5 ::S19520C5(){ note_ctor("S19520C5", this);} // tgen

static void Test_S19520C5()
{
  extern Class_Descriptor cd_S19520C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(56,66)];
    init_test(&cd_S19520C5, buf);
    S19520C5 *dp, &lv = *(dp=new (buf) S19520C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(440,260), "sizeof(S19520C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19520C5)");
    check_base_class_offset(lv, (S19520C4*)(S19520C6*), 0, "S19520C5");
    check_base_class_offset(lv, (S19520C6*), 0, "S19520C5");
    check_field_offset(lv, s19520c5f0, ABISELECT(48,24), "S19520C5.s19520c5f0");
    check_field_offset(lv, s19520c5f1, ABISELECT(56,28), "S19520C5.s19520c5f1");
    check_field_offset(lv, s19520c5f2, ABISELECT(416,244), "S19520C5.s19520c5f2");
    check_field_offset(lv, s19520c5f3, ABISELECT(424,248), "S19520C5.s19520c5f3");
    check_field_offset(lv, s19520c5f4, ABISELECT(432,252), "S19520C5.s19520c5f4");
    test_class_info(&lv, &cd_S19520C5);
    dp->~S19520C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19520C5(Test_S19520C5, "S19520C5", ABISELECT(440,260));

#else // __cplusplus

extern void _ZN8S19520C5C1Ev();
extern void _ZN8S19520C5D1Ev();
Name_Map name_map_S19520C5[] = {
  NSPAIR(_ZN8S19520C5C1Ev),
  NSPAIR(_ZN8S19520C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19520C4;
extern VTBL_ENTRY _ZTI8S19520C4[];
extern  VTBL_ENTRY _ZTV8S19520C4[];
extern Class_Descriptor cd_S19520C6;
extern VTBL_ENTRY _ZTI8S19520C6[];
extern  VTBL_ENTRY _ZTV8S19520C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19520C6[];
static Base_Class bases_S19520C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19520C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19520C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19520C5[];
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
extern void _ZN8S19520C52v6Ev();
extern void _ZN8S19520C52v7Ev();
static  VTBL_ENTRY vtc_S19520C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C5[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v7Ev,
};
extern VTBL_ENTRY _ZTV8S19520C5[];
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C6__8S19520C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C6[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
};
static  VTT_ENTRY vtt_S19520C5[] = {
  {&(_ZTV8S19520C5[4]),  4,10},
  {&(_tg__ZTV8S19520C6__8S19520C5[4]),  4,8},
  {&(_tg__ZTV8S19520C6__8S19520C5[4]),  4,8},
  {&(_ZTV8S19520C5[4]),  4,10},
};
extern VTBL_ENTRY _ZTI8S19520C5[];
extern  VTBL_ENTRY _ZTV8S19520C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19520C5[];
Class_Descriptor cd_S19520C5 = {  "S19520C5", // class name
  bases_S19520C5, 2,
  &(vtc_S19520C5[0]), // expected_vtbl_contents
  &(vtt_S19520C5[0]), // expected_vtt_contents
  ABISELECT(440,260), // object size
  NSPAIRA(_ZTI8S19520C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19520C5),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19520C5),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19520C9  : S19520C4 {
  char s19520c9f0[5];
  ::S19520C6 s19520c9f1[2];
  int s19520c9f2;
  void *s19520c9f3[7];
  ::S19520C6 s19520c9f4;
  ::S19520C4 s19520c9f5;
  char s19520c9f6;
  int s19520c9f7;
  short s19520c9f8[5];
  int s19520c9f9[8];
  __tsi64 s19520c9f10;
  char s19520c9f11:8;
  ~S19520C9(); // tgen
  S19520C9(); // tgen
};
//SIG(-1 S19520C9) C1{ BC2{ v1} Fc[5] FC3{ VBC2 v2 v3 v4 Fp[3] FC4{} Fp}[2] Fi Fp[7] FC3 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}


S19520C9 ::~S19520C9(){ note_dtor("S19520C9", this);} // tgen
S19520C9 ::S19520C9(){ note_ctor("S19520C9", this);} // tgen

static void Test_S19520C9()
{
  extern Class_Descriptor cd_S19520C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,47)];
    init_test(&cd_S19520C9, buf);
    S19520C9 *dp, &lv = *(dp=new (buf) S19520C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,184), "sizeof(S19520C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19520C9)");
    check_base_class_offset(lv, (S19520C4*), 0, "S19520C9");
    check_field_offset(lv, s19520c9f0, ABISELECT(8,4), "S19520C9.s19520c9f0");
    check_field_offset(lv, s19520c9f1, ABISELECT(16,12), "S19520C9.s19520c9f1");
    check_field_offset(lv, s19520c9f2, ABISELECT(112,60), "S19520C9.s19520c9f2");
    check_field_offset(lv, s19520c9f3, ABISELECT(120,64), "S19520C9.s19520c9f3");
    check_field_offset(lv, s19520c9f4, ABISELECT(176,92), "S19520C9.s19520c9f4");
    check_field_offset(lv, s19520c9f5, ABISELECT(224,116), "S19520C9.s19520c9f5");
    check_field_offset(lv, s19520c9f6, ABISELECT(232,120), "S19520C9.s19520c9f6");
    check_field_offset(lv, s19520c9f7, ABISELECT(236,124), "S19520C9.s19520c9f7");
    check_field_offset(lv, s19520c9f8, ABISELECT(240,128), "S19520C9.s19520c9f8");
    check_field_offset(lv, s19520c9f9, ABISELECT(252,140), "S19520C9.s19520c9f9");
    check_field_offset(lv, s19520c9f10, ABISELECT(288,172), "S19520C9.s19520c9f10");
    set_bf_and_test(lv, s19520c9f11, ABISELECT(296,180), 0, 8, 1, "S19520C9");
    set_bf_and_test(lv, s19520c9f11, ABISELECT(296,180), 0, 8, hide_sll(1LL<<7), "S19520C9");
    test_class_info(&lv, &cd_S19520C9);
    dp->~S19520C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19520C9(Test_S19520C9, "S19520C9", ABISELECT(304,184));

#else // __cplusplus

extern void _ZN8S19520C9C1Ev();
extern void _ZN8S19520C9D1Ev();
Name_Map name_map_S19520C9[] = {
  NSPAIR(_ZN8S19520C9C1Ev),
  NSPAIR(_ZN8S19520C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19520C4;
extern VTBL_ENTRY _ZTI8S19520C4[];
extern  VTBL_ENTRY _ZTV8S19520C4[];
static Base_Class bases_S19520C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19520C4,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19520C9[];
extern void _ZN8S19520C42v2Ev();
static  VTBL_ENTRY vtc_S19520C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C9[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S19520C9[];
extern  VTBL_ENTRY _ZTV8S19520C9[];
Class_Descriptor cd_S19520C9 = {  "S19520C9", // class name
  bases_S19520C9, 1,
  &(vtc_S19520C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,184), // object size
  NSPAIRA(_ZTI8S19520C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19520C9),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19520C10  : virtual S19520C9 {
  void *s19520c10f0;
  __tsi64 s19520c10f1;
  void *s19520c10f2[6];
  ::S19520C4 s19520c10f3;
  ::S20113C12 s19520c10f4;
  void *s19520c10f5;
  int s19520c10f6;
  virtual void  v8(); // _ZN9S19520C102v8Ev
  ~S19520C10(); // tgen
  S19520C10(); // tgen
};
//SIG(-1 S19520C10) C1{ VBC2{ BC3{ v2} Fc[5] FC4{ VBC3 v8 v9 v10 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v1 Fp FL Fp[6] FC3 FC6{ BC7{ v4} v3 Fc FL Fi[3] FC8{ BC7 Fc[5] FC9{ VBC7 v5 v6 v7 Fp[3] FC5 Fp}[2] Fi Fp[7] FC9 FC7 Fc Fi Fs[5] Fi[8] FL Fc:8}} Fp Fi}


void  S19520C10 ::v8(){vfunc_called(this, "_ZN9S19520C102v8Ev");}
S19520C10 ::~S19520C10(){ note_dtor("S19520C10", this);} // tgen
S19520C10 ::S19520C10(){ note_ctor("S19520C10", this);} // tgen

static void Test_S19520C10()
{
  extern Class_Descriptor cd_S19520C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(94,113)];
    init_test(&cd_S19520C10, buf);
    S19520C10 *dp, &lv = *(dp=new (buf) S19520C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(744,448), "sizeof(S19520C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19520C10)");
    check_base_class_offset(lv, (S19520C4*)(S19520C9*), ABISELECT(440,264), "S19520C10");
    check_base_class_offset(lv, (S19520C9*), ABISELECT(440,264), "S19520C10");
    check_field_offset(lv, s19520c10f0, ABISELECT(8,4), "S19520C10.s19520c10f0");
    check_field_offset(lv, s19520c10f1, ABISELECT(16,8), "S19520C10.s19520c10f1");
    check_field_offset(lv, s19520c10f2, ABISELECT(24,16), "S19520C10.s19520c10f2");
    check_field_offset(lv, s19520c10f3, ABISELECT(72,40), "S19520C10.s19520c10f3");
    check_field_offset(lv, s19520c10f4, ABISELECT(80,44), "S19520C10.s19520c10f4");
    check_field_offset(lv, s19520c10f5, ABISELECT(424,256), "S19520C10.s19520c10f5");
    check_field_offset(lv, s19520c10f6, ABISELECT(432,260), "S19520C10.s19520c10f6");
    test_class_info(&lv, &cd_S19520C10);
    dp->~S19520C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19520C10(Test_S19520C10, "S19520C10", ABISELECT(744,448));

#else // __cplusplus

extern void _ZN9S19520C10C1Ev();
extern void _ZN9S19520C10D1Ev();
Name_Map name_map_S19520C10[] = {
  NSPAIR(_ZN9S19520C10C1Ev),
  NSPAIR(_ZN9S19520C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19520C4;
extern VTBL_ENTRY _ZTI8S19520C4[];
extern  VTBL_ENTRY _ZTV8S19520C4[];
extern Class_Descriptor cd_S19520C9;
extern VTBL_ENTRY _ZTI8S19520C9[];
extern  VTBL_ENTRY _ZTV8S19520C9[];
static Base_Class bases_S19520C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19520C4,    ABISELECT(440,264), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19520C9,    ABISELECT(440,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19520C10[];
extern void _ZN9S19520C102v8Ev();
extern void _ZN8S19520C42v2Ev();
static  VTBL_ENTRY vtc_S19520C10[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19520C10[0]),
  (VTBL_ENTRY)&_ZN9S19520C102v8Ev,
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19520C10[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
};
extern VTBL_ENTRY _ZTV9S19520C10[];
static  VTT_ENTRY vtt_S19520C10[] = {
  {&(_ZTV9S19520C10[3]),  3,8},
  {&(_ZTV9S19520C10[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S19520C10[];
extern  VTBL_ENTRY _ZTV9S19520C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19520C10[];
Class_Descriptor cd_S19520C10 = {  "S19520C10", // class name
  bases_S19520C10, 2,
  &(vtc_S19520C10[0]), // expected_vtbl_contents
  &(vtt_S19520C10[0]), // expected_vtt_contents
  ABISELECT(744,448), // object size
  NSPAIRA(_ZTI9S19520C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19520C10),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19520C10),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19520C3  : virtual S19520C4 , S19520C5 , virtual S19520C10 {
  void *s19520c3f0[2];
  int s19520c3f1[9];
  ::S20113C12 s19520c3f2;
  ::S19520C4 s19520c3f3[9];
  __tsi64 s19520c3f4;
  long double s19520c3f5;
  void *s19520c3f6;
  __tsi64 s19520c3f7;
  long s19520c3f8;
  __tsi64 s19520c3f9;
  virtual  ~S19520C3(); // _ZN8S19520C3D2Ev
  virtual void  v9(); // _ZN8S19520C32v9Ev
  S19520C3(); // tgen
};
//SIG(-1 S19520C3) C1{ VBC2{ v2} BC3{ BC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp} v6 v7 Fp FC6{ BC7{ BC8{ v9} Fc[5] FC9{ VBC8 v10 v11 v12 Fp[3] FC5 Fp}[2] Fi Fp[7] FC9 FC8 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC8 VBC9 Fi Fp} Fi Fp Fi[2]} VBC10{ VBC11{ BC2 Fc[5] FC4[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC2 FC12{ BC13{ v14} v13 Fc FL Fi[3] FC14{ BC13 Fc[5] FC15{ VBC13 v15 v16 v17 Fp[3] FC5 Fp}[2] Fi Fp[7] FC15 FC13 Fc Fi Fs[5] Fi[8] FL Fc:8}} Fp Fi} vd v1 Fp[2] Fi[9] FC12 FC2[9] FL FD Fp FL Fl FL}


 S19520C3 ::~S19520C3(){ note_dtor("S19520C3", this);}
void  S19520C3 ::v9(){vfunc_called(this, "_ZN8S19520C32v9Ev");}
S19520C3 ::S19520C3(){ note_ctor("S19520C3", this);} // tgen

static void Test_S19520C3()
{
  extern Class_Descriptor cd_S19520C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(109,262)];
    init_test(&cd_S19520C3, buf);
    S19520C3 *dp, &lv = *(dp=new (buf) S19520C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1728,1044), "sizeof(S19520C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19520C3)");
    /*is_ambiguous_... S19520C3::S19520C4 */ AMB_check_base_class_offset(lv, (S19520C4*), 0, "S19520C3");
    check_base_class_offset(lv, (S19520C4*)(S19520C6*)(S19520C5*), 0, "S19520C3");
    check_base_class_offset(lv, (S19520C6*)(S19520C5*), 0, "S19520C3");
    check_base_class_offset(lv, (S19520C5*), 0, "S19520C3");
    check_base_class_offset(lv, (S19520C4*)(S19520C9*), ABISELECT(1416,860), "S19520C3");
    check_base_class_offset(lv, (S19520C9*)(S19520C10*), ABISELECT(1416,860), "S19520C3");
    check_base_class_offset(lv, (S19520C10*), ABISELECT(976,596), "S19520C3");
    check_field_offset(lv, s19520c3f0, ABISELECT(440,260), "S19520C3.s19520c3f0");
    check_field_offset(lv, s19520c3f1, ABISELECT(456,268), "S19520C3.s19520c3f1");
    check_field_offset(lv, s19520c3f2, ABISELECT(496,304), "S19520C3.s19520c3f2");
    check_field_offset(lv, s19520c3f3, ABISELECT(840,516), "S19520C3.s19520c3f3");
    check_field_offset(lv, s19520c3f4, ABISELECT(912,552), "S19520C3.s19520c3f4");
    check_field_offset(lv, s19520c3f5, ABISELECT(928,560), "S19520C3.s19520c3f5");
    check_field_offset(lv, s19520c3f6, ABISELECT(944,572), "S19520C3.s19520c3f6");
    check_field_offset(lv, s19520c3f7, ABISELECT(952,576), "S19520C3.s19520c3f7");
    check_field_offset(lv, s19520c3f8, ABISELECT(960,584), "S19520C3.s19520c3f8");
    check_field_offset(lv, s19520c3f9, ABISELECT(968,588), "S19520C3.s19520c3f9");
    test_class_info(&lv, &cd_S19520C3);
    dp->~S19520C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19520C3(Test_S19520C3, "S19520C3", ABISELECT(1728,1044));

#else // __cplusplus

extern void _ZN8S19520C3C1Ev();
extern void _ZN8S19520C3D2Ev();
Name_Map name_map_S19520C3[] = {
  NSPAIR(_ZN8S19520C3C1Ev),
  NSPAIR(_ZN8S19520C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19520C4;
extern VTBL_ENTRY _ZTI8S19520C4[];
extern  VTBL_ENTRY _ZTV8S19520C4[];
extern Class_Descriptor cd_S19520C6;
extern VTBL_ENTRY _ZTI8S19520C6[];
extern  VTBL_ENTRY _ZTV8S19520C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19520C6[];
extern Class_Descriptor cd_S19520C5;
extern VTBL_ENTRY _ZTI8S19520C5[];
extern  VTBL_ENTRY _ZTV8S19520C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19520C5[];
extern Class_Descriptor cd_S19520C4;
extern VTBL_ENTRY _ZTI8S19520C4[];
extern  VTBL_ENTRY _ZTV8S19520C4[];
extern Class_Descriptor cd_S19520C9;
extern VTBL_ENTRY _ZTI8S19520C9[];
extern  VTBL_ENTRY _ZTV8S19520C9[];
extern Class_Descriptor cd_S19520C10;
extern VTBL_ENTRY _ZTI9S19520C10[];
extern  VTBL_ENTRY _ZTV9S19520C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19520C10[];
static Base_Class bases_S19520C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19520C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19520C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19520C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19520C4,    ABISELECT(1416,860), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19520C9,    ABISELECT(1416,860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19520C10,    ABISELECT(976,596), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19520C3[];
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
extern void _ZN8S19520C52v6Ev();
extern void _ZN8S19520C52v7Ev();
extern void _ZN8S19520C3D1Ev();
extern void _ZN8S19520C3D0Ev();
extern void _ZN8S19520C32v9Ev();
extern void _ZN9S19520C102v8Ev();
extern void _ZN8S19520C42v2Ev();
static  VTBL_ENTRY vtc_S19520C3[] = {
  ABISELECT(1416,860),
  ABISELECT(976,596),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C3[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19520C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19520C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19520C32v9Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S19520C3[0]),
  (VTBL_ENTRY)&_ZN9S19520C102v8Ev,
  0,
  ABISELECT(-1416,-860),
  (VTBL_ENTRY)&(_ZTI8S19520C3[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S19520C3[];
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
extern void _ZN8S19520C52v6Ev();
extern void _ZN8S19520C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C5__8S19520C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C5[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v7Ev,
};
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C68S19520C5__8S19520C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C6[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
};
extern void _ZN9S19520C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19520C10__8S19520C3[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19520C10[0]),
  (VTBL_ENTRY)&_ZN9S19520C102v8Ev,
};
extern void _ZN8S19520C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C48S19520C9__9S19520C10__8S19520C3[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19520C10[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
};
static  VTT_ENTRY vtt_S19520C3[] = {
  {&(_ZTV8S19520C3[6]),  6,24},
  {&(_tg__ZTV8S19520C5__8S19520C3[4]),  4,10},
  {&(_tg__ZTV8S19520C68S19520C5__8S19520C3[4]),  4,8},
  {&(_tg__ZTV8S19520C68S19520C5__8S19520C3[4]),  4,8},
  {&(_tg__ZTV8S19520C5__8S19520C3[4]),  4,10},
  {&(_ZTV8S19520C3[6]),  6,24},
  {&(_ZTV8S19520C3[19]),  19,24},
  {&(_ZTV8S19520C3[23]),  23,24},
  {&(_tg__ZTV9S19520C10__8S19520C3[3]),  3,4},
  {&(_tg__ZTV8S19520C48S19520C9__9S19520C10__8S19520C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19520C3[];
extern  VTBL_ENTRY _ZTV8S19520C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19520C3[];
Class_Descriptor cd_S19520C3 = {  "S19520C3", // class name
  bases_S19520C3, 6,
  &(vtc_S19520C3[0]), // expected_vtbl_contents
  &(vtt_S19520C3[0]), // expected_vtt_contents
  ABISELECT(1728,1044), // object size
  NSPAIRA(_ZTI8S19520C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19520C3),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19520C3),10, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19520C2  : S19520C3 , S19520C5 {
  __tsi64 s19520c2f0;
  int s19520c2f1;
  ::S2489C12_nt s19520c2f2;
  long double s19520c2f3[2];
  short s19520c2f4[3];
  ::S19520C3 s19520c2f5;
  __tsi64 s19520c2f6:2;
  virtual  ~S19520C2(); // _ZN8S19520C2D2Ev
  virtual void  v10(); // _ZN8S19520C23v10Ev
  S19520C2(); // tgen
};
//SIG(-1 S19520C2) C1{ BC2{ VBC3{ v2} BC4{ BC5{ VBC3 v3 v4 v5 Fp[3] FC6{} Fp} v6 v7 Fp FC7{ BC8{ BC9{ v10} Fc[5] FC10{ VBC9 v11 v12 v13 Fp[3] FC6 Fp}[2] Fi Fp[7] FC10 FC9 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC9 VBC10 Fi Fp} Fi Fp Fi[2]} VBC11{ VBC12{ BC3 Fc[5] FC5[2] Fi Fp[7] FC5 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC3 FC13{ BC14{ v15} v14 Fc FL Fi[3] FC15{ BC14 Fc[5] FC16{ VBC14 v16 v17 v18 Fp[3] FC6 Fp}[2] Fi Fp[7] FC16 FC14 Fc Fi Fs[5] Fi[8] FL Fc:8}} Fp Fi} vd v9 Fp[2] Fi[9] FC13 FC3[9] FL FD Fp FL Fl FL} BC4 vd v1 FL Fi FC6 FD[2] Fs[3] FC2 FL:2}


 S19520C2 ::~S19520C2(){ note_dtor("S19520C2", this);}
void  S19520C2 ::v10(){vfunc_called(this, "_ZN8S19520C23v10Ev");}
S19520C2 ::S19520C2(){ note_ctor("S19520C2", this);} // tgen

static void Test_S19520C2()
{
  extern Class_Descriptor cd_S19520C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(249,601)];
    init_test(&cd_S19520C2, buf);
    S19520C2 *dp, &lv = *(dp=new (buf) S19520C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3968,2400), "sizeof(S19520C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19520C2)");
    /*is_ambiguous_... S19520C3::S19520C4 */ AMB_check_base_class_offset(lv, (S19520C4*)(S19520C3*), 0, "S19520C2");
    check_base_class_offset(lv, (S19520C4*)(S19520C6*)(S19520C5*)(S19520C3*), 0, "S19520C2");
    /*is_ambiguous_... S19520C2::S19520C5 */ AMB_check_base_class_offset(lv, (S19520C4*)(S19520C6*)(S19520C5*), 0, "S19520C2");
    check_base_class_offset(lv, (S19520C6*)(S19520C5*)(S19520C3*), 0, "S19520C2");
    check_base_class_offset(lv, (S19520C5*)(S19520C3*), 0, "S19520C2");
    check_base_class_offset(lv, (S19520C4*)(S19520C9*), ABISELECT(3664,2216), "S19520C2");
    check_base_class_offset(lv, (S19520C9*)(S19520C10*), ABISELECT(3664,2216), "S19520C2");
    check_base_class_offset(lv, (S19520C10*)(S19520C3*), ABISELECT(3224,1952), "S19520C2");
    check_base_class_offset(lv, (S19520C3*), 0, "S19520C2");
    /*is_ambiguous_... S19520C2::S19520C5 */ AMB_check_base_class_offset(lv, (S19520C6*)(S19520C5*), ABISELECT(976,596), "S19520C2");
    /*is_ambiguous_... S19520C2::S19520C5 */ AMB_check_base_class_offset(lv, (S19520C5*), ABISELECT(976,596), "S19520C2");
    check_field_offset(lv, s19520c2f0, ABISELECT(1416,856), "S19520C2.s19520c2f0");
    check_field_offset(lv, s19520c2f1, ABISELECT(1424,864), "S19520C2.s19520c2f1");
    check_field_offset(lv, s19520c2f2, ABISELECT(1428,868), "S19520C2.s19520c2f2");
    check_field_offset(lv, s19520c2f3, ABISELECT(1440,872), "S19520C2.s19520c2f3");
    check_field_offset(lv, s19520c2f4, ABISELECT(1472,896), "S19520C2.s19520c2f4");
    check_field_offset(lv, s19520c2f5, ABISELECT(1488,904), "S19520C2.s19520c2f5");
    set_bf_and_test(lv, s19520c2f6, ABISELECT(3216,1948), 0, 2, 1, "S19520C2");
    set_bf_and_test(lv, s19520c2f6, ABISELECT(3216,1948), 0, 2, hide_sll(1LL<<1), "S19520C2");
    test_class_info(&lv, &cd_S19520C2);
    dp->~S19520C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19520C2(Test_S19520C2, "S19520C2", ABISELECT(3968,2400));

#else // __cplusplus

extern void _ZN8S19520C2C1Ev();
extern void _ZN8S19520C2D2Ev();
Name_Map name_map_S19520C2[] = {
  NSPAIR(_ZN8S19520C2C1Ev),
  NSPAIR(_ZN8S19520C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19520C4;
extern VTBL_ENTRY _ZTI8S19520C4[];
extern  VTBL_ENTRY _ZTV8S19520C4[];
extern Class_Descriptor cd_S19520C6;
extern VTBL_ENTRY _ZTI8S19520C6[];
extern  VTBL_ENTRY _ZTV8S19520C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19520C6[];
extern Class_Descriptor cd_S19520C5;
extern VTBL_ENTRY _ZTI8S19520C5[];
extern  VTBL_ENTRY _ZTV8S19520C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19520C5[];
extern Class_Descriptor cd_S19520C4;
extern VTBL_ENTRY _ZTI8S19520C4[];
extern  VTBL_ENTRY _ZTV8S19520C4[];
extern Class_Descriptor cd_S19520C9;
extern VTBL_ENTRY _ZTI8S19520C9[];
extern  VTBL_ENTRY _ZTV8S19520C9[];
extern Class_Descriptor cd_S19520C10;
extern VTBL_ENTRY _ZTI9S19520C10[];
extern  VTBL_ENTRY _ZTV9S19520C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19520C10[];
extern Class_Descriptor cd_S19520C3;
extern VTBL_ENTRY _ZTI8S19520C3[];
extern  VTBL_ENTRY _ZTV8S19520C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19520C3[];
extern Class_Descriptor cd_S19520C6;
extern VTBL_ENTRY _ZTI8S19520C6[];
extern  VTBL_ENTRY _ZTV8S19520C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19520C6[];
extern Class_Descriptor cd_S19520C5;
extern VTBL_ENTRY _ZTI8S19520C5[];
extern  VTBL_ENTRY _ZTV8S19520C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19520C5[];
static Base_Class bases_S19520C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19520C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19520C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19520C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19520C4,    ABISELECT(3664,2216), //bcp->offset
    31, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19520C9,    ABISELECT(3664,2216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19520C10,    ABISELECT(3224,1952), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19520C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19520C6,    ABISELECT(976,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19520C5,    ABISELECT(976,596), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19520C2[];
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
extern void _ZN8S19520C52v6Ev();
extern void _ZN8S19520C52v7Ev();
extern void _ZN8S19520C2D1Ev();
extern void _ZN8S19520C2D0Ev();
extern void _ZN8S19520C32v9Ev();
extern void _ZN8S19520C23v10Ev();
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
extern void _ZN8S19520C52v6Ev();
extern void _ZN8S19520C52v7Ev();
extern void _ZN9S19520C102v8Ev();
extern void _ZN8S19520C42v2Ev();
static  VTBL_ENTRY vtc_S19520C2[] = {
  ABISELECT(3664,2216),
  ABISELECT(3224,1952),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C2[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19520C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19520C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19520C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19520C23v10Ev,
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S19520C2[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v7Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-3224,-1952),
  (VTBL_ENTRY)&(_ZTI8S19520C2[0]),
  (VTBL_ENTRY)&_ZN9S19520C102v8Ev,
  0,
  ABISELECT(-3664,-2216),
  (VTBL_ENTRY)&(_ZTI8S19520C2[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S19520C2[];
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
extern void _ZN8S19520C52v6Ev();
extern void _ZN8S19520C52v7Ev();
extern void _ZN8S19520C3D1Ev();
extern void _ZN8S19520C3D0Ev();
extern void _ZN8S19520C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C3__8S19520C2[] = {
  ABISELECT(3664,2216),
  ABISELECT(3224,1952),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C3[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19520C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19520C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19520C32v9Ev,
};
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
extern void _ZN8S19520C52v6Ev();
extern void _ZN8S19520C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C58S19520C3__8S19520C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C5[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v7Ev,
};
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C68S19520C58S19520C3__8S19520C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C6[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
};
extern void _ZN9S19520C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19520C10__8S19520C3__8S19520C2[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-3224,-1952),
  (VTBL_ENTRY)&(_ZTI8S19520C3[0]),
  (VTBL_ENTRY)&_ZN9S19520C102v8Ev,
};
extern void _ZN8S19520C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C48S19520C9__A1__8S19520C3__8S19520C2[] = {
  0,
  ABISELECT(-3664,-2216),
  (VTBL_ENTRY)&(_ZTI8S19520C3[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
};
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
extern void _ZN8S19520C52v6Ev();
extern void _ZN8S19520C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C5__A1__8S19520C2[] = {
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C5[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v7Ev,
};
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C68S19520C5__A1__8S19520C2[] = {
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C6[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
};
extern void _ZN8S19520C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C4__8S19520C68S19520C5__A1__8S19520C2[] = {
  0,
  ABISELECT(976,596),
  (VTBL_ENTRY)&(_ZTI8S19520C6[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
};
extern void _ZN8S19520C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C4__8S19520C5__A1__8S19520C2[] = {
  0,
  ABISELECT(976,596),
  (VTBL_ENTRY)&(_ZTI8S19520C5[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
};
extern void _ZN9S19520C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19520C10__8S19520C2[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19520C10[0]),
  (VTBL_ENTRY)&_ZN9S19520C102v8Ev,
};
extern void _ZN8S19520C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C48S19520C9__9S19520C10__8S19520C2[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19520C10[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
};
static  VTT_ENTRY vtt_S19520C2[] = {
  {&(_ZTV8S19520C2[6]),  6,35},
  {&(_tg__ZTV8S19520C3__8S19520C2[6]),  6,15},
  {&(_tg__ZTV8S19520C58S19520C3__8S19520C2[4]),  4,10},
  {&(_tg__ZTV8S19520C68S19520C58S19520C3__8S19520C2[4]),  4,8},
  {&(_tg__ZTV8S19520C68S19520C58S19520C3__8S19520C2[4]),  4,8},
  {&(_tg__ZTV8S19520C58S19520C3__8S19520C2[4]),  4,10},
  {&(_tg__ZTV8S19520C3__8S19520C2[6]),  6,15},
  {&(_tg__ZTV9S19520C10__8S19520C3__8S19520C2[4]),  4,5},
  {&(_tg__ZTV8S19520C48S19520C9__A1__8S19520C3__8S19520C2[3]),  3,4},
  {&(_tg__ZTV8S19520C5__A1__8S19520C2[4]),  4,10},
  {&(_tg__ZTV8S19520C68S19520C5__A1__8S19520C2[4]),  4,8},
  {&(_tg__ZTV8S19520C4__8S19520C68S19520C5__A1__8S19520C2[3]),  3,4},
  {&(_tg__ZTV8S19520C4__8S19520C5__A1__8S19520C2[3]),  3,4},
  {&(_ZTV8S19520C2[6]),  6,35},
  {&(_ZTV8S19520C2[30]),  30,35},
  {&(_ZTV8S19520C2[34]),  34,35},
  {&(_ZTV8S19520C2[20]),  20,35},
  {&(_tg__ZTV9S19520C10__8S19520C2[3]),  3,4},
  {&(_tg__ZTV8S19520C48S19520C9__9S19520C10__8S19520C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19520C2[];
extern  VTBL_ENTRY _ZTV8S19520C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19520C2[];
Class_Descriptor cd_S19520C2 = {  "S19520C2", // class name
  bases_S19520C2, 9,
  &(vtc_S19520C2[0]), // expected_vtbl_contents
  &(vtt_S19520C2[0]), // expected_vtt_contents
  ABISELECT(3968,2400), // object size
  NSPAIRA(_ZTI8S19520C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19520C2),35, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19520C2),19, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19520C12  {
  int s19520c12f0;
  virtual  ~S19520C12(); // _ZN9S19520C12D1Ev
  virtual void  v11(); // _ZN9S19520C123v11Ev
  S19520C12(); // tgen
};
//SIG(-1 S19520C12) C1{ vd v1 Fi}


 S19520C12 ::~S19520C12(){ note_dtor("S19520C12", this);}
void  S19520C12 ::v11(){vfunc_called(this, "_ZN9S19520C123v11Ev");}
S19520C12 ::S19520C12(){ note_ctor("S19520C12", this);} // tgen

static void Test_S19520C12()
{
  extern Class_Descriptor cd_S19520C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19520C12, buf);
    S19520C12 *dp, &lv = *(dp=new (buf) S19520C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19520C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19520C12)");
    check_field_offset(lv, s19520c12f0, ABISELECT(8,4), "S19520C12.s19520c12f0");
    test_class_info(&lv, &cd_S19520C12);
    dp->~S19520C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19520C12(Test_S19520C12, "S19520C12", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19520C12C1Ev();
extern void _ZN9S19520C12D1Ev();
Name_Map name_map_S19520C12[] = {
  NSPAIR(_ZN9S19520C12C1Ev),
  NSPAIR(_ZN9S19520C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19520C12[];
extern void _ZN9S19520C12D1Ev();
extern void _ZN9S19520C12D0Ev();
extern void _ZN9S19520C123v11Ev();
static  VTBL_ENTRY vtc_S19520C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19520C12[0]),
  (VTBL_ENTRY)&_ZN9S19520C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19520C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19520C123v11Ev,
};
extern VTBL_ENTRY _ZTI9S19520C12[];
extern  VTBL_ENTRY _ZTV9S19520C12[];
Class_Descriptor cd_S19520C12 = {  "S19520C12", // class name
  0,0,//no base classes
  &(vtc_S19520C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19520C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19520C12),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19520C1  : virtual S19520C2 , virtual S19520C12 {
  int s19520c1f0[12];
  void *s19520c1f1;
  int s19520c1f2;
  short s19520c1f3;
  long double s19520c1f4;
  long s19520c1f5[2];
  void *s19520c1f6;
  int s19520c1f7;
  virtual void  v1(); // _ZN8S19520C12v1Ev
  ~S19520C1(); // tgen
  S19520C1(); // tgen
};
//SIG(1 S19520C1) C1{ VBC2{ BC3{ VBC4{ v2} BC5{ BC6{ VBC4 v3 v4 v5 Fp[3] FC7{} Fp} v6 v7 Fp FC8{ BC9{ BC10{ v12} Fc[5] FC11{ VBC10 v13 v14 v15 Fp[3] FC7 Fp}[2] Fi Fp[7] FC11 FC10 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC10 VBC11 Fi Fp} Fi Fp Fi[2]} VBC12{ VBC13{ BC4 Fc[5] FC6[2] Fi Fp[7] FC6 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC4 FC14{ BC15{ v17} v16 Fc FL Fi[3] FC16{ BC15 Fc[5] FC17{ VBC15 v18 v19 v20 Fp[3] FC7 Fp}[2] Fi Fp[7] FC17 FC15 Fc Fi Fs[5] Fi[8] FL Fc:8}} Fp Fi} vd v9 Fp[2] Fi[9] FC14 FC4[9] FL FD Fp FL Fl FL} BC5 vd v10 FL Fi FC7 FD[2] Fs[3] FC3 FL:2} VBC18{ vd v11 Fi} v1 Fi[12] Fp Fi Fs FD Fl[2] Fp Fi}


void  S19520C1 ::v1(){vfunc_called(this, "_ZN8S19520C12v1Ev");}
S19520C1 ::~S19520C1(){ note_dtor("S19520C1", this);} // tgen
S19520C1 ::S19520C1(){ note_ctor("S19520C1", this);} // tgen

static void Test_S19520C1()
{
  extern Class_Descriptor cd_S19520C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(258,626)];
    init_test(&cd_S19520C1, buf);
    S19520C1 *dp, &lv = *(dp=new (buf) S19520C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4112,2500), "sizeof(S19520C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19520C1)");
    /*is_ambiguous_... S19520C3::S19520C4 */ AMB_check_base_class_offset(lv, (S19520C4*)(S19520C3*)(S19520C2*), 0, "S19520C1");
    check_base_class_offset(lv, (S19520C4*)(S19520C6*)(S19520C5*)(S19520C3*)(S19520C2*), 0, "S19520C1");
    /*is_ambiguous_... S19520C2::S19520C5 */ AMB_check_base_class_offset(lv, (S19520C4*)(S19520C6*)(S19520C5*)(S19520C2*), 0, "S19520C1");
    check_base_class_offset(lv, (S19520C6*)(S19520C5*)(S19520C3*)(S19520C2*), ABISELECT(128,92), "S19520C1");
    check_base_class_offset(lv, (S19520C5*)(S19520C3*)(S19520C2*), ABISELECT(128,92), "S19520C1");
    check_base_class_offset(lv, (S19520C4*)(S19520C9*), ABISELECT(3792,2308), "S19520C1");
    check_base_class_offset(lv, (S19520C9*)(S19520C10*), ABISELECT(3792,2308), "S19520C1");
    check_base_class_offset(lv, (S19520C10*)(S19520C3*)(S19520C2*), ABISELECT(3352,2044), "S19520C1");
    check_base_class_offset(lv, (S19520C3*)(S19520C2*), ABISELECT(128,92), "S19520C1");
    /*is_ambiguous_... S19520C2::S19520C5 */ AMB_check_base_class_offset(lv, (S19520C6*)(S19520C5*)(S19520C2*), ABISELECT(1104,688), "S19520C1");
    /*is_ambiguous_... S19520C2::S19520C5 */ AMB_check_base_class_offset(lv, (S19520C5*)(S19520C2*), ABISELECT(1104,688), "S19520C1");
    check_base_class_offset(lv, (S19520C2*), ABISELECT(128,92), "S19520C1");
    check_base_class_offset(lv, (S19520C12*), ABISELECT(4096,2492), "S19520C1");
    check_field_offset(lv, s19520c1f0, ABISELECT(8,4), "S19520C1.s19520c1f0");
    check_field_offset(lv, s19520c1f1, ABISELECT(56,52), "S19520C1.s19520c1f1");
    check_field_offset(lv, s19520c1f2, ABISELECT(64,56), "S19520C1.s19520c1f2");
    check_field_offset(lv, s19520c1f3, ABISELECT(68,60), "S19520C1.s19520c1f3");
    check_field_offset(lv, s19520c1f4, ABISELECT(80,64), "S19520C1.s19520c1f4");
    check_field_offset(lv, s19520c1f5, ABISELECT(96,76), "S19520C1.s19520c1f5");
    check_field_offset(lv, s19520c1f6, ABISELECT(112,84), "S19520C1.s19520c1f6");
    check_field_offset(lv, s19520c1f7, ABISELECT(120,88), "S19520C1.s19520c1f7");
    test_class_info(&lv, &cd_S19520C1);
    dp->~S19520C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19520C1(Test_S19520C1, "S19520C1", ABISELECT(4112,2500));

#else // __cplusplus

extern void _ZN8S19520C1C1Ev();
extern void _ZN8S19520C1D1Ev();
Name_Map name_map_S19520C1[] = {
  NSPAIR(_ZN8S19520C1C1Ev),
  NSPAIR(_ZN8S19520C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19520C4;
extern VTBL_ENTRY _ZTI8S19520C4[];
extern  VTBL_ENTRY _ZTV8S19520C4[];
extern Class_Descriptor cd_S19520C6;
extern VTBL_ENTRY _ZTI8S19520C6[];
extern  VTBL_ENTRY _ZTV8S19520C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19520C6[];
extern Class_Descriptor cd_S19520C5;
extern VTBL_ENTRY _ZTI8S19520C5[];
extern  VTBL_ENTRY _ZTV8S19520C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19520C5[];
extern Class_Descriptor cd_S19520C4;
extern VTBL_ENTRY _ZTI8S19520C4[];
extern  VTBL_ENTRY _ZTV8S19520C4[];
extern Class_Descriptor cd_S19520C9;
extern VTBL_ENTRY _ZTI8S19520C9[];
extern  VTBL_ENTRY _ZTV8S19520C9[];
extern Class_Descriptor cd_S19520C10;
extern VTBL_ENTRY _ZTI9S19520C10[];
extern  VTBL_ENTRY _ZTV9S19520C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19520C10[];
extern Class_Descriptor cd_S19520C3;
extern VTBL_ENTRY _ZTI8S19520C3[];
extern  VTBL_ENTRY _ZTV8S19520C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19520C3[];
extern Class_Descriptor cd_S19520C6;
extern VTBL_ENTRY _ZTI8S19520C6[];
extern  VTBL_ENTRY _ZTV8S19520C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19520C6[];
extern Class_Descriptor cd_S19520C5;
extern VTBL_ENTRY _ZTI8S19520C5[];
extern  VTBL_ENTRY _ZTV8S19520C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19520C5[];
extern Class_Descriptor cd_S19520C2;
extern VTBL_ENTRY _ZTI8S19520C2[];
extern  VTBL_ENTRY _ZTV8S19520C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19520C2[];
extern Class_Descriptor cd_S19520C12;
extern VTBL_ENTRY _ZTI9S19520C12[];
extern  VTBL_ENTRY _ZTV9S19520C12[];
static Base_Class bases_S19520C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19520C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19520C6,    ABISELECT(128,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19520C5,    ABISELECT(128,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19520C4,    ABISELECT(3792,2308), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19520C9,    ABISELECT(3792,2308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19520C10,    ABISELECT(3352,2044), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19520C3,    ABISELECT(128,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19520C6,    ABISELECT(1104,688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19520C5,    ABISELECT(1104,688), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19520C2,    ABISELECT(128,92), //bcp->offset
    12, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19520C12,    ABISELECT(4096,2492), //bcp->offset
    55, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19520C1[];
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C12v1Ev();
extern void _ZN8S19520C1D1Ev();
extern void _ZN8S19520C1D0Ev();
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
extern void _ZN8S19520C52v6Ev();
extern void _ZN8S19520C52v7Ev();
extern void ABISELECT(_ZTv0_n96_N8S19520C1D1Ev,_ZTv0_n48_N8S19520C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S19520C1D1Ev,_ZThn92_N8S19520C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19520C1D0Ev,_ZTv0_n48_N8S19520C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S19520C1D0Ev,_ZThn92_N8S19520C1D0Ev)() __attribute__((weak));
extern void _ZN8S19520C32v9Ev();
extern void _ZN8S19520C23v10Ev();
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
extern void _ZN8S19520C52v6Ev();
extern void _ZN8S19520C52v7Ev();
extern void _ZN9S19520C102v8Ev();
extern void _ZN8S19520C42v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S19520C1D1Ev,_ZTv0_n12_N8S19520C1D1Ev)();
extern void ABISELECT(_ZThn4096_N8S19520C1D1Ev,_ZThn2492_N8S19520C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19520C1D0Ev,_ZTv0_n12_N8S19520C1D0Ev)();
extern void ABISELECT(_ZThn4096_N8S19520C1D0Ev,_ZThn2492_N8S19520C1D0Ev)() __attribute__((weak));
extern void _ZN9S19520C123v11Ev();
static  VTBL_ENTRY vtc_S19520C1[] = {
  ABISELECT(4096,2492),
  ABISELECT(3792,2308),
  ABISELECT(3352,2044),
  0,
  ABISELECT(128,92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C1[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19520C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19520C1D0Ev,
  0,
  0,
  ABISELECT(-128,-92),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(3664,2216),
  ABISELECT(3224,1952),
  ABISELECT(-128,-92),
  ABISELECT(-128,-92),
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI8S19520C1[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19520C1D1Ev,_ZTv0_n48_N8S19520C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19520C1D0Ev,_ZTv0_n48_N8S19520C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19520C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19520C23v10Ev,
  ABISELECT(-1104,-688),
  ABISELECT(-1104,-688),
  ABISELECT(-1104,-688),
  (VTBL_ENTRY)&(_ZTI8S19520C1[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v7Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-3352,-2044),
  (VTBL_ENTRY)&(_ZTI8S19520C1[0]),
  (VTBL_ENTRY)&_ZN9S19520C102v8Ev,
  0,
  ABISELECT(-3792,-2308),
  (VTBL_ENTRY)&(_ZTI8S19520C1[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  0,
  ABISELECT(-4096,-2492),
  ABISELECT(-4096,-2492),
  (VTBL_ENTRY)&(_ZTI8S19520C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19520C1D1Ev,_ZTv0_n12_N8S19520C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19520C1D0Ev,_ZTv0_n12_N8S19520C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19520C123v11Ev,
};
extern VTBL_ENTRY _ZTV8S19520C1[];
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
extern void _ZN8S19520C52v6Ev();
extern void _ZN8S19520C52v7Ev();
extern void _ZN8S19520C2D1Ev();
extern void _ZN8S19520C2D0Ev();
extern void _ZN8S19520C32v9Ev();
extern void _ZN8S19520C23v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C2__8S19520C1[] = {
  ABISELECT(3664,2216),
  ABISELECT(3224,1952),
  ABISELECT(-128,-92),
  ABISELECT(-128,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C2[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19520C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19520C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19520C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19520C23v10Ev,
};
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
extern void _ZN8S19520C52v6Ev();
extern void _ZN8S19520C52v7Ev();
extern void _ZN8S19520C3D1Ev();
extern void _ZN8S19520C3D0Ev();
extern void _ZN8S19520C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C38S19520C2__8S19520C1[] = {
  ABISELECT(3664,2216),
  ABISELECT(3224,1952),
  ABISELECT(-128,-92),
  ABISELECT(-128,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C3[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19520C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19520C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19520C32v9Ev,
};
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
extern void _ZN8S19520C52v6Ev();
extern void _ZN8S19520C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C58S19520C38S19520C2__8S19520C1[] = {
  ABISELECT(-128,-92),
  ABISELECT(-128,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C5[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v7Ev,
};
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C68S19520C58S19520C38S19520C2__8S19520C1[] = {
  ABISELECT(-128,-92),
  ABISELECT(-128,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C6[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
};
extern void _ZN8S19520C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C4__8S19520C68S19520C58S19520C38S19520C2__8S19520C1[] = {
  0,
  ABISELECT(128,92),
  (VTBL_ENTRY)&(_ZTI8S19520C6[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
};
extern void _ZN8S19520C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C4__8S19520C58S19520C38S19520C2__8S19520C1[] = {
  0,
  ABISELECT(128,92),
  (VTBL_ENTRY)&(_ZTI8S19520C5[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
};
extern void _ZN8S19520C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C4__8S19520C38S19520C2__8S19520C1[] = {
  0,
  ABISELECT(128,92),
  (VTBL_ENTRY)&(_ZTI8S19520C3[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
};
extern void _ZN9S19520C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19520C10__8S19520C38S19520C2__8S19520C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-3224,-1952),
  (VTBL_ENTRY)&(_ZTI8S19520C3[0]),
  (VTBL_ENTRY)&_ZN9S19520C102v8Ev,
};
extern void _ZN8S19520C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C48S19520C9__A1__8S19520C38S19520C2__8S19520C1[] = {
  0,
  ABISELECT(-3664,-2216),
  (VTBL_ENTRY)&(_ZTI8S19520C3[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
};
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
extern void _ZN8S19520C52v6Ev();
extern void _ZN8S19520C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C58S19520C2__A1__8S19520C1[] = {
  ABISELECT(-1104,-688),
  ABISELECT(-1104,-688),
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C5[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v7Ev,
};
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C68S19520C58S19520C2__A1__8S19520C1[] = {
  ABISELECT(-1104,-688),
  ABISELECT(-1104,-688),
  0,
  (VTBL_ENTRY)&(_ZTI8S19520C6[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
};
extern void _ZN8S19520C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C4__8S19520C68S19520C58S19520C2__A1__8S19520C1[] = {
  0,
  ABISELECT(1104,688),
  (VTBL_ENTRY)&(_ZTI8S19520C6[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
};
extern void _ZN8S19520C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C4__8S19520C58S19520C2__A1__8S19520C1[] = {
  0,
  ABISELECT(1104,688),
  (VTBL_ENTRY)&(_ZTI8S19520C5[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
};
extern void _ZN8S19520C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C4__8S19520C2__8S19520C1[] = {
  0,
  ABISELECT(128,92),
  (VTBL_ENTRY)&(_ZTI8S19520C2[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
};
extern void _ZN9S19520C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19520C10__8S19520C2__8S19520C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-3224,-1952),
  (VTBL_ENTRY)&(_ZTI8S19520C2[0]),
  (VTBL_ENTRY)&_ZN9S19520C102v8Ev,
};
extern void _ZN8S19520C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C48S19520C9__A1__8S19520C2__8S19520C1[] = {
  0,
  ABISELECT(-3664,-2216),
  (VTBL_ENTRY)&(_ZTI8S19520C2[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
};
extern void _ZN8S19520C42v2Ev();
extern void _ZN8S19520C62v3Ev();
extern void _ZN8S19520C62v4Ev();
extern void _ZN8S19520C62v5Ev();
extern void _ZN8S19520C52v6Ev();
extern void _ZN8S19520C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C5__A1__8S19520C2__8S19520C1[] = {
  ABISELECT(-1104,-688),
  ABISELECT(-1104,-688),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S19520C2[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19520C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19520C52v7Ev,
};
extern void _ZN9S19520C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19520C10__8S19520C1[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19520C10[0]),
  (VTBL_ENTRY)&_ZN9S19520C102v8Ev,
};
extern void _ZN8S19520C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19520C48S19520C9__9S19520C10__8S19520C1[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19520C10[0]),
  (VTBL_ENTRY)&_ZN8S19520C42v2Ev,
};
static  VTT_ENTRY vtt_S19520C1[] = {
  {&(_ZTV8S19520C1[8]),  8,62},
  {&(_ZTV8S19520C1[26]),  26,62},
  {&(_ZTV8S19520C1[8]),  8,62},
  {&(_ZTV8S19520C1[50]),  50,62},
  {&(_ZTV8S19520C1[54]),  54,62},
  {&(_ZTV8S19520C1[40]),  40,62},
  {&(_ZTV8S19520C1[59]),  59,62},
  {&(_tg__ZTV8S19520C2__8S19520C1[6]),  6,16},
  {&(_tg__ZTV8S19520C38S19520C2__8S19520C1[6]),  6,15},
  {&(_tg__ZTV8S19520C58S19520C38S19520C2__8S19520C1[4]),  4,10},
  {&(_tg__ZTV8S19520C68S19520C58S19520C38S19520C2__8S19520C1[4]),  4,8},
  {&(_tg__ZTV8S19520C4__8S19520C68S19520C58S19520C38S19520C2__8S19520C1[3]),  3,4},
  {&(_tg__ZTV8S19520C4__8S19520C58S19520C38S19520C2__8S19520C1[3]),  3,4},
  {&(_tg__ZTV8S19520C4__8S19520C38S19520C2__8S19520C1[3]),  3,4},
  {&(_tg__ZTV9S19520C10__8S19520C38S19520C2__8S19520C1[4]),  4,5},
  {&(_tg__ZTV8S19520C48S19520C9__A1__8S19520C38S19520C2__8S19520C1[3]),  3,4},
  {&(_tg__ZTV8S19520C58S19520C2__A1__8S19520C1[4]),  4,10},
  {&(_tg__ZTV8S19520C68S19520C58S19520C2__A1__8S19520C1[4]),  4,8},
  {&(_tg__ZTV8S19520C4__8S19520C68S19520C58S19520C2__A1__8S19520C1[3]),  3,4},
  {&(_tg__ZTV8S19520C4__8S19520C58S19520C2__A1__8S19520C1[3]),  3,4},
  {&(_tg__ZTV8S19520C4__8S19520C2__8S19520C1[3]),  3,4},
  {&(_tg__ZTV9S19520C10__8S19520C2__8S19520C1[4]),  4,5},
  {&(_tg__ZTV8S19520C48S19520C9__A1__8S19520C2__8S19520C1[3]),  3,4},
  {&(_tg__ZTV8S19520C5__A1__8S19520C2__8S19520C1[4]),  4,10},
  {&(_tg__ZTV9S19520C10__8S19520C1[3]),  3,4},
  {&(_tg__ZTV8S19520C48S19520C9__9S19520C10__8S19520C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19520C1[];
extern  VTBL_ENTRY _ZTV8S19520C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19520C1[];
static VTBL_ENTRY alt_thunk_names77[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19520C1D0Ev,_ZTv0_n12_N8S19520C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4096_N8S19520C1D0Ev,_ZThn2492_N8S19520C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19520C1D1Ev,_ZTv0_n12_N8S19520C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4096_N8S19520C1D1Ev,_ZThn2492_N8S19520C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19520C1D0Ev,_ZTv0_n48_N8S19520C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19520C1D0Ev,_ZThn92_N8S19520C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19520C1D1Ev,_ZTv0_n48_N8S19520C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19520C1D1Ev,_ZThn92_N8S19520C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19520C1 = {  "S19520C1", // class name
  bases_S19520C1, 11,
  &(vtc_S19520C1[0]), // expected_vtbl_contents
  &(vtt_S19520C1[0]), // expected_vtt_contents
  ABISELECT(4112,2500), // object size
  NSPAIRA(_ZTI8S19520C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19520C1),62, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19520C1),26, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names77,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19519C4  {
  virtual void  v2(); // _ZN8S19519C42v2Ev
  ~S19519C4(); // tgen
  S19519C4(); // tgen
};
//SIG(-1 S19519C4) C1{ v1}


void  S19519C4 ::v2(){vfunc_called(this, "_ZN8S19519C42v2Ev");}
S19519C4 ::~S19519C4(){ note_dtor("S19519C4", this);} // tgen
S19519C4 ::S19519C4(){ note_ctor("S19519C4", this);} // tgen

static void Test_S19519C4()
{
  extern Class_Descriptor cd_S19519C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19519C4, buf);
    S19519C4 *dp, &lv = *(dp=new (buf) S19519C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19519C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19519C4)");
    test_class_info(&lv, &cd_S19519C4);
    dp->~S19519C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19519C4(Test_S19519C4, "S19519C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19519C4C1Ev();
extern void _ZN8S19519C4D1Ev();
Name_Map name_map_S19519C4[] = {
  NSPAIR(_ZN8S19519C4C1Ev),
  NSPAIR(_ZN8S19519C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19519C4[];
extern void _ZN8S19519C42v2Ev();
static  VTBL_ENTRY vtc_S19519C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C4[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S19519C4[];
extern  VTBL_ENTRY _ZTV8S19519C4[];
Class_Descriptor cd_S19519C4 = {  "S19519C4", // class name
  0,0,//no base classes
  &(vtc_S19519C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19519C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19519C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19519C6  : virtual S19519C4 {
  void *s19519c6f0[3];
  ::S2489C12_nt s19519c6f1;
  void *s19519c6f2;
  virtual void  v3(); // _ZN8S19519C62v3Ev
  virtual void  v4(); // _ZN8S19519C62v4Ev
  virtual void  v5(); // _ZN8S19519C62v5Ev
  ~S19519C6(); // tgen
  S19519C6(); // tgen
};
//SIG(-1 S19519C6) C1{ VBC2{ v4} v1 v2 v3 Fp[3] FC3{} Fp}


void  S19519C6 ::v3(){vfunc_called(this, "_ZN8S19519C62v3Ev");}
void  S19519C6 ::v4(){vfunc_called(this, "_ZN8S19519C62v4Ev");}
void  S19519C6 ::v5(){vfunc_called(this, "_ZN8S19519C62v5Ev");}
S19519C6 ::~S19519C6(){ note_dtor("S19519C6", this);} // tgen
S19519C6 ::S19519C6(){ note_ctor("S19519C6", this);} // tgen

static void Test_S19519C6()
{
  extern Class_Descriptor cd_S19519C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S19519C6, buf);
    S19519C6 *dp, &lv = *(dp=new (buf) S19519C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19519C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19519C6)");
    check_base_class_offset(lv, (S19519C4*), 0, "S19519C6");
    check_field_offset(lv, s19519c6f0, ABISELECT(8,4), "S19519C6.s19519c6f0");
    check_field_offset(lv, s19519c6f1, ABISELECT(32,16), "S19519C6.s19519c6f1");
    check_field_offset(lv, s19519c6f2, ABISELECT(40,20), "S19519C6.s19519c6f2");
    test_class_info(&lv, &cd_S19519C6);
    dp->~S19519C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19519C6(Test_S19519C6, "S19519C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19519C6C1Ev();
extern void _ZN8S19519C6D1Ev();
Name_Map name_map_S19519C6[] = {
  NSPAIR(_ZN8S19519C6C1Ev),
  NSPAIR(_ZN8S19519C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19519C4;
extern VTBL_ENTRY _ZTI8S19519C4[];
extern  VTBL_ENTRY _ZTV8S19519C4[];
static Base_Class bases_S19519C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19519C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19519C6[];
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
static  VTBL_ENTRY vtc_S19519C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C6[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
};
extern VTBL_ENTRY _ZTV8S19519C6[];
static  VTT_ENTRY vtt_S19519C6[] = {
  {&(_ZTV8S19519C6[4]),  4,8},
  {&(_ZTV8S19519C6[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S19519C6[];
extern  VTBL_ENTRY _ZTV8S19519C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19519C6[];
Class_Descriptor cd_S19519C6 = {  "S19519C6", // class name
  bases_S19519C6, 1,
  &(vtc_S19519C6[0]), // expected_vtbl_contents
  &(vtt_S19519C6[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19519C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19519C6),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19519C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19519C5  : S19519C6 {
  void *s19519c5f0;
  ::S19277C8 s19519c5f1;
  int s19519c5f2;
  void *s19519c5f3;
  int s19519c5f4[2];
  virtual void  v6(); // _ZN8S19519C52v6Ev
  virtual void  v7(); // _ZN8S19519C52v7Ev
  ~S19519C5(); // tgen
  S19519C5(); // tgen
};
//SIG(-1 S19519C5) C1{ BC2{ VBC3{ v3} v4 v5 v6 Fp[3] FC4{} Fp} v1 v2 Fp FC5{ BC6{ BC7{ v7} Fc[5] FC8{ VBC7 v8 v9 v10 Fp[3] FC4 Fp}[2] Fi Fp[7] FC8 FC7 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC7 VBC8 Fi Fp} Fi Fp Fi[2]}


void  S19519C5 ::v6(){vfunc_called(this, "_ZN8S19519C52v6Ev");}
void  S19519C5 ::v7(){vfunc_called(this, "_ZN8S19519C52v7Ev");}
S19519C5 ::~S19519C5(){ note_dtor("S19519C5", this);} // tgen
S19519C5 ::S19519C5(){ note_ctor("S19519C5", this);} // tgen

static void Test_S19519C5()
{
  extern Class_Descriptor cd_S19519C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(56,66)];
    init_test(&cd_S19519C5, buf);
    S19519C5 *dp, &lv = *(dp=new (buf) S19519C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(440,260), "sizeof(S19519C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19519C5)");
    check_base_class_offset(lv, (S19519C4*)(S19519C6*), 0, "S19519C5");
    check_base_class_offset(lv, (S19519C6*), 0, "S19519C5");
    check_field_offset(lv, s19519c5f0, ABISELECT(48,24), "S19519C5.s19519c5f0");
    check_field_offset(lv, s19519c5f1, ABISELECT(56,28), "S19519C5.s19519c5f1");
    check_field_offset(lv, s19519c5f2, ABISELECT(416,244), "S19519C5.s19519c5f2");
    check_field_offset(lv, s19519c5f3, ABISELECT(424,248), "S19519C5.s19519c5f3");
    check_field_offset(lv, s19519c5f4, ABISELECT(432,252), "S19519C5.s19519c5f4");
    test_class_info(&lv, &cd_S19519C5);
    dp->~S19519C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19519C5(Test_S19519C5, "S19519C5", ABISELECT(440,260));

#else // __cplusplus

extern void _ZN8S19519C5C1Ev();
extern void _ZN8S19519C5D1Ev();
Name_Map name_map_S19519C5[] = {
  NSPAIR(_ZN8S19519C5C1Ev),
  NSPAIR(_ZN8S19519C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19519C4;
extern VTBL_ENTRY _ZTI8S19519C4[];
extern  VTBL_ENTRY _ZTV8S19519C4[];
extern Class_Descriptor cd_S19519C6;
extern VTBL_ENTRY _ZTI8S19519C6[];
extern  VTBL_ENTRY _ZTV8S19519C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19519C6[];
static Base_Class bases_S19519C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19519C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19519C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19519C5[];
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
extern void _ZN8S19519C52v6Ev();
extern void _ZN8S19519C52v7Ev();
static  VTBL_ENTRY vtc_S19519C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C5[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v7Ev,
};
extern VTBL_ENTRY _ZTV8S19519C5[];
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C6__8S19519C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C6[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
};
static  VTT_ENTRY vtt_S19519C5[] = {
  {&(_ZTV8S19519C5[4]),  4,10},
  {&(_tg__ZTV8S19519C6__8S19519C5[4]),  4,8},
  {&(_tg__ZTV8S19519C6__8S19519C5[4]),  4,8},
  {&(_ZTV8S19519C5[4]),  4,10},
};
extern VTBL_ENTRY _ZTI8S19519C5[];
extern  VTBL_ENTRY _ZTV8S19519C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19519C5[];
Class_Descriptor cd_S19519C5 = {  "S19519C5", // class name
  bases_S19519C5, 2,
  &(vtc_S19519C5[0]), // expected_vtbl_contents
  &(vtt_S19519C5[0]), // expected_vtt_contents
  ABISELECT(440,260), // object size
  NSPAIRA(_ZTI8S19519C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19519C5),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19519C5),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19519C9  : S19519C4 {
  char s19519c9f0[5];
  ::S19519C6 s19519c9f1[2];
  int s19519c9f2;
  void *s19519c9f3[7];
  ::S19519C6 s19519c9f4;
  ::S19519C4 s19519c9f5;
  char s19519c9f6;
  int s19519c9f7;
  short s19519c9f8[5];
  int s19519c9f9[8];
  __tsi64 s19519c9f10;
  char s19519c9f11:8;
  ~S19519C9(); // tgen
  S19519C9(); // tgen
};
//SIG(-1 S19519C9) C1{ BC2{ v1} Fc[5] FC3{ VBC2 v2 v3 v4 Fp[3] FC4{} Fp}[2] Fi Fp[7] FC3 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}


S19519C9 ::~S19519C9(){ note_dtor("S19519C9", this);} // tgen
S19519C9 ::S19519C9(){ note_ctor("S19519C9", this);} // tgen

static void Test_S19519C9()
{
  extern Class_Descriptor cd_S19519C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,47)];
    init_test(&cd_S19519C9, buf);
    S19519C9 *dp, &lv = *(dp=new (buf) S19519C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,184), "sizeof(S19519C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19519C9)");
    check_base_class_offset(lv, (S19519C4*), 0, "S19519C9");
    check_field_offset(lv, s19519c9f0, ABISELECT(8,4), "S19519C9.s19519c9f0");
    check_field_offset(lv, s19519c9f1, ABISELECT(16,12), "S19519C9.s19519c9f1");
    check_field_offset(lv, s19519c9f2, ABISELECT(112,60), "S19519C9.s19519c9f2");
    check_field_offset(lv, s19519c9f3, ABISELECT(120,64), "S19519C9.s19519c9f3");
    check_field_offset(lv, s19519c9f4, ABISELECT(176,92), "S19519C9.s19519c9f4");
    check_field_offset(lv, s19519c9f5, ABISELECT(224,116), "S19519C9.s19519c9f5");
    check_field_offset(lv, s19519c9f6, ABISELECT(232,120), "S19519C9.s19519c9f6");
    check_field_offset(lv, s19519c9f7, ABISELECT(236,124), "S19519C9.s19519c9f7");
    check_field_offset(lv, s19519c9f8, ABISELECT(240,128), "S19519C9.s19519c9f8");
    check_field_offset(lv, s19519c9f9, ABISELECT(252,140), "S19519C9.s19519c9f9");
    check_field_offset(lv, s19519c9f10, ABISELECT(288,172), "S19519C9.s19519c9f10");
    set_bf_and_test(lv, s19519c9f11, ABISELECT(296,180), 0, 8, 1, "S19519C9");
    set_bf_and_test(lv, s19519c9f11, ABISELECT(296,180), 0, 8, hide_sll(1LL<<7), "S19519C9");
    test_class_info(&lv, &cd_S19519C9);
    dp->~S19519C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19519C9(Test_S19519C9, "S19519C9", ABISELECT(304,184));

#else // __cplusplus

extern void _ZN8S19519C9C1Ev();
extern void _ZN8S19519C9D1Ev();
Name_Map name_map_S19519C9[] = {
  NSPAIR(_ZN8S19519C9C1Ev),
  NSPAIR(_ZN8S19519C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19519C4;
extern VTBL_ENTRY _ZTI8S19519C4[];
extern  VTBL_ENTRY _ZTV8S19519C4[];
static Base_Class bases_S19519C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19519C4,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19519C9[];
extern void _ZN8S19519C42v2Ev();
static  VTBL_ENTRY vtc_S19519C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C9[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S19519C9[];
extern  VTBL_ENTRY _ZTV8S19519C9[];
Class_Descriptor cd_S19519C9 = {  "S19519C9", // class name
  bases_S19519C9, 1,
  &(vtc_S19519C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,184), // object size
  NSPAIRA(_ZTI8S19519C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19519C9),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19519C10  : virtual S19519C9 {
  void *s19519c10f0;
  __tsi64 s19519c10f1;
  void *s19519c10f2[6];
  ::S19519C4 s19519c10f3;
  ::S20113C12 s19519c10f4;
  void *s19519c10f5;
  int s19519c10f6;
  virtual void  v8(); // _ZN9S19519C102v8Ev
  ~S19519C10(); // tgen
  S19519C10(); // tgen
};
//SIG(-1 S19519C10) C1{ VBC2{ BC3{ v2} Fc[5] FC4{ VBC3 v8 v9 v10 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v1 Fp FL Fp[6] FC3 FC6{ BC7{ v4} v3 Fc FL Fi[3] FC8{ BC7 Fc[5] FC9{ VBC7 v5 v6 v7 Fp[3] FC5 Fp}[2] Fi Fp[7] FC9 FC7 Fc Fi Fs[5] Fi[8] FL Fc:8}} Fp Fi}


void  S19519C10 ::v8(){vfunc_called(this, "_ZN9S19519C102v8Ev");}
S19519C10 ::~S19519C10(){ note_dtor("S19519C10", this);} // tgen
S19519C10 ::S19519C10(){ note_ctor("S19519C10", this);} // tgen

static void Test_S19519C10()
{
  extern Class_Descriptor cd_S19519C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(94,113)];
    init_test(&cd_S19519C10, buf);
    S19519C10 *dp, &lv = *(dp=new (buf) S19519C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(744,448), "sizeof(S19519C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19519C10)");
    check_base_class_offset(lv, (S19519C4*)(S19519C9*), ABISELECT(440,264), "S19519C10");
    check_base_class_offset(lv, (S19519C9*), ABISELECT(440,264), "S19519C10");
    check_field_offset(lv, s19519c10f0, ABISELECT(8,4), "S19519C10.s19519c10f0");
    check_field_offset(lv, s19519c10f1, ABISELECT(16,8), "S19519C10.s19519c10f1");
    check_field_offset(lv, s19519c10f2, ABISELECT(24,16), "S19519C10.s19519c10f2");
    check_field_offset(lv, s19519c10f3, ABISELECT(72,40), "S19519C10.s19519c10f3");
    check_field_offset(lv, s19519c10f4, ABISELECT(80,44), "S19519C10.s19519c10f4");
    check_field_offset(lv, s19519c10f5, ABISELECT(424,256), "S19519C10.s19519c10f5");
    check_field_offset(lv, s19519c10f6, ABISELECT(432,260), "S19519C10.s19519c10f6");
    test_class_info(&lv, &cd_S19519C10);
    dp->~S19519C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19519C10(Test_S19519C10, "S19519C10", ABISELECT(744,448));

#else // __cplusplus

extern void _ZN9S19519C10C1Ev();
extern void _ZN9S19519C10D1Ev();
Name_Map name_map_S19519C10[] = {
  NSPAIR(_ZN9S19519C10C1Ev),
  NSPAIR(_ZN9S19519C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19519C4;
extern VTBL_ENTRY _ZTI8S19519C4[];
extern  VTBL_ENTRY _ZTV8S19519C4[];
extern Class_Descriptor cd_S19519C9;
extern VTBL_ENTRY _ZTI8S19519C9[];
extern  VTBL_ENTRY _ZTV8S19519C9[];
static Base_Class bases_S19519C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19519C4,    ABISELECT(440,264), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19519C9,    ABISELECT(440,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19519C10[];
extern void _ZN9S19519C102v8Ev();
extern void _ZN8S19519C42v2Ev();
static  VTBL_ENTRY vtc_S19519C10[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19519C10[0]),
  (VTBL_ENTRY)&_ZN9S19519C102v8Ev,
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19519C10[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
};
extern VTBL_ENTRY _ZTV9S19519C10[];
static  VTT_ENTRY vtt_S19519C10[] = {
  {&(_ZTV9S19519C10[3]),  3,8},
  {&(_ZTV9S19519C10[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S19519C10[];
extern  VTBL_ENTRY _ZTV9S19519C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19519C10[];
Class_Descriptor cd_S19519C10 = {  "S19519C10", // class name
  bases_S19519C10, 2,
  &(vtc_S19519C10[0]), // expected_vtbl_contents
  &(vtt_S19519C10[0]), // expected_vtt_contents
  ABISELECT(744,448), // object size
  NSPAIRA(_ZTI9S19519C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19519C10),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19519C10),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19519C3  : virtual S19519C4 , S19519C5 , virtual S19519C10 {
  void *s19519c3f0[2];
  int s19519c3f1[9];
  ::S20113C12 s19519c3f2;
  ::S19519C4 s19519c3f3[9];
  __tsi64 s19519c3f4;
  long double s19519c3f5;
  void *s19519c3f6;
  __tsi64 s19519c3f7;
  long s19519c3f8;
  __tsi64 s19519c3f9;
  virtual  ~S19519C3(); // _ZN8S19519C3D2Ev
  virtual void  v9(); // _ZN8S19519C32v9Ev
  S19519C3(); // tgen
};
//SIG(-1 S19519C3) C1{ VBC2{ v2} BC3{ BC4{ VBC2 v3 v4 v5 Fp[3] FC5{} Fp} v6 v7 Fp FC6{ BC7{ BC8{ v9} Fc[5] FC9{ VBC8 v10 v11 v12 Fp[3] FC5 Fp}[2] Fi Fp[7] FC9 FC8 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC8 VBC9 Fi Fp} Fi Fp Fi[2]} VBC10{ VBC11{ BC2 Fc[5] FC4[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC2 FC12{ BC13{ v14} v13 Fc FL Fi[3] FC14{ BC13 Fc[5] FC15{ VBC13 v15 v16 v17 Fp[3] FC5 Fp}[2] Fi Fp[7] FC15 FC13 Fc Fi Fs[5] Fi[8] FL Fc:8}} Fp Fi} vd v1 Fp[2] Fi[9] FC12 FC2[9] FL FD Fp FL Fl FL}


 S19519C3 ::~S19519C3(){ note_dtor("S19519C3", this);}
void  S19519C3 ::v9(){vfunc_called(this, "_ZN8S19519C32v9Ev");}
S19519C3 ::S19519C3(){ note_ctor("S19519C3", this);} // tgen

static void Test_S19519C3()
{
  extern Class_Descriptor cd_S19519C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(109,262)];
    init_test(&cd_S19519C3, buf);
    S19519C3 *dp, &lv = *(dp=new (buf) S19519C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1728,1044), "sizeof(S19519C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19519C3)");
    /*is_ambiguous_... S19519C3::S19519C4 */ AMB_check_base_class_offset(lv, (S19519C4*), 0, "S19519C3");
    check_base_class_offset(lv, (S19519C4*)(S19519C6*)(S19519C5*), 0, "S19519C3");
    check_base_class_offset(lv, (S19519C6*)(S19519C5*), 0, "S19519C3");
    check_base_class_offset(lv, (S19519C5*), 0, "S19519C3");
    check_base_class_offset(lv, (S19519C4*)(S19519C9*), ABISELECT(1416,860), "S19519C3");
    check_base_class_offset(lv, (S19519C9*)(S19519C10*), ABISELECT(1416,860), "S19519C3");
    check_base_class_offset(lv, (S19519C10*), ABISELECT(976,596), "S19519C3");
    check_field_offset(lv, s19519c3f0, ABISELECT(440,260), "S19519C3.s19519c3f0");
    check_field_offset(lv, s19519c3f1, ABISELECT(456,268), "S19519C3.s19519c3f1");
    check_field_offset(lv, s19519c3f2, ABISELECT(496,304), "S19519C3.s19519c3f2");
    check_field_offset(lv, s19519c3f3, ABISELECT(840,516), "S19519C3.s19519c3f3");
    check_field_offset(lv, s19519c3f4, ABISELECT(912,552), "S19519C3.s19519c3f4");
    check_field_offset(lv, s19519c3f5, ABISELECT(928,560), "S19519C3.s19519c3f5");
    check_field_offset(lv, s19519c3f6, ABISELECT(944,572), "S19519C3.s19519c3f6");
    check_field_offset(lv, s19519c3f7, ABISELECT(952,576), "S19519C3.s19519c3f7");
    check_field_offset(lv, s19519c3f8, ABISELECT(960,584), "S19519C3.s19519c3f8");
    check_field_offset(lv, s19519c3f9, ABISELECT(968,588), "S19519C3.s19519c3f9");
    test_class_info(&lv, &cd_S19519C3);
    dp->~S19519C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19519C3(Test_S19519C3, "S19519C3", ABISELECT(1728,1044));

#else // __cplusplus

extern void _ZN8S19519C3C1Ev();
extern void _ZN8S19519C3D2Ev();
Name_Map name_map_S19519C3[] = {
  NSPAIR(_ZN8S19519C3C1Ev),
  NSPAIR(_ZN8S19519C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19519C4;
extern VTBL_ENTRY _ZTI8S19519C4[];
extern  VTBL_ENTRY _ZTV8S19519C4[];
extern Class_Descriptor cd_S19519C6;
extern VTBL_ENTRY _ZTI8S19519C6[];
extern  VTBL_ENTRY _ZTV8S19519C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19519C6[];
extern Class_Descriptor cd_S19519C5;
extern VTBL_ENTRY _ZTI8S19519C5[];
extern  VTBL_ENTRY _ZTV8S19519C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19519C5[];
extern Class_Descriptor cd_S19519C4;
extern VTBL_ENTRY _ZTI8S19519C4[];
extern  VTBL_ENTRY _ZTV8S19519C4[];
extern Class_Descriptor cd_S19519C9;
extern VTBL_ENTRY _ZTI8S19519C9[];
extern  VTBL_ENTRY _ZTV8S19519C9[];
extern Class_Descriptor cd_S19519C10;
extern VTBL_ENTRY _ZTI9S19519C10[];
extern  VTBL_ENTRY _ZTV9S19519C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19519C10[];
static Base_Class bases_S19519C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19519C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19519C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19519C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19519C4,    ABISELECT(1416,860), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19519C9,    ABISELECT(1416,860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19519C10,    ABISELECT(976,596), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19519C3[];
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
extern void _ZN8S19519C52v6Ev();
extern void _ZN8S19519C52v7Ev();
extern void _ZN8S19519C3D1Ev();
extern void _ZN8S19519C3D0Ev();
extern void _ZN8S19519C32v9Ev();
extern void _ZN9S19519C102v8Ev();
extern void _ZN8S19519C42v2Ev();
static  VTBL_ENTRY vtc_S19519C3[] = {
  ABISELECT(1416,860),
  ABISELECT(976,596),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C3[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19519C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19519C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19519C32v9Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S19519C3[0]),
  (VTBL_ENTRY)&_ZN9S19519C102v8Ev,
  0,
  ABISELECT(-1416,-860),
  (VTBL_ENTRY)&(_ZTI8S19519C3[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S19519C3[];
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
extern void _ZN8S19519C52v6Ev();
extern void _ZN8S19519C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C5__8S19519C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C5[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v7Ev,
};
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C68S19519C5__8S19519C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C6[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
};
extern void _ZN9S19519C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19519C10__8S19519C3[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19519C10[0]),
  (VTBL_ENTRY)&_ZN9S19519C102v8Ev,
};
extern void _ZN8S19519C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C48S19519C9__9S19519C10__8S19519C3[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19519C10[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
};
static  VTT_ENTRY vtt_S19519C3[] = {
  {&(_ZTV8S19519C3[6]),  6,24},
  {&(_tg__ZTV8S19519C5__8S19519C3[4]),  4,10},
  {&(_tg__ZTV8S19519C68S19519C5__8S19519C3[4]),  4,8},
  {&(_tg__ZTV8S19519C68S19519C5__8S19519C3[4]),  4,8},
  {&(_tg__ZTV8S19519C5__8S19519C3[4]),  4,10},
  {&(_ZTV8S19519C3[6]),  6,24},
  {&(_ZTV8S19519C3[19]),  19,24},
  {&(_ZTV8S19519C3[23]),  23,24},
  {&(_tg__ZTV9S19519C10__8S19519C3[3]),  3,4},
  {&(_tg__ZTV8S19519C48S19519C9__9S19519C10__8S19519C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19519C3[];
extern  VTBL_ENTRY _ZTV8S19519C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19519C3[];
Class_Descriptor cd_S19519C3 = {  "S19519C3", // class name
  bases_S19519C3, 6,
  &(vtc_S19519C3[0]), // expected_vtbl_contents
  &(vtt_S19519C3[0]), // expected_vtt_contents
  ABISELECT(1728,1044), // object size
  NSPAIRA(_ZTI8S19519C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19519C3),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19519C3),10, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19519C2  : S19519C3 , S19519C5 {
  __tsi64 s19519c2f0;
  int s19519c2f1;
  ::S2489C12_nt s19519c2f2;
  long double s19519c2f3[2];
  short s19519c2f4[3];
  ::S19519C3 s19519c2f5;
  int s19519c2f6:2;
  virtual  ~S19519C2(); // _ZN8S19519C2D2Ev
  virtual void  v10(); // _ZN8S19519C23v10Ev
  S19519C2(); // tgen
};
//SIG(-1 S19519C2) C1{ BC2{ VBC3{ v2} BC4{ BC5{ VBC3 v3 v4 v5 Fp[3] FC6{} Fp} v6 v7 Fp FC7{ BC8{ BC9{ v10} Fc[5] FC10{ VBC9 v11 v12 v13 Fp[3] FC6 Fp}[2] Fi Fp[7] FC10 FC9 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC9 VBC10 Fi Fp} Fi Fp Fi[2]} VBC11{ VBC12{ BC3 Fc[5] FC5[2] Fi Fp[7] FC5 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC3 FC13{ BC14{ v15} v14 Fc FL Fi[3] FC15{ BC14 Fc[5] FC16{ VBC14 v16 v17 v18 Fp[3] FC6 Fp}[2] Fi Fp[7] FC16 FC14 Fc Fi Fs[5] Fi[8] FL Fc:8}} Fp Fi} vd v9 Fp[2] Fi[9] FC13 FC3[9] FL FD Fp FL Fl FL} BC4 vd v1 FL Fi FC6 FD[2] Fs[3] FC2 Fi:2}


 S19519C2 ::~S19519C2(){ note_dtor("S19519C2", this);}
void  S19519C2 ::v10(){vfunc_called(this, "_ZN8S19519C23v10Ev");}
S19519C2 ::S19519C2(){ note_ctor("S19519C2", this);} // tgen

static void Test_S19519C2()
{
  extern Class_Descriptor cd_S19519C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(249,601)];
    init_test(&cd_S19519C2, buf);
    S19519C2 *dp, &lv = *(dp=new (buf) S19519C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3968,2400), "sizeof(S19519C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19519C2)");
    /*is_ambiguous_... S19519C3::S19519C4 */ AMB_check_base_class_offset(lv, (S19519C4*)(S19519C3*), 0, "S19519C2");
    check_base_class_offset(lv, (S19519C4*)(S19519C6*)(S19519C5*)(S19519C3*), 0, "S19519C2");
    /*is_ambiguous_... S19519C2::S19519C5 */ AMB_check_base_class_offset(lv, (S19519C4*)(S19519C6*)(S19519C5*), 0, "S19519C2");
    check_base_class_offset(lv, (S19519C6*)(S19519C5*)(S19519C3*), 0, "S19519C2");
    check_base_class_offset(lv, (S19519C5*)(S19519C3*), 0, "S19519C2");
    check_base_class_offset(lv, (S19519C4*)(S19519C9*), ABISELECT(3664,2216), "S19519C2");
    check_base_class_offset(lv, (S19519C9*)(S19519C10*), ABISELECT(3664,2216), "S19519C2");
    check_base_class_offset(lv, (S19519C10*)(S19519C3*), ABISELECT(3224,1952), "S19519C2");
    check_base_class_offset(lv, (S19519C3*), 0, "S19519C2");
    /*is_ambiguous_... S19519C2::S19519C5 */ AMB_check_base_class_offset(lv, (S19519C6*)(S19519C5*), ABISELECT(976,596), "S19519C2");
    /*is_ambiguous_... S19519C2::S19519C5 */ AMB_check_base_class_offset(lv, (S19519C5*), ABISELECT(976,596), "S19519C2");
    check_field_offset(lv, s19519c2f0, ABISELECT(1416,856), "S19519C2.s19519c2f0");
    check_field_offset(lv, s19519c2f1, ABISELECT(1424,864), "S19519C2.s19519c2f1");
    check_field_offset(lv, s19519c2f2, ABISELECT(1428,868), "S19519C2.s19519c2f2");
    check_field_offset(lv, s19519c2f3, ABISELECT(1440,872), "S19519C2.s19519c2f3");
    check_field_offset(lv, s19519c2f4, ABISELECT(1472,896), "S19519C2.s19519c2f4");
    check_field_offset(lv, s19519c2f5, ABISELECT(1488,904), "S19519C2.s19519c2f5");
    set_bf_and_test(lv, s19519c2f6, ABISELECT(3216,1948), 0, 2, 1, "S19519C2");
    set_bf_and_test(lv, s19519c2f6, ABISELECT(3216,1948), 0, 2, hide_sll(1LL<<1), "S19519C2");
    test_class_info(&lv, &cd_S19519C2);
    dp->~S19519C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19519C2(Test_S19519C2, "S19519C2", ABISELECT(3968,2400));

#else // __cplusplus

extern void _ZN8S19519C2C1Ev();
extern void _ZN8S19519C2D2Ev();
Name_Map name_map_S19519C2[] = {
  NSPAIR(_ZN8S19519C2C1Ev),
  NSPAIR(_ZN8S19519C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19519C4;
extern VTBL_ENTRY _ZTI8S19519C4[];
extern  VTBL_ENTRY _ZTV8S19519C4[];
extern Class_Descriptor cd_S19519C6;
extern VTBL_ENTRY _ZTI8S19519C6[];
extern  VTBL_ENTRY _ZTV8S19519C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19519C6[];
extern Class_Descriptor cd_S19519C5;
extern VTBL_ENTRY _ZTI8S19519C5[];
extern  VTBL_ENTRY _ZTV8S19519C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19519C5[];
extern Class_Descriptor cd_S19519C4;
extern VTBL_ENTRY _ZTI8S19519C4[];
extern  VTBL_ENTRY _ZTV8S19519C4[];
extern Class_Descriptor cd_S19519C9;
extern VTBL_ENTRY _ZTI8S19519C9[];
extern  VTBL_ENTRY _ZTV8S19519C9[];
extern Class_Descriptor cd_S19519C10;
extern VTBL_ENTRY _ZTI9S19519C10[];
extern  VTBL_ENTRY _ZTV9S19519C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19519C10[];
extern Class_Descriptor cd_S19519C3;
extern VTBL_ENTRY _ZTI8S19519C3[];
extern  VTBL_ENTRY _ZTV8S19519C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19519C3[];
extern Class_Descriptor cd_S19519C6;
extern VTBL_ENTRY _ZTI8S19519C6[];
extern  VTBL_ENTRY _ZTV8S19519C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19519C6[];
extern Class_Descriptor cd_S19519C5;
extern VTBL_ENTRY _ZTI8S19519C5[];
extern  VTBL_ENTRY _ZTV8S19519C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19519C5[];
static Base_Class bases_S19519C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19519C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19519C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19519C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19519C4,    ABISELECT(3664,2216), //bcp->offset
    31, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19519C9,    ABISELECT(3664,2216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19519C10,    ABISELECT(3224,1952), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19519C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19519C6,    ABISELECT(976,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19519C5,    ABISELECT(976,596), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19519C2[];
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
extern void _ZN8S19519C52v6Ev();
extern void _ZN8S19519C52v7Ev();
extern void _ZN8S19519C2D1Ev();
extern void _ZN8S19519C2D0Ev();
extern void _ZN8S19519C32v9Ev();
extern void _ZN8S19519C23v10Ev();
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
extern void _ZN8S19519C52v6Ev();
extern void _ZN8S19519C52v7Ev();
extern void _ZN9S19519C102v8Ev();
extern void _ZN8S19519C42v2Ev();
static  VTBL_ENTRY vtc_S19519C2[] = {
  ABISELECT(3664,2216),
  ABISELECT(3224,1952),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C2[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19519C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19519C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19519C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19519C23v10Ev,
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S19519C2[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v7Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-3224,-1952),
  (VTBL_ENTRY)&(_ZTI8S19519C2[0]),
  (VTBL_ENTRY)&_ZN9S19519C102v8Ev,
  0,
  ABISELECT(-3664,-2216),
  (VTBL_ENTRY)&(_ZTI8S19519C2[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S19519C2[];
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
extern void _ZN8S19519C52v6Ev();
extern void _ZN8S19519C52v7Ev();
extern void _ZN8S19519C3D1Ev();
extern void _ZN8S19519C3D0Ev();
extern void _ZN8S19519C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C3__8S19519C2[] = {
  ABISELECT(3664,2216),
  ABISELECT(3224,1952),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C3[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19519C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19519C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19519C32v9Ev,
};
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
extern void _ZN8S19519C52v6Ev();
extern void _ZN8S19519C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C58S19519C3__8S19519C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C5[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v7Ev,
};
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C68S19519C58S19519C3__8S19519C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C6[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
};
extern void _ZN9S19519C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19519C10__8S19519C3__8S19519C2[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-3224,-1952),
  (VTBL_ENTRY)&(_ZTI8S19519C3[0]),
  (VTBL_ENTRY)&_ZN9S19519C102v8Ev,
};
extern void _ZN8S19519C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C48S19519C9__A1__8S19519C3__8S19519C2[] = {
  0,
  ABISELECT(-3664,-2216),
  (VTBL_ENTRY)&(_ZTI8S19519C3[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
};
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
extern void _ZN8S19519C52v6Ev();
extern void _ZN8S19519C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C5__A1__8S19519C2[] = {
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C5[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v7Ev,
};
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C68S19519C5__A1__8S19519C2[] = {
  ABISELECT(-976,-596),
  ABISELECT(-976,-596),
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C6[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
};
extern void _ZN8S19519C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C4__8S19519C68S19519C5__A1__8S19519C2[] = {
  0,
  ABISELECT(976,596),
  (VTBL_ENTRY)&(_ZTI8S19519C6[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
};
extern void _ZN8S19519C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C4__8S19519C5__A1__8S19519C2[] = {
  0,
  ABISELECT(976,596),
  (VTBL_ENTRY)&(_ZTI8S19519C5[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
};
extern void _ZN9S19519C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19519C10__8S19519C2[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19519C10[0]),
  (VTBL_ENTRY)&_ZN9S19519C102v8Ev,
};
extern void _ZN8S19519C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C48S19519C9__9S19519C10__8S19519C2[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19519C10[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
};
static  VTT_ENTRY vtt_S19519C2[] = {
  {&(_ZTV8S19519C2[6]),  6,35},
  {&(_tg__ZTV8S19519C3__8S19519C2[6]),  6,15},
  {&(_tg__ZTV8S19519C58S19519C3__8S19519C2[4]),  4,10},
  {&(_tg__ZTV8S19519C68S19519C58S19519C3__8S19519C2[4]),  4,8},
  {&(_tg__ZTV8S19519C68S19519C58S19519C3__8S19519C2[4]),  4,8},
  {&(_tg__ZTV8S19519C58S19519C3__8S19519C2[4]),  4,10},
  {&(_tg__ZTV8S19519C3__8S19519C2[6]),  6,15},
  {&(_tg__ZTV9S19519C10__8S19519C3__8S19519C2[4]),  4,5},
  {&(_tg__ZTV8S19519C48S19519C9__A1__8S19519C3__8S19519C2[3]),  3,4},
  {&(_tg__ZTV8S19519C5__A1__8S19519C2[4]),  4,10},
  {&(_tg__ZTV8S19519C68S19519C5__A1__8S19519C2[4]),  4,8},
  {&(_tg__ZTV8S19519C4__8S19519C68S19519C5__A1__8S19519C2[3]),  3,4},
  {&(_tg__ZTV8S19519C4__8S19519C5__A1__8S19519C2[3]),  3,4},
  {&(_ZTV8S19519C2[6]),  6,35},
  {&(_ZTV8S19519C2[30]),  30,35},
  {&(_ZTV8S19519C2[34]),  34,35},
  {&(_ZTV8S19519C2[20]),  20,35},
  {&(_tg__ZTV9S19519C10__8S19519C2[3]),  3,4},
  {&(_tg__ZTV8S19519C48S19519C9__9S19519C10__8S19519C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19519C2[];
extern  VTBL_ENTRY _ZTV8S19519C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19519C2[];
Class_Descriptor cd_S19519C2 = {  "S19519C2", // class name
  bases_S19519C2, 9,
  &(vtc_S19519C2[0]), // expected_vtbl_contents
  &(vtt_S19519C2[0]), // expected_vtt_contents
  ABISELECT(3968,2400), // object size
  NSPAIRA(_ZTI8S19519C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19519C2),35, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19519C2),19, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19519C12  {
  int s19519c12f0;
  virtual  ~S19519C12(); // _ZN9S19519C12D1Ev
  virtual void  v11(); // _ZN9S19519C123v11Ev
  S19519C12(); // tgen
};
//SIG(-1 S19519C12) C1{ vd v1 Fi}


 S19519C12 ::~S19519C12(){ note_dtor("S19519C12", this);}
void  S19519C12 ::v11(){vfunc_called(this, "_ZN9S19519C123v11Ev");}
S19519C12 ::S19519C12(){ note_ctor("S19519C12", this);} // tgen

static void Test_S19519C12()
{
  extern Class_Descriptor cd_S19519C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19519C12, buf);
    S19519C12 *dp, &lv = *(dp=new (buf) S19519C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19519C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19519C12)");
    check_field_offset(lv, s19519c12f0, ABISELECT(8,4), "S19519C12.s19519c12f0");
    test_class_info(&lv, &cd_S19519C12);
    dp->~S19519C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19519C12(Test_S19519C12, "S19519C12", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19519C12C1Ev();
extern void _ZN9S19519C12D1Ev();
Name_Map name_map_S19519C12[] = {
  NSPAIR(_ZN9S19519C12C1Ev),
  NSPAIR(_ZN9S19519C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19519C12[];
extern void _ZN9S19519C12D1Ev();
extern void _ZN9S19519C12D0Ev();
extern void _ZN9S19519C123v11Ev();
static  VTBL_ENTRY vtc_S19519C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19519C12[0]),
  (VTBL_ENTRY)&_ZN9S19519C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19519C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19519C123v11Ev,
};
extern VTBL_ENTRY _ZTI9S19519C12[];
extern  VTBL_ENTRY _ZTV9S19519C12[];
Class_Descriptor cd_S19519C12 = {  "S19519C12", // class name
  0,0,//no base classes
  &(vtc_S19519C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19519C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19519C12),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19519C1  : virtual S19519C2 , virtual S19519C12 {
  int s19519c1f0[12];
  void *s19519c1f1;
  int s19519c1f2;
  short s19519c1f3;
  long double s19519c1f4;
  __tsi64 s19519c1f5;
  long s19519c1f6;
  void *s19519c1f7;
  int s19519c1f8;
  virtual void  v1(); // _ZN8S19519C12v1Ev
  ~S19519C1(); // tgen
  S19519C1(); // tgen
};
//SIG(1 S19519C1) C1{ VBC2{ BC3{ VBC4{ v2} BC5{ BC6{ VBC4 v3 v4 v5 Fp[3] FC7{} Fp} v6 v7 Fp FC8{ BC9{ BC10{ v12} Fc[5] FC11{ VBC10 v13 v14 v15 Fp[3] FC7 Fp}[2] Fi Fp[7] FC11 FC10 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC10 VBC11 Fi Fp} Fi Fp Fi[2]} VBC12{ VBC13{ BC4 Fc[5] FC6[2] Fi Fp[7] FC6 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v8 Fp FL Fp[6] FC4 FC14{ BC15{ v17} v16 Fc FL Fi[3] FC16{ BC15 Fc[5] FC17{ VBC15 v18 v19 v20 Fp[3] FC7 Fp}[2] Fi Fp[7] FC17 FC15 Fc Fi Fs[5] Fi[8] FL Fc:8}} Fp Fi} vd v9 Fp[2] Fi[9] FC14 FC4[9] FL FD Fp FL Fl FL} BC5 vd v10 FL Fi FC7 FD[2] Fs[3] FC3 Fi:2} VBC18{ vd v11 Fi} v1 Fi[12] Fp Fi Fs FD FL Fl Fp Fi}


void  S19519C1 ::v1(){vfunc_called(this, "_ZN8S19519C12v1Ev");}
S19519C1 ::~S19519C1(){ note_dtor("S19519C1", this);} // tgen
S19519C1 ::S19519C1(){ note_ctor("S19519C1", this);} // tgen

static void Test_S19519C1()
{
  extern Class_Descriptor cd_S19519C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(258,627)];
    init_test(&cd_S19519C1, buf);
    S19519C1 *dp, &lv = *(dp=new (buf) S19519C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4112,2504), "sizeof(S19519C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19519C1)");
    /*is_ambiguous_... S19519C3::S19519C4 */ AMB_check_base_class_offset(lv, (S19519C4*)(S19519C3*)(S19519C2*), 0, "S19519C1");
    check_base_class_offset(lv, (S19519C4*)(S19519C6*)(S19519C5*)(S19519C3*)(S19519C2*), 0, "S19519C1");
    /*is_ambiguous_... S19519C2::S19519C5 */ AMB_check_base_class_offset(lv, (S19519C4*)(S19519C6*)(S19519C5*)(S19519C2*), 0, "S19519C1");
    check_base_class_offset(lv, (S19519C6*)(S19519C5*)(S19519C3*)(S19519C2*), ABISELECT(128,96), "S19519C1");
    check_base_class_offset(lv, (S19519C5*)(S19519C3*)(S19519C2*), ABISELECT(128,96), "S19519C1");
    check_base_class_offset(lv, (S19519C4*)(S19519C9*), ABISELECT(3792,2312), "S19519C1");
    check_base_class_offset(lv, (S19519C9*)(S19519C10*), ABISELECT(3792,2312), "S19519C1");
    check_base_class_offset(lv, (S19519C10*)(S19519C3*)(S19519C2*), ABISELECT(3352,2048), "S19519C1");
    check_base_class_offset(lv, (S19519C3*)(S19519C2*), ABISELECT(128,96), "S19519C1");
    /*is_ambiguous_... S19519C2::S19519C5 */ AMB_check_base_class_offset(lv, (S19519C6*)(S19519C5*)(S19519C2*), ABISELECT(1104,692), "S19519C1");
    /*is_ambiguous_... S19519C2::S19519C5 */ AMB_check_base_class_offset(lv, (S19519C5*)(S19519C2*), ABISELECT(1104,692), "S19519C1");
    check_base_class_offset(lv, (S19519C2*), ABISELECT(128,96), "S19519C1");
    check_base_class_offset(lv, (S19519C12*), ABISELECT(4096,2496), "S19519C1");
    check_field_offset(lv, s19519c1f0, ABISELECT(8,4), "S19519C1.s19519c1f0");
    check_field_offset(lv, s19519c1f1, ABISELECT(56,52), "S19519C1.s19519c1f1");
    check_field_offset(lv, s19519c1f2, ABISELECT(64,56), "S19519C1.s19519c1f2");
    check_field_offset(lv, s19519c1f3, ABISELECT(68,60), "S19519C1.s19519c1f3");
    check_field_offset(lv, s19519c1f4, ABISELECT(80,64), "S19519C1.s19519c1f4");
    check_field_offset(lv, s19519c1f5, ABISELECT(96,76), "S19519C1.s19519c1f5");
    check_field_offset(lv, s19519c1f6, ABISELECT(104,84), "S19519C1.s19519c1f6");
    check_field_offset(lv, s19519c1f7, ABISELECT(112,88), "S19519C1.s19519c1f7");
    check_field_offset(lv, s19519c1f8, ABISELECT(120,92), "S19519C1.s19519c1f8");
    test_class_info(&lv, &cd_S19519C1);
    dp->~S19519C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19519C1(Test_S19519C1, "S19519C1", ABISELECT(4112,2504));

#else // __cplusplus

extern void _ZN8S19519C1C1Ev();
extern void _ZN8S19519C1D1Ev();
Name_Map name_map_S19519C1[] = {
  NSPAIR(_ZN8S19519C1C1Ev),
  NSPAIR(_ZN8S19519C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19519C4;
extern VTBL_ENTRY _ZTI8S19519C4[];
extern  VTBL_ENTRY _ZTV8S19519C4[];
extern Class_Descriptor cd_S19519C6;
extern VTBL_ENTRY _ZTI8S19519C6[];
extern  VTBL_ENTRY _ZTV8S19519C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19519C6[];
extern Class_Descriptor cd_S19519C5;
extern VTBL_ENTRY _ZTI8S19519C5[];
extern  VTBL_ENTRY _ZTV8S19519C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19519C5[];
extern Class_Descriptor cd_S19519C4;
extern VTBL_ENTRY _ZTI8S19519C4[];
extern  VTBL_ENTRY _ZTV8S19519C4[];
extern Class_Descriptor cd_S19519C9;
extern VTBL_ENTRY _ZTI8S19519C9[];
extern  VTBL_ENTRY _ZTV8S19519C9[];
extern Class_Descriptor cd_S19519C10;
extern VTBL_ENTRY _ZTI9S19519C10[];
extern  VTBL_ENTRY _ZTV9S19519C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19519C10[];
extern Class_Descriptor cd_S19519C3;
extern VTBL_ENTRY _ZTI8S19519C3[];
extern  VTBL_ENTRY _ZTV8S19519C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19519C3[];
extern Class_Descriptor cd_S19519C6;
extern VTBL_ENTRY _ZTI8S19519C6[];
extern  VTBL_ENTRY _ZTV8S19519C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19519C6[];
extern Class_Descriptor cd_S19519C5;
extern VTBL_ENTRY _ZTI8S19519C5[];
extern  VTBL_ENTRY _ZTV8S19519C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19519C5[];
extern Class_Descriptor cd_S19519C2;
extern VTBL_ENTRY _ZTI8S19519C2[];
extern  VTBL_ENTRY _ZTV8S19519C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19519C2[];
extern Class_Descriptor cd_S19519C12;
extern VTBL_ENTRY _ZTI9S19519C12[];
extern  VTBL_ENTRY _ZTV9S19519C12[];
static Base_Class bases_S19519C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19519C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19519C6,    ABISELECT(128,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19519C5,    ABISELECT(128,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19519C4,    ABISELECT(3792,2312), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19519C9,    ABISELECT(3792,2312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19519C10,    ABISELECT(3352,2048), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19519C3,    ABISELECT(128,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19519C6,    ABISELECT(1104,692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19519C5,    ABISELECT(1104,692), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19519C2,    ABISELECT(128,96), //bcp->offset
    12, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19519C12,    ABISELECT(4096,2496), //bcp->offset
    55, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19519C1[];
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C12v1Ev();
extern void _ZN8S19519C1D1Ev();
extern void _ZN8S19519C1D0Ev();
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
extern void _ZN8S19519C52v6Ev();
extern void _ZN8S19519C52v7Ev();
extern void ABISELECT(_ZTv0_n96_N8S19519C1D1Ev,_ZTv0_n48_N8S19519C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S19519C1D1Ev,_ZThn96_N8S19519C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19519C1D0Ev,_ZTv0_n48_N8S19519C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S19519C1D0Ev,_ZThn96_N8S19519C1D0Ev)() __attribute__((weak));
extern void _ZN8S19519C32v9Ev();
extern void _ZN8S19519C23v10Ev();
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
extern void _ZN8S19519C52v6Ev();
extern void _ZN8S19519C52v7Ev();
extern void _ZN9S19519C102v8Ev();
extern void _ZN8S19519C42v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S19519C1D1Ev,_ZTv0_n12_N8S19519C1D1Ev)();
extern void ABISELECT(_ZThn4096_N8S19519C1D1Ev,_ZThn2496_N8S19519C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19519C1D0Ev,_ZTv0_n12_N8S19519C1D0Ev)();
extern void ABISELECT(_ZThn4096_N8S19519C1D0Ev,_ZThn2496_N8S19519C1D0Ev)() __attribute__((weak));
extern void _ZN9S19519C123v11Ev();
static  VTBL_ENTRY vtc_S19519C1[] = {
  ABISELECT(4096,2496),
  ABISELECT(3792,2312),
  ABISELECT(3352,2048),
  0,
  ABISELECT(128,96),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C1[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19519C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19519C1D0Ev,
  0,
  0,
  ABISELECT(-128,-96),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(3664,2216),
  ABISELECT(3224,1952),
  ABISELECT(-128,-96),
  ABISELECT(-128,-96),
  ABISELECT(-128,-96),
  (VTBL_ENTRY)&(_ZTI8S19519C1[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19519C1D1Ev,_ZTv0_n48_N8S19519C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19519C1D0Ev,_ZTv0_n48_N8S19519C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19519C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19519C23v10Ev,
  ABISELECT(-1104,-692),
  ABISELECT(-1104,-692),
  ABISELECT(-1104,-692),
  (VTBL_ENTRY)&(_ZTI8S19519C1[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v7Ev,
  0,
  ABISELECT(440,264),
  ABISELECT(-3352,-2048),
  (VTBL_ENTRY)&(_ZTI8S19519C1[0]),
  (VTBL_ENTRY)&_ZN9S19519C102v8Ev,
  0,
  ABISELECT(-3792,-2312),
  (VTBL_ENTRY)&(_ZTI8S19519C1[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  0,
  ABISELECT(-4096,-2496),
  ABISELECT(-4096,-2496),
  (VTBL_ENTRY)&(_ZTI8S19519C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19519C1D1Ev,_ZTv0_n12_N8S19519C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19519C1D0Ev,_ZTv0_n12_N8S19519C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19519C123v11Ev,
};
extern VTBL_ENTRY _ZTV8S19519C1[];
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
extern void _ZN8S19519C52v6Ev();
extern void _ZN8S19519C52v7Ev();
extern void _ZN8S19519C2D1Ev();
extern void _ZN8S19519C2D0Ev();
extern void _ZN8S19519C32v9Ev();
extern void _ZN8S19519C23v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C2__8S19519C1[] = {
  ABISELECT(3664,2216),
  ABISELECT(3224,1952),
  ABISELECT(-128,-96),
  ABISELECT(-128,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C2[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19519C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19519C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19519C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19519C23v10Ev,
};
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
extern void _ZN8S19519C52v6Ev();
extern void _ZN8S19519C52v7Ev();
extern void _ZN8S19519C3D1Ev();
extern void _ZN8S19519C3D0Ev();
extern void _ZN8S19519C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C38S19519C2__8S19519C1[] = {
  ABISELECT(3664,2216),
  ABISELECT(3224,1952),
  ABISELECT(-128,-96),
  ABISELECT(-128,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C3[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19519C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19519C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19519C32v9Ev,
};
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
extern void _ZN8S19519C52v6Ev();
extern void _ZN8S19519C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C58S19519C38S19519C2__8S19519C1[] = {
  ABISELECT(-128,-96),
  ABISELECT(-128,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C5[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v7Ev,
};
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C68S19519C58S19519C38S19519C2__8S19519C1[] = {
  ABISELECT(-128,-96),
  ABISELECT(-128,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C6[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
};
extern void _ZN8S19519C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C4__8S19519C68S19519C58S19519C38S19519C2__8S19519C1[] = {
  0,
  ABISELECT(128,96),
  (VTBL_ENTRY)&(_ZTI8S19519C6[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
};
extern void _ZN8S19519C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C4__8S19519C58S19519C38S19519C2__8S19519C1[] = {
  0,
  ABISELECT(128,96),
  (VTBL_ENTRY)&(_ZTI8S19519C5[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
};
extern void _ZN8S19519C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C4__8S19519C38S19519C2__8S19519C1[] = {
  0,
  ABISELECT(128,96),
  (VTBL_ENTRY)&(_ZTI8S19519C3[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
};
extern void _ZN9S19519C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19519C10__8S19519C38S19519C2__8S19519C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-3224,-1952),
  (VTBL_ENTRY)&(_ZTI8S19519C3[0]),
  (VTBL_ENTRY)&_ZN9S19519C102v8Ev,
};
extern void _ZN8S19519C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C48S19519C9__A1__8S19519C38S19519C2__8S19519C1[] = {
  0,
  ABISELECT(-3664,-2216),
  (VTBL_ENTRY)&(_ZTI8S19519C3[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
};
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
extern void _ZN8S19519C52v6Ev();
extern void _ZN8S19519C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C58S19519C2__A1__8S19519C1[] = {
  ABISELECT(-1104,-692),
  ABISELECT(-1104,-692),
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C5[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v7Ev,
};
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C68S19519C58S19519C2__A1__8S19519C1[] = {
  ABISELECT(-1104,-692),
  ABISELECT(-1104,-692),
  0,
  (VTBL_ENTRY)&(_ZTI8S19519C6[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
};
extern void _ZN8S19519C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C4__8S19519C68S19519C58S19519C2__A1__8S19519C1[] = {
  0,
  ABISELECT(1104,692),
  (VTBL_ENTRY)&(_ZTI8S19519C6[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
};
extern void _ZN8S19519C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C4__8S19519C58S19519C2__A1__8S19519C1[] = {
  0,
  ABISELECT(1104,692),
  (VTBL_ENTRY)&(_ZTI8S19519C5[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
};
extern void _ZN8S19519C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C4__8S19519C2__8S19519C1[] = {
  0,
  ABISELECT(128,96),
  (VTBL_ENTRY)&(_ZTI8S19519C2[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
};
extern void _ZN9S19519C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19519C10__8S19519C2__8S19519C1[] = {
  0,
  ABISELECT(440,264),
  ABISELECT(-3224,-1952),
  (VTBL_ENTRY)&(_ZTI8S19519C2[0]),
  (VTBL_ENTRY)&_ZN9S19519C102v8Ev,
};
extern void _ZN8S19519C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C48S19519C9__A1__8S19519C2__8S19519C1[] = {
  0,
  ABISELECT(-3664,-2216),
  (VTBL_ENTRY)&(_ZTI8S19519C2[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
};
extern void _ZN8S19519C42v2Ev();
extern void _ZN8S19519C62v3Ev();
extern void _ZN8S19519C62v4Ev();
extern void _ZN8S19519C62v5Ev();
extern void _ZN8S19519C52v6Ev();
extern void _ZN8S19519C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C5__A1__8S19519C2__8S19519C1[] = {
  ABISELECT(-1104,-692),
  ABISELECT(-1104,-692),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S19519C2[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19519C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19519C52v7Ev,
};
extern void _ZN9S19519C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19519C10__8S19519C1[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19519C10[0]),
  (VTBL_ENTRY)&_ZN9S19519C102v8Ev,
};
extern void _ZN8S19519C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19519C48S19519C9__9S19519C10__8S19519C1[] = {
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S19519C10[0]),
  (VTBL_ENTRY)&_ZN8S19519C42v2Ev,
};
static  VTT_ENTRY vtt_S19519C1[] = {
  {&(_ZTV8S19519C1[8]),  8,62},
  {&(_ZTV8S19519C1[26]),  26,62},
  {&(_ZTV8S19519C1[8]),  8,62},
  {&(_ZTV8S19519C1[50]),  50,62},
  {&(_ZTV8S19519C1[54]),  54,62},
  {&(_ZTV8S19519C1[40]),  40,62},
  {&(_ZTV8S19519C1[59]),  59,62},
  {&(_tg__ZTV8S19519C2__8S19519C1[6]),  6,16},
  {&(_tg__ZTV8S19519C38S19519C2__8S19519C1[6]),  6,15},
  {&(_tg__ZTV8S19519C58S19519C38S19519C2__8S19519C1[4]),  4,10},
  {&(_tg__ZTV8S19519C68S19519C58S19519C38S19519C2__8S19519C1[4]),  4,8},
  {&(_tg__ZTV8S19519C4__8S19519C68S19519C58S19519C38S19519C2__8S19519C1[3]),  3,4},
  {&(_tg__ZTV8S19519C4__8S19519C58S19519C38S19519C2__8S19519C1[3]),  3,4},
  {&(_tg__ZTV8S19519C4__8S19519C38S19519C2__8S19519C1[3]),  3,4},
  {&(_tg__ZTV9S19519C10__8S19519C38S19519C2__8S19519C1[4]),  4,5},
  {&(_tg__ZTV8S19519C48S19519C9__A1__8S19519C38S19519C2__8S19519C1[3]),  3,4},
  {&(_tg__ZTV8S19519C58S19519C2__A1__8S19519C1[4]),  4,10},
  {&(_tg__ZTV8S19519C68S19519C58S19519C2__A1__8S19519C1[4]),  4,8},
  {&(_tg__ZTV8S19519C4__8S19519C68S19519C58S19519C2__A1__8S19519C1[3]),  3,4},
  {&(_tg__ZTV8S19519C4__8S19519C58S19519C2__A1__8S19519C1[3]),  3,4},
  {&(_tg__ZTV8S19519C4__8S19519C2__8S19519C1[3]),  3,4},
  {&(_tg__ZTV9S19519C10__8S19519C2__8S19519C1[4]),  4,5},
  {&(_tg__ZTV8S19519C48S19519C9__A1__8S19519C2__8S19519C1[3]),  3,4},
  {&(_tg__ZTV8S19519C5__A1__8S19519C2__8S19519C1[4]),  4,10},
  {&(_tg__ZTV9S19519C10__8S19519C1[3]),  3,4},
  {&(_tg__ZTV8S19519C48S19519C9__9S19519C10__8S19519C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19519C1[];
extern  VTBL_ENTRY _ZTV8S19519C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19519C1[];
static VTBL_ENTRY alt_thunk_names78[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19519C1D0Ev,_ZTv0_n12_N8S19519C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4096_N8S19519C1D0Ev,_ZThn2496_N8S19519C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19519C1D1Ev,_ZTv0_n12_N8S19519C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4096_N8S19519C1D1Ev,_ZThn2496_N8S19519C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19519C1D0Ev,_ZTv0_n48_N8S19519C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19519C1D0Ev,_ZThn96_N8S19519C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19519C1D1Ev,_ZTv0_n48_N8S19519C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19519C1D1Ev,_ZThn96_N8S19519C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19519C1 = {  "S19519C1", // class name
  bases_S19519C1, 11,
  &(vtc_S19519C1[0]), // expected_vtbl_contents
  &(vtt_S19519C1[0]), // expected_vtt_contents
  ABISELECT(4112,2504), // object size
  NSPAIRA(_ZTI8S19519C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19519C1),62, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19519C1),26, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names78,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16113C2_nt  {
  int s16113c2f0;
  void  mf16113c2(); // _ZN11S16113C2_nt9mf16113c2Ev
};
//SIG(-1 S16113C2_nt) C1{ m Fi}


void  S16113C2_nt ::mf16113c2(){}

//skip512 S16113C2_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S16113C2_nt[];
VTBL_ENTRY *P__ZTI11S16113C2_nt = _ZTI11S16113C2_nt; 
Class_Descriptor cd_S16113C2_nt = {  "S16113C2_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI11S16113C2_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16113C5_nt  {
  void *s16113c5f0;
  int s16113c5f1;
  ::S2440C38 s16113c5f2;
  void  mf16113c5(); // _ZN11S16113C5_nt9mf16113c5Ev
};
//SIG(-1 S16113C5_nt) C1{ m Fp Fi FC2{ m}}


void  S16113C5_nt ::mf16113c5(){}

//skip512 S16113C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16113C8_nt  {
  __tsi64 s16113c8f0;
  void *s16113c8f1;
  int s16113c8f2;
  virtual  ~S16113C8_nt(); // _ZN11S16113C8_ntD1Ev
  virtual void  v3(); // _ZN11S16113C8_nt2v3Ev
  virtual void  v4(); // _ZN11S16113C8_nt2v4Ev
  virtual void  v5(); // _ZN11S16113C8_nt2v5Ev
  S16113C8_nt(); // tgen
};
//SIG(-1 S16113C8_nt) C1{ vd v1 v2 v3 FL Fp Fi}


 S16113C8_nt ::~S16113C8_nt(){ note_dtor("S16113C8_nt", this);}
void  S16113C8_nt ::v3(){vfunc_called(this, "_ZN11S16113C8_nt2v3Ev");}
void  S16113C8_nt ::v4(){vfunc_called(this, "_ZN11S16113C8_nt2v4Ev");}
void  S16113C8_nt ::v5(){vfunc_called(this, "_ZN11S16113C8_nt2v5Ev");}
S16113C8_nt ::S16113C8_nt(){ note_ctor("S16113C8_nt", this);} // tgen

//skip512 S16113C8_nt

#else // __cplusplus

extern void _ZN11S16113C8_ntC1Ev();
extern void _ZN11S16113C8_ntD1Ev();
Name_Map name_map_S16113C8_nt[] = {
  NSPAIR(_ZN11S16113C8_ntC1Ev),
  NSPAIR(_ZN11S16113C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S16113C8_nt[];
extern void _ZN11S16113C8_ntD1Ev();
extern void _ZN11S16113C8_ntD0Ev();
extern void _ZN11S16113C8_nt2v3Ev();
extern void _ZN11S16113C8_nt2v4Ev();
extern void _ZN11S16113C8_nt2v5Ev();
static  VTBL_ENTRY vtc_S16113C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S16113C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S16113C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S16113C8_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S16113C8_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S16113C8_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S16113C8_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI11S16113C8_nt[];
VTBL_ENTRY *P__ZTI11S16113C8_nt = _ZTI11S16113C8_nt; 
extern  VTBL_ENTRY _ZTV11S16113C8_nt[];
Class_Descriptor cd_S16113C8_nt = {  "S16113C8_nt", // class name
  0,0,//no base classes
  &(vtc_S16113C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI11S16113C8_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S16113C8_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16113C7_nt  : S16113C8_nt {
  int s16113c7f0;
  char s16113c7f1;
  virtual  ~S16113C7_nt(); // _ZN11S16113C7_ntD1Ev
  virtual void  v1(); // _ZN11S16113C7_nt2v1Ev
  virtual void  v2(); // _ZN11S16113C7_nt2v2Ev
  S16113C7_nt(); // tgen
};
//SIG(-1 S16113C7_nt) C1{ BC2{ vd v3 v4 v5 FL Fp Fi} vd v1 v2 Fi Fc}


 S16113C7_nt ::~S16113C7_nt(){ note_dtor("S16113C7_nt", this);}
void  S16113C7_nt ::v1(){vfunc_called(this, "_ZN11S16113C7_nt2v1Ev");}
void  S16113C7_nt ::v2(){vfunc_called(this, "_ZN11S16113C7_nt2v2Ev");}
S16113C7_nt ::S16113C7_nt(){ note_ctor("S16113C7_nt", this);} // tgen

//skip512 S16113C7_nt

#else // __cplusplus

extern void _ZN11S16113C7_ntC1Ev();
extern void _ZN11S16113C7_ntD1Ev();
Name_Map name_map_S16113C7_nt[] = {
  NSPAIR(_ZN11S16113C7_ntC1Ev),
  NSPAIR(_ZN11S16113C7_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16113C8_nt;
extern VTBL_ENTRY _ZTI11S16113C8_nt[];
extern  VTBL_ENTRY _ZTV11S16113C8_nt[];
static Base_Class bases_S16113C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S16113C7_nt[];
extern void _ZN11S16113C7_ntD1Ev();
extern void _ZN11S16113C7_ntD0Ev();
extern void _ZN11S16113C8_nt2v3Ev();
extern void _ZN11S16113C8_nt2v4Ev();
extern void _ZN11S16113C8_nt2v5Ev();
extern void _ZN11S16113C7_nt2v1Ev();
extern void _ZN11S16113C7_nt2v2Ev();
static  VTBL_ENTRY vtc_S16113C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S16113C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S16113C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S16113C7_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S16113C8_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S16113C8_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S16113C8_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S16113C7_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S16113C7_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI11S16113C7_nt[];
VTBL_ENTRY *P__ZTI11S16113C7_nt = _ZTI11S16113C7_nt; 
extern  VTBL_ENTRY _ZTV11S16113C7_nt[];
Class_Descriptor cd_S16113C7_nt = {  "S16113C7_nt", // class name
  bases_S16113C7_nt, 1,
  &(vtc_S16113C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI11S16113C7_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV11S16113C7_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16113C10  {
  char s16113c10f0[163];
  int s16113c10f1;
  __tsi64 s16113c10f2;
};
//SIG(1 S16113C10) C1{ Fc[163] Fi FL}



static void Test_S16113C10()
{
  {
    init_simple_test("S16113C10");
    S16113C10 lv;
    check2(sizeof(lv), 176, "sizeof(S16113C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16113C10)");
    check_field_offset(lv, s16113c10f0, 0, "S16113C10.s16113c10f0");
    check_field_offset(lv, s16113c10f1, 164, "S16113C10.s16113c10f1");
    check_field_offset(lv, s16113c10f2, 168, "S16113C10.s16113c10f2");
  }
}
static Arrange_To_Call_Me vS16113C10(Test_S16113C10, "S16113C10", 176);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16113C9  {
  int s16113c9f0;
  ::S16113C10 s16113c9f1[5];
  void  mf16113c9(); // _ZN8S16113C99mf16113c9Ev
};
//SIG(-1 S16113C9) C1{ m Fi FC2{ Fc[163] Fi FL}[5]}


void  S16113C9 ::mf16113c9(){}

static void Test_S16113C9()
{
  {
    init_simple_test("S16113C9");
    S16113C9 lv;
    check2(sizeof(lv), ABISELECT(888,884), "sizeof(S16113C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16113C9)");
    check_field_offset(lv, s16113c9f0, 0, "S16113C9.s16113c9f0");
    check_field_offset(lv, s16113c9f1, ABISELECT(8,4), "S16113C9.s16113c9f1");
  }
}
static Arrange_To_Call_Me vS16113C9(Test_S16113C9, "S16113C9", ABISELECT(888,884));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16113C11  {
  __tsi64 s16113c11f0;
  int s16113c11f1[8];
  __tsi64 s16113c11f2[5];
  int s16113c11f3[3];
};
//SIG(-1 S16113C11) C1{ FL Fi[8] FL[5] Fi[3]}



static void Test_S16113C11()
{
  {
    init_simple_test("S16113C11");
    S16113C11 lv;
    check2(sizeof(lv), ABISELECT(96,92), "sizeof(S16113C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16113C11)");
    check_field_offset(lv, s16113c11f0, 0, "S16113C11.s16113c11f0");
    check_field_offset(lv, s16113c11f1, 8, "S16113C11.s16113c11f1");
    check_field_offset(lv, s16113c11f2, 40, "S16113C11.s16113c11f2");
    check_field_offset(lv, s16113c11f3, 80, "S16113C11.s16113c11f3");
  }
}
static Arrange_To_Call_Me vS16113C11(Test_S16113C11, "S16113C11", ABISELECT(96,92));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16113C13_nt  {
  int s16113c13f0[3];
  void  mf16113c13(); // _ZN12S16113C13_nt10mf16113c13Ev
};
//SIG(-1 S16113C13_nt) C1{ m Fi[3]}


void  S16113C13_nt ::mf16113c13(){}

//skip512 S16113C13_nt

#else // __cplusplus

Class_Descriptor cd_S16113C13_nt = {  "S16113C13_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  12, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16113C15_nt  {
  int s16113c15f0;
  char s16113c15f1[331];
  int s16113c15f2[2];
  char s16113c15f3;
  int s16113c15f4;
  char s16113c15f5[812];
  int s16113c15f6[5];
  char s16113c15f7;
};
//SIG(-1 S16113C15_nt) C1{ Fi Fc[331] Fi[2] Fc Fi Fc[812] Fi[5] Fc}



//skip512 S16113C15_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16113C16_nt  {
  int s16113c16f0[2];
  char s16113c16f1[271];
  __tsi64 s16113c16f2;
  char s16113c16f3[193];
  int s16113c16f4;
  char s16113c16f5[65];
  int s16113c16f6[2];
  char s16113c16f7[96];
  __tsi64 s16113c16f8;
  char s16113c16f9[68];
};
//SIG(-1 S16113C16_nt) C1{ Fi[2] Fc[271] FL Fc[193] Fi Fc[65] Fi[2] Fc[96] FL Fc[68]}



//skip512 S16113C16_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16113C17_nt  : S16113C7_nt {
  void *s16113c17f0;
  virtual  ~S16113C17_nt(); // _ZN12S16113C17_ntD1Ev
  virtual void  v6(); // _ZN12S16113C17_nt2v6Ev
  S16113C17_nt(); // tgen
};
//SIG(-1 S16113C17_nt) C1{ BC2{ BC3{ vd v2 v3 v4 FL Fp Fi} vd v5 v6 Fi Fc} vd v1 Fp}


 S16113C17_nt ::~S16113C17_nt(){ note_dtor("S16113C17_nt", this);}
void  S16113C17_nt ::v6(){vfunc_called(this, "_ZN12S16113C17_nt2v6Ev");}
S16113C17_nt ::S16113C17_nt(){ note_ctor("S16113C17_nt", this);} // tgen

//skip512 S16113C17_nt

#else // __cplusplus

extern void _ZN12S16113C17_ntC1Ev();
extern void _ZN12S16113C17_ntD1Ev();
Name_Map name_map_S16113C17_nt[] = {
  NSPAIR(_ZN12S16113C17_ntC1Ev),
  NSPAIR(_ZN12S16113C17_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16113C8_nt;
extern VTBL_ENTRY _ZTI11S16113C8_nt[];
extern  VTBL_ENTRY _ZTV11S16113C8_nt[];
extern Class_Descriptor cd_S16113C7_nt;
extern VTBL_ENTRY _ZTI11S16113C7_nt[];
extern  VTBL_ENTRY _ZTV11S16113C7_nt[];
static Base_Class bases_S16113C17_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S16113C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI12S16113C17_nt[];
extern void _ZN12S16113C17_ntD1Ev();
extern void _ZN12S16113C17_ntD0Ev();
extern void _ZN11S16113C8_nt2v3Ev();
extern void _ZN11S16113C8_nt2v4Ev();
extern void _ZN11S16113C8_nt2v5Ev();
extern void _ZN11S16113C7_nt2v1Ev();
extern void _ZN11S16113C7_nt2v2Ev();
extern void _ZN12S16113C17_nt2v6Ev();
static  VTBL_ENTRY vtc_S16113C17_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S16113C17_nt[0]),
  (VTBL_ENTRY)&_ZN12S16113C17_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S16113C17_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S16113C8_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S16113C8_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S16113C8_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S16113C7_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S16113C7_nt2v2Ev,
  (VTBL_ENTRY)&_ZN12S16113C17_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI12S16113C17_nt[];
VTBL_ENTRY *P__ZTI12S16113C17_nt = _ZTI12S16113C17_nt; 
extern  VTBL_ENTRY _ZTV12S16113C17_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16113C14  {
  char s16113c14f0;
  __tsi64 s16113c14f1;
  ::S16113C15_nt s16113c14f2;
  ::S16113C16_nt s16113c14f3;
  ::S16113C7_nt s16113c14f4;
  ::S16113C17_nt s16113c14f5;
  void  mf16113c14(); // _ZN9S16113C1410mf16113c14Ev
};
//SIG(1 S16113C14) C1{ m Fc FL FC2{ Fi Fc[331] Fi[2] Fc Fi Fc[812] Fi[5] Fc} FC3{ Fi[2] Fc[271] FL Fc[193] Fi Fc[65] Fi[2] Fc[96] FL Fc[68]} FC4{ BC5{ vd v3 v4 v5 FL Fp Fi} vd v1 v2 Fi Fc} FC6{ BC4 vd v6 Fp}}


void  S16113C14 ::mf16113c14(){}

static void Test_S16113C14()
{
  {
    init_simple_test("S16113C14");
    S16113C14 lv;
    check2(sizeof(lv), ABISELECT(2040,1996), "sizeof(S16113C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16113C14)");
    check_field_offset(lv, s16113c14f0, 0, "S16113C14.s16113c14f0");
    check_field_offset(lv, s16113c14f1, ABISELECT(8,4), "S16113C14.s16113c14f1");
    check_field_offset(lv, s16113c14f2, ABISELECT(16,12), "S16113C14.s16113c14f2");
    check_field_offset(lv, s16113c14f3, ABISELECT(1208,1200), "S16113C14.s16113c14f3");
    check_field_offset(lv, s16113c14f4, ABISELECT(1952,1936), "S16113C14.s16113c14f4");
    check_field_offset(lv, s16113c14f5, ABISELECT(1992,1964), "S16113C14.s16113c14f5");
  }
}
static Arrange_To_Call_Me vS16113C14(Test_S16113C14, "S16113C14", ABISELECT(2040,1996));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16113C12  : S16113C13_nt {
  int s16113c12f0[101];
  ::S16113C14 s16113c12f1[100];
};
//SIG(-1 S16113C12) C1{ BC2{ m Fi[3]} Fi[101] FC3{ m Fc FL FC4{ Fi Fc[331] Fi[2] Fc Fi Fc[812] Fi[5] Fc} FC5{ Fi[2] Fc[271] FL Fc[193] Fi Fc[65] Fi[2] Fc[96] FL Fc[68]} FC6{ BC7{ vd v3 v4 v5 FL Fp Fi} vd v1 v2 Fi Fc} FC8{ BC6 vd v6 Fp}}[100]}



static void Test_S16113C12()
{
  extern Class_Descriptor cd_S16113C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25553,50005)];
    init_test(&cd_S16113C12, buf);
    S16113C12 &lv = *(new (buf) S16113C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(204416,200016), "sizeof(S16113C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16113C12)");
    check_base_class_offset(lv, (S16113C13_nt*), 0, "S16113C12");
    check_field_offset(lv, s16113c12f0, 12, "S16113C12.s16113c12f0");
    check_field_offset(lv, s16113c12f1, 416, "S16113C12.s16113c12f1");
    test_class_info(&lv, &cd_S16113C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16113C12(Test_S16113C12, "S16113C12", ABISELECT(204416,200016));

#else // __cplusplus

extern Class_Descriptor cd_S16113C13_nt;
static Base_Class bases_S16113C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C13_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S16113C12 = {  "S16113C12", // class name
  bases_S16113C12, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(204416,200016), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16113C1  {
  ::S16113C2_nt s16113c1f0[2];
  char s16113c1f1[2];
  ::S2440C20_nt s16113c1f2;
  ::S16113C5_nt s16113c1f3;
  ::S16113C5_nt s16113c1f4;
  ::S16113C7_nt s16113c1f5;
  ::S16113C9 s16113c1f6;
  ::S16113C11 s16113c1f7;
  ::S16113C12 s16113c1f8;
  void  mf16113c1(); // _ZN8S16113C19mf16113c1Ev
};
//SIG(1 S16113C1) C1{ m FC2{ m Fi}[2] Fc[2] FC3{ m Fp Fi FC4{ m}} FC5{ m Fp Fi FC6{ m}} FC5 FC7{ BC8{ vd v3 v4 v5 FL Fp Fi} vd v1 v2 Fi Fc} FC9{ m Fi FC10{ Fc[163] Fi FL}[5]} FC11{ FL Fi[8] FL[5] Fi[3]} FC12{ BC13{ m Fi[3]} Fi[101] FC14{ m Fc FL FC15{ Fi Fc[331] Fi[2] Fc Fi Fc[812] Fi[5] Fc} FC16{ Fi[2] Fc[271] FL Fc[193] Fi Fc[65] Fi[2] Fc[96] FL Fc[68]} FC7 FC17{ BC7 vd v6 Fp}}[100]}}


void  S16113C1 ::mf16113c1(){}

static void Test_S16113C1()
{
  {
    init_simple_test("S16113C1");
    S16113C1 lv;
    check2(sizeof(lv), ABISELECT(205504,201068), "sizeof(S16113C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16113C1)");
    check_field_offset(lv, s16113c1f0, 0, "S16113C1.s16113c1f0");
    check_field_offset(lv, s16113c1f1, 8, "S16113C1.s16113c1f1");
    check_field_offset(lv, s16113c1f2, ABISELECT(16,12), "S16113C1.s16113c1f2");
    check_field_offset(lv, s16113c1f3, ABISELECT(32,24), "S16113C1.s16113c1f3");
    check_field_offset(lv, s16113c1f4, ABISELECT(48,36), "S16113C1.s16113c1f4");
    check_field_offset(lv, s16113c1f5, ABISELECT(64,48), "S16113C1.s16113c1f5");
    check_field_offset(lv, s16113c1f6, ABISELECT(104,76), "S16113C1.s16113c1f6");
    check_field_offset(lv, s16113c1f7, ABISELECT(992,960), "S16113C1.s16113c1f7");
    check_field_offset(lv, s16113c1f8, ABISELECT(1088,1052), "S16113C1.s16113c1f8");
  }
}
static Arrange_To_Call_Me vS16113C1(Test_S16113C1, "S16113C1", ABISELECT(205504,201068));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7323C4  {
  virtual void  v4(); // _ZN7S7323C42v4Ev
  ~S7323C4(); // tgen
  S7323C4(); // tgen
};
//SIG(-1 S7323C4) C1{ v1}


void  S7323C4 ::v4(){vfunc_called(this, "_ZN7S7323C42v4Ev");}
S7323C4 ::~S7323C4(){ note_dtor("S7323C4", this);} // tgen
S7323C4 ::S7323C4(){ note_ctor("S7323C4", this);} // tgen

static void Test_S7323C4()
{
  extern Class_Descriptor cd_S7323C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7323C4, buf);
    S7323C4 *dp, &lv = *(dp=new (buf) S7323C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7323C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7323C4)");
    test_class_info(&lv, &cd_S7323C4);
    dp->~S7323C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7323C4(Test_S7323C4, "S7323C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7323C4C1Ev();
extern void _ZN7S7323C4D1Ev();
Name_Map name_map_S7323C4[] = {
  NSPAIR(_ZN7S7323C4C1Ev),
  NSPAIR(_ZN7S7323C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7323C4[];
extern void _ZN7S7323C42v4Ev();
static  VTBL_ENTRY vtc_S7323C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7323C4[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S7323C4[];
extern  VTBL_ENTRY _ZTV7S7323C4[];
Class_Descriptor cd_S7323C4 = {  "S7323C4", // class name
  0,0,//no base classes
  &(vtc_S7323C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7323C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7323C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7323C5  : virtual S7323C4 {
  void *s7323c5f0[3];
  ::S2489C12_nt s7323c5f1;
  void *s7323c5f2;
  virtual void  v6(); // _ZN7S7323C52v6Ev
  virtual void  v7(); // _ZN7S7323C52v7Ev
  virtual void  v8(); // _ZN7S7323C52v8Ev
  ~S7323C5(); // tgen
  S7323C5(); // tgen
};
//SIG(-1 S7323C5) C1{ VBC2{ v4} v1 v2 v3 Fp[3] FC3{} Fp}


void  S7323C5 ::v6(){vfunc_called(this, "_ZN7S7323C52v6Ev");}
void  S7323C5 ::v7(){vfunc_called(this, "_ZN7S7323C52v7Ev");}
void  S7323C5 ::v8(){vfunc_called(this, "_ZN7S7323C52v8Ev");}
S7323C5 ::~S7323C5(){ note_dtor("S7323C5", this);} // tgen
S7323C5 ::S7323C5(){ note_ctor("S7323C5", this);} // tgen

static void Test_S7323C5()
{
  extern Class_Descriptor cd_S7323C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7323C5, buf);
    S7323C5 *dp, &lv = *(dp=new (buf) S7323C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7323C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7323C5)");
    check_base_class_offset(lv, (S7323C4*), 0, "S7323C5");
    check_field_offset(lv, s7323c5f0, ABISELECT(8,4), "S7323C5.s7323c5f0");
    check_field_offset(lv, s7323c5f1, ABISELECT(32,16), "S7323C5.s7323c5f1");
    check_field_offset(lv, s7323c5f2, ABISELECT(40,20), "S7323C5.s7323c5f2");
    test_class_info(&lv, &cd_S7323C5);
    dp->~S7323C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7323C5(Test_S7323C5, "S7323C5", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7323C5C1Ev();
extern void _ZN7S7323C5D1Ev();
Name_Map name_map_S7323C5[] = {
  NSPAIR(_ZN7S7323C5C1Ev),
  NSPAIR(_ZN7S7323C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7323C4;
extern VTBL_ENTRY _ZTI7S7323C4[];
extern  VTBL_ENTRY _ZTV7S7323C4[];
static Base_Class bases_S7323C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7323C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7323C5[];
extern void _ZN7S7323C42v4Ev();
extern void _ZN7S7323C52v6Ev();
extern void _ZN7S7323C52v7Ev();
extern void _ZN7S7323C52v8Ev();
static  VTBL_ENTRY vtc_S7323C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7323C5[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v8Ev,
};
extern VTBL_ENTRY _ZTV7S7323C5[];
static  VTT_ENTRY vtt_S7323C5[] = {
  {&(_ZTV7S7323C5[4]),  4,8},
  {&(_ZTV7S7323C5[4]),  4,8},
};
extern VTBL_ENTRY _ZTI7S7323C5[];
extern  VTBL_ENTRY _ZTV7S7323C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7323C5[];
Class_Descriptor cd_S7323C5 = {  "S7323C5", // class name
  bases_S7323C5, 1,
  &(vtc_S7323C5[0]), // expected_vtbl_contents
  &(vtt_S7323C5[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7323C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7323C5),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7323C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7323C3  : S7323C4 {
  char s7323c3f0[5];
  ::S7323C5 s7323c3f1[2];
  int s7323c3f2;
  void *s7323c3f3[7];
  ::S7323C5 s7323c3f4;
  ::S7323C4 s7323c3f5;
  char s7323c3f6;
  int s7323c3f7;
  short s7323c3f8[5];
  int s7323c3f9[8];
  __tsi64 s7323c3f10;
  char s7323c3f11:8;
  ~S7323C3(); // tgen
  S7323C3(); // tgen
};
//SIG(-1 S7323C3) C1{ BC2{ v1} Fc[5] FC3{ VBC2 v2 v3 v4 Fp[3] FC4{} Fp}[2] Fi Fp[7] FC3 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}


S7323C3 ::~S7323C3(){ note_dtor("S7323C3", this);} // tgen
S7323C3 ::S7323C3(){ note_ctor("S7323C3", this);} // tgen

static void Test_S7323C3()
{
  extern Class_Descriptor cd_S7323C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,47)];
    init_test(&cd_S7323C3, buf);
    S7323C3 *dp, &lv = *(dp=new (buf) S7323C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,184), "sizeof(S7323C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7323C3)");
    check_base_class_offset(lv, (S7323C4*), 0, "S7323C3");
    check_field_offset(lv, s7323c3f0, ABISELECT(8,4), "S7323C3.s7323c3f0");
    check_field_offset(lv, s7323c3f1, ABISELECT(16,12), "S7323C3.s7323c3f1");
    check_field_offset(lv, s7323c3f2, ABISELECT(112,60), "S7323C3.s7323c3f2");
    check_field_offset(lv, s7323c3f3, ABISELECT(120,64), "S7323C3.s7323c3f3");
    check_field_offset(lv, s7323c3f4, ABISELECT(176,92), "S7323C3.s7323c3f4");
    check_field_offset(lv, s7323c3f5, ABISELECT(224,116), "S7323C3.s7323c3f5");
    check_field_offset(lv, s7323c3f6, ABISELECT(232,120), "S7323C3.s7323c3f6");
    check_field_offset(lv, s7323c3f7, ABISELECT(236,124), "S7323C3.s7323c3f7");
    check_field_offset(lv, s7323c3f8, ABISELECT(240,128), "S7323C3.s7323c3f8");
    check_field_offset(lv, s7323c3f9, ABISELECT(252,140), "S7323C3.s7323c3f9");
    check_field_offset(lv, s7323c3f10, ABISELECT(288,172), "S7323C3.s7323c3f10");
    set_bf_and_test(lv, s7323c3f11, ABISELECT(296,180), 0, 8, 1, "S7323C3");
    set_bf_and_test(lv, s7323c3f11, ABISELECT(296,180), 0, 8, hide_sll(1LL<<7), "S7323C3");
    test_class_info(&lv, &cd_S7323C3);
    dp->~S7323C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7323C3(Test_S7323C3, "S7323C3", ABISELECT(304,184));

#else // __cplusplus

extern void _ZN7S7323C3C1Ev();
extern void _ZN7S7323C3D1Ev();
Name_Map name_map_S7323C3[] = {
  NSPAIR(_ZN7S7323C3C1Ev),
  NSPAIR(_ZN7S7323C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7323C4;
extern VTBL_ENTRY _ZTI7S7323C4[];
extern  VTBL_ENTRY _ZTV7S7323C4[];
static Base_Class bases_S7323C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7323C4,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7323C3[];
extern void _ZN7S7323C42v4Ev();
static  VTBL_ENTRY vtc_S7323C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7323C3[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S7323C3[];
extern  VTBL_ENTRY _ZTV7S7323C3[];
Class_Descriptor cd_S7323C3 = {  "S7323C3", // class name
  bases_S7323C3, 1,
  &(vtc_S7323C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,184), // object size
  NSPAIRA(_ZTI7S7323C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7323C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7323C2  : virtual S7323C3 {
  void *s7323c2f0;
  __tsi64 s7323c2f1;
  void *s7323c2f2[6];
  ::S7323C4 s7323c2f3;
  ::S20113C12 s7323c2f4;
  void *s7323c2f5;
  int s7323c2f6;
  virtual void  v5(); // _ZN7S7323C22v5Ev
  ~S7323C2(); // tgen
  S7323C2(); // tgen
};
//SIG(-1 S7323C2) C1{ VBC2{ BC3{ v2} Fc[5] FC4{ VBC3 v8 v9 v10 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC4 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v1 Fp FL Fp[6] FC3 FC6{ BC7{ v4} v3 Fc FL Fi[3] FC8{ BC7 Fc[5] FC9{ VBC7 v5 v6 v7 Fp[3] FC5 Fp}[2] Fi Fp[7] FC9 FC7 Fc Fi Fs[5] Fi[8] FL Fc:8}} Fp Fi}


void  S7323C2 ::v5(){vfunc_called(this, "_ZN7S7323C22v5Ev");}
S7323C2 ::~S7323C2(){ note_dtor("S7323C2", this);} // tgen
S7323C2 ::S7323C2(){ note_ctor("S7323C2", this);} // tgen

static void Test_S7323C2()
{
  extern Class_Descriptor cd_S7323C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(94,113)];
    init_test(&cd_S7323C2, buf);
    S7323C2 *dp, &lv = *(dp=new (buf) S7323C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(744,448), "sizeof(S7323C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7323C2)");
    check_base_class_offset(lv, (S7323C4*)(S7323C3*), ABISELECT(440,264), "S7323C2");
    check_base_class_offset(lv, (S7323C3*), ABISELECT(440,264), "S7323C2");
    check_field_offset(lv, s7323c2f0, ABISELECT(8,4), "S7323C2.s7323c2f0");
    check_field_offset(lv, s7323c2f1, ABISELECT(16,8), "S7323C2.s7323c2f1");
    check_field_offset(lv, s7323c2f2, ABISELECT(24,16), "S7323C2.s7323c2f2");
    check_field_offset(lv, s7323c2f3, ABISELECT(72,40), "S7323C2.s7323c2f3");
    check_field_offset(lv, s7323c2f4, ABISELECT(80,44), "S7323C2.s7323c2f4");
    check_field_offset(lv, s7323c2f5, ABISELECT(424,256), "S7323C2.s7323c2f5");
    check_field_offset(lv, s7323c2f6, ABISELECT(432,260), "S7323C2.s7323c2f6");
    test_class_info(&lv, &cd_S7323C2);
    dp->~S7323C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7323C2(Test_S7323C2, "S7323C2", ABISELECT(744,448));

#else // __cplusplus

extern void _ZN7S7323C2C1Ev();
extern void _ZN7S7323C2D1Ev();
Name_Map name_map_S7323C2[] = {
  NSPAIR(_ZN7S7323C2C1Ev),
  NSPAIR(_ZN7S7323C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7323C4;
extern VTBL_ENTRY _ZTI7S7323C4[];
extern  VTBL_ENTRY _ZTV7S7323C4[];
extern Class_Descriptor cd_S7323C3;
extern VTBL_ENTRY _ZTI7S7323C3[];
extern  VTBL_ENTRY _ZTV7S7323C3[];
static Base_Class bases_S7323C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7323C4,    ABISELECT(440,264), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7323C3,    ABISELECT(440,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7323C2[];
extern void _ZN7S7323C22v5Ev();
extern void _ZN7S7323C42v4Ev();
static  VTBL_ENTRY vtc_S7323C2[] = {
  ABISELECT(440,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7323C2[0]),
  (VTBL_ENTRY)&_ZN7S7323C22v5Ev,
  0,
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7323C2[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S7323C2[];
static  VTT_ENTRY vtt_S7323C2[] = {
  {&(_ZTV7S7323C2[3]),  3,8},
  {&(_ZTV7S7323C2[7]),  7,8},
};
extern VTBL_ENTRY _ZTI7S7323C2[];
extern  VTBL_ENTRY _ZTV7S7323C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7323C2[];
Class_Descriptor cd_S7323C2 = {  "S7323C2", // class name
  bases_S7323C2, 2,
  &(vtc_S7323C2[0]), // expected_vtbl_contents
  &(vtt_S7323C2[0]), // expected_vtt_contents
  ABISELECT(744,448), // object size
  NSPAIRA(_ZTI7S7323C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7323C2),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7323C2),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7323C8  : virtual S7323C5 , S7323C2 {
  void *s7323c8f0;
  ::S7323C4 s7323c8f1;
  __tsi64 s7323c8f2[8];
  ::S7323C5 s7323c8f3;
  void *s7323c8f4;
  virtual void  v9(); // _ZN7S7323C82v9Ev
  ~S7323C8(); // tgen
  S7323C8(); // tgen
};
//SIG(-1 S7323C8) C1{ VBC2{ VBC3{ v2} v3 v4 v5 Fp[3] FC4{} Fp} BC5{ VBC6{ BC3 Fc[5] FC2[2] Fi Fp[7] FC2 FC3 Fc Fi Fs[5] Fi[8] FL Fc:8} v6 Fp FL Fp[6] FC3 FC7{ BC8{ v8} v7 Fc FL Fi[3] FC9{ BC8 Fc[5] FC10{ VBC8 v9 v10 v11 Fp[3] FC4 Fp}[2] Fi Fp[7] FC10 FC8 Fc Fi Fs[5] Fi[8] FL Fc:8}} Fp Fi} v1 Fp FC3 FL[8] FC2 Fp}


void  S7323C8 ::v9(){vfunc_called(this, "_ZN7S7323C82v9Ev");}
S7323C8 ::~S7323C8(){ note_dtor("S7323C8", this);} // tgen
S7323C8 ::S7323C8(){ note_ctor("S7323C8", this);} // tgen

static void Test_S7323C8()
{
  extern Class_Descriptor cd_S7323C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(117,144)];
    init_test(&cd_S7323C8, buf);
    S7323C8 *dp, &lv = *(dp=new (buf) S7323C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(928,572), "sizeof(S7323C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7323C8)");
    check_base_class_offset(lv, (S7323C4*)(S7323C5*), ABISELECT(576,364), "S7323C8");
    check_base_class_offset(lv, (S7323C5*), ABISELECT(576,364), "S7323C8");
    check_base_class_offset(lv, (S7323C4*)(S7323C3*), ABISELECT(624,388), "S7323C8");
    check_base_class_offset(lv, (S7323C3*)(S7323C2*), ABISELECT(624,388), "S7323C8");
    check_base_class_offset(lv, (S7323C2*), 0, "S7323C8");
    check_field_offset(lv, s7323c8f0, ABISELECT(440,264), "S7323C8.s7323c8f0");
    check_field_offset(lv, s7323c8f1, ABISELECT(448,268), "S7323C8.s7323c8f1");
    check_field_offset(lv, s7323c8f2, ABISELECT(456,272), "S7323C8.s7323c8f2");
    check_field_offset(lv, s7323c8f3, ABISELECT(520,336), "S7323C8.s7323c8f3");
    check_field_offset(lv, s7323c8f4, ABISELECT(568,360), "S7323C8.s7323c8f4");
    test_class_info(&lv, &cd_S7323C8);
    dp->~S7323C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7323C8(Test_S7323C8, "S7323C8", ABISELECT(928,572));

#else // __cplusplus

extern void _ZN7S7323C8C1Ev();
extern void _ZN7S7323C8D1Ev();
Name_Map name_map_S7323C8[] = {
  NSPAIR(_ZN7S7323C8C1Ev),
  NSPAIR(_ZN7S7323C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7323C4;
extern VTBL_ENTRY _ZTI7S7323C4[];
extern  VTBL_ENTRY _ZTV7S7323C4[];
extern Class_Descriptor cd_S7323C5;
extern VTBL_ENTRY _ZTI7S7323C5[];
extern  VTBL_ENTRY _ZTV7S7323C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7323C5[];
extern Class_Descriptor cd_S7323C4;
extern VTBL_ENTRY _ZTI7S7323C4[];
extern  VTBL_ENTRY _ZTV7S7323C4[];
extern Class_Descriptor cd_S7323C3;
extern VTBL_ENTRY _ZTI7S7323C3[];
extern  VTBL_ENTRY _ZTV7S7323C3[];
extern Class_Descriptor cd_S7323C2;
extern VTBL_ENTRY _ZTI7S7323C2[];
extern  VTBL_ENTRY _ZTV7S7323C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7323C2[];
static Base_Class bases_S7323C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7323C4,    ABISELECT(576,364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7323C5,    ABISELECT(576,364), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7323C4,    ABISELECT(624,388), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7323C3,    ABISELECT(624,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7323C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7323C8[];
extern void _ZN7S7323C22v5Ev();
extern void _ZN7S7323C82v9Ev();
extern void _ZN7S7323C42v4Ev();
extern void _ZN7S7323C52v6Ev();
extern void _ZN7S7323C52v7Ev();
extern void _ZN7S7323C52v8Ev();
extern void _ZN7S7323C42v4Ev();
static  VTBL_ENTRY vtc_S7323C8[] = {
  ABISELECT(576,364),
  ABISELECT(576,364),
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI7S7323C8[0]),
  (VTBL_ENTRY)&_ZN7S7323C22v5Ev,
  (VTBL_ENTRY)&_ZN7S7323C82v9Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-576,-364),
  (VTBL_ENTRY)&(_ZTI7S7323C8[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v8Ev,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI7S7323C8[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S7323C8[];
extern void _ZN7S7323C22v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7323C2__7S7323C8[] = {
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI7S7323C2[0]),
  (VTBL_ENTRY)&_ZN7S7323C22v5Ev,
};
extern void _ZN7S7323C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7323C47S7323C3__7S7323C2__7S7323C8[] = {
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI7S7323C2[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
};
extern void _ZN7S7323C42v4Ev();
extern void _ZN7S7323C52v6Ev();
extern void _ZN7S7323C52v7Ev();
extern void _ZN7S7323C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7323C5__7S7323C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7323C5[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v8Ev,
};
static  VTT_ENTRY vtt_S7323C8[] = {
  {&(_ZTV7S7323C8[5]),  5,22},
  {&(_tg__ZTV7S7323C2__7S7323C8[3]),  3,4},
  {&(_tg__ZTV7S7323C47S7323C3__7S7323C2__7S7323C8[3]),  3,4},
  {&(_ZTV7S7323C8[14]),  14,22},
  {&(_ZTV7S7323C8[14]),  14,22},
  {&(_ZTV7S7323C8[21]),  21,22},
  {&(_tg__ZTV7S7323C5__7S7323C8[4]),  4,8},
  {&(_tg__ZTV7S7323C5__7S7323C8[4]),  4,8},
};
extern VTBL_ENTRY _ZTI7S7323C8[];
extern  VTBL_ENTRY _ZTV7S7323C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7323C8[];
Class_Descriptor cd_S7323C8 = {  "S7323C8", // class name
  bases_S7323C8, 5,
  &(vtc_S7323C8[0]), // expected_vtbl_contents
  &(vtt_S7323C8[0]), // expected_vtt_contents
  ABISELECT(928,572), // object size
  NSPAIRA(_ZTI7S7323C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7323C8),22, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7323C8),8, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7323C9  {
  void *s7323c9f0[2];
  int s7323c9f1[2];
  void *s7323c9f2[15];
  int s7323c9f3;
  ::S7323C2 s7323c9f4;
  virtual void  v10(); // _ZN7S7323C93v10Ev
  virtual void  v11(); // _ZN7S7323C93v11Ev
  ~S7323C9(); // tgen
  S7323C9(); // tgen
};
//SIG(-1 S7323C9) C1{ v1 v2 Fp[2] Fi[2] Fp[15] Fi FC2{ VBC3{ BC4{ v4} Fc[5] FC5{ VBC4 v10 v11 v12 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v3 Fp FL Fp[6] FC4 FC7{ BC8{ v6} v5 Fc FL Fi[3] FC9{ BC8 Fc[5] FC10{ VBC8 v7 v8 v9 Fp[3] FC6 Fp}[2] Fi Fp[7] FC10 FC8 Fc Fi Fs[5] Fi[8] FL Fc:8}} Fp Fi}}


void  S7323C9 ::v10(){vfunc_called(this, "_ZN7S7323C93v10Ev");}
void  S7323C9 ::v11(){vfunc_called(this, "_ZN7S7323C93v11Ev");}
S7323C9 ::~S7323C9(){ note_dtor("S7323C9", this);} // tgen
S7323C9 ::S7323C9(){ note_ctor("S7323C9", this);} // tgen

static void Test_S7323C9()
{
  extern Class_Descriptor cd_S7323C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(114,134)];
    init_test(&cd_S7323C9, buf);
    S7323C9 *dp, &lv = *(dp=new (buf) S7323C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(904,532), "sizeof(S7323C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7323C9)");
    check_field_offset(lv, s7323c9f0, ABISELECT(8,4), "S7323C9.s7323c9f0");
    check_field_offset(lv, s7323c9f1, ABISELECT(24,12), "S7323C9.s7323c9f1");
    check_field_offset(lv, s7323c9f2, ABISELECT(32,20), "S7323C9.s7323c9f2");
    check_field_offset(lv, s7323c9f3, ABISELECT(152,80), "S7323C9.s7323c9f3");
    check_field_offset(lv, s7323c9f4, ABISELECT(160,84), "S7323C9.s7323c9f4");
    test_class_info(&lv, &cd_S7323C9);
    dp->~S7323C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7323C9(Test_S7323C9, "S7323C9", ABISELECT(904,532));

#else // __cplusplus

extern void _ZN7S7323C9C1Ev();
extern void _ZN7S7323C9D1Ev();
Name_Map name_map_S7323C9[] = {
  NSPAIR(_ZN7S7323C9C1Ev),
  NSPAIR(_ZN7S7323C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7323C9[];
extern void _ZN7S7323C93v10Ev();
extern void _ZN7S7323C93v11Ev();
static  VTBL_ENTRY vtc_S7323C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7323C9[0]),
  (VTBL_ENTRY)&_ZN7S7323C93v10Ev,
  (VTBL_ENTRY)&_ZN7S7323C93v11Ev,
};
extern VTBL_ENTRY _ZTI7S7323C9[];
extern  VTBL_ENTRY _ZTV7S7323C9[];
Class_Descriptor cd_S7323C9 = {  "S7323C9", // class name
  0,0,//no base classes
  &(vtc_S7323C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(904,532), // object size
  NSPAIRA(_ZTI7S7323C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7323C9),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7323C10  : S7323C5 {
  void *s7323c10f0;
  ::S19277C8 s7323c10f1;
  int s7323c10f2;
  void *s7323c10f3;
  int s7323c10f4[2];
  virtual void  v12(); // _ZN8S7323C103v12Ev
  virtual void  v13(); // _ZN8S7323C103v13Ev
  ~S7323C10(); // tgen
  S7323C10(); // tgen
};
//SIG(-1 S7323C10) C1{ BC2{ VBC3{ v3} v4 v5 v6 Fp[3] FC4{} Fp} v1 v2 Fp FC5{ BC6{ BC7{ v7} Fc[5] FC8{ VBC7 v8 v9 v10 Fp[3] FC4 Fp}[2] Fi Fp[7] FC8 FC7 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC7 VBC8 Fi Fp} Fi Fp Fi[2]}


void  S7323C10 ::v12(){vfunc_called(this, "_ZN8S7323C103v12Ev");}
void  S7323C10 ::v13(){vfunc_called(this, "_ZN8S7323C103v13Ev");}
S7323C10 ::~S7323C10(){ note_dtor("S7323C10", this);} // tgen
S7323C10 ::S7323C10(){ note_ctor("S7323C10", this);} // tgen

static void Test_S7323C10()
{
  extern Class_Descriptor cd_S7323C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(56,66)];
    init_test(&cd_S7323C10, buf);
    S7323C10 *dp, &lv = *(dp=new (buf) S7323C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(440,260), "sizeof(S7323C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7323C10)");
    check_base_class_offset(lv, (S7323C4*)(S7323C5*), 0, "S7323C10");
    check_base_class_offset(lv, (S7323C5*), 0, "S7323C10");
    check_field_offset(lv, s7323c10f0, ABISELECT(48,24), "S7323C10.s7323c10f0");
    check_field_offset(lv, s7323c10f1, ABISELECT(56,28), "S7323C10.s7323c10f1");
    check_field_offset(lv, s7323c10f2, ABISELECT(416,244), "S7323C10.s7323c10f2");
    check_field_offset(lv, s7323c10f3, ABISELECT(424,248), "S7323C10.s7323c10f3");
    check_field_offset(lv, s7323c10f4, ABISELECT(432,252), "S7323C10.s7323c10f4");
    test_class_info(&lv, &cd_S7323C10);
    dp->~S7323C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7323C10(Test_S7323C10, "S7323C10", ABISELECT(440,260));

#else // __cplusplus

extern void _ZN8S7323C10C1Ev();
extern void _ZN8S7323C10D1Ev();
Name_Map name_map_S7323C10[] = {
  NSPAIR(_ZN8S7323C10C1Ev),
  NSPAIR(_ZN8S7323C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7323C4;
extern VTBL_ENTRY _ZTI7S7323C4[];
extern  VTBL_ENTRY _ZTV7S7323C4[];
extern Class_Descriptor cd_S7323C5;
extern VTBL_ENTRY _ZTI7S7323C5[];
extern  VTBL_ENTRY _ZTV7S7323C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7323C5[];
static Base_Class bases_S7323C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7323C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7323C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7323C10[];
extern void _ZN7S7323C42v4Ev();
extern void _ZN7S7323C52v6Ev();
extern void _ZN7S7323C52v7Ev();
extern void _ZN7S7323C52v8Ev();
extern void _ZN8S7323C103v12Ev();
extern void _ZN8S7323C103v13Ev();
static  VTBL_ENTRY vtc_S7323C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7323C10[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v8Ev,
  (VTBL_ENTRY)&_ZN8S7323C103v12Ev,
  (VTBL_ENTRY)&_ZN8S7323C103v13Ev,
};
extern VTBL_ENTRY _ZTV8S7323C10[];
extern void _ZN7S7323C42v4Ev();
extern void _ZN7S7323C52v6Ev();
extern void _ZN7S7323C52v7Ev();
extern void _ZN7S7323C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7323C5__8S7323C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7323C5[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v8Ev,
};
static  VTT_ENTRY vtt_S7323C10[] = {
  {&(_ZTV8S7323C10[4]),  4,10},
  {&(_tg__ZTV7S7323C5__8S7323C10[4]),  4,8},
  {&(_tg__ZTV7S7323C5__8S7323C10[4]),  4,8},
  {&(_ZTV8S7323C10[4]),  4,10},
};
extern VTBL_ENTRY _ZTI8S7323C10[];
extern  VTBL_ENTRY _ZTV8S7323C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7323C10[];
Class_Descriptor cd_S7323C10 = {  "S7323C10", // class name
  bases_S7323C10, 2,
  &(vtc_S7323C10[0]), // expected_vtbl_contents
  &(vtt_S7323C10[0]), // expected_vtt_contents
  ABISELECT(440,260), // object size
  NSPAIRA(_ZTI8S7323C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7323C10),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7323C10),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7323C1  : S7323C2 , virtual S7323C4 , S7323C8 , S7323C9 , virtual S7323C10 {
  void *s7323c1f0;
  __tsi64 s7323c1f1[4];
  ::S7323C10 s7323c1f2;
  ::S7323C4 s7323c1f3;
  void *s7323c1f4[2];
  int s7323c1f5[2];
  ::S20113C12 s7323c1f6[7];
  int s7323c1f7;
  virtual void  v1(); // _ZN7S7323C12v1Ev
  virtual void  v2(); // _ZN7S7323C12v2Ev
  virtual void  v3(); // _ZN7S7323C12v3Ev
  ~S7323C1(); // tgen
  S7323C1(); // tgen
};
//SIG(1 S7323C1) C1{ BC2{ VBC3{ BC4{ v4} Fc[5] FC5{ VBC4 v6 v7 v8 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v5 Fp FL Fp[6] FC4 FC7{ BC8{ v15} v14 Fc FL Fi[3] FC9{ BC8 Fc[5] FC10{ VBC8 v16 v17 v18 Fp[3] FC6 Fp}[2] Fi Fp[7] FC10 FC8 Fc Fi Fs[5] Fi[8] FL Fc:8}} Fp Fi} VBC4 BC11{ VBC5 BC2 v9 Fp FC4 FL[8] FC5 Fp} BC12{ v10 v11 Fp[2] Fi[2] Fp[15] Fi FC2} VBC13{ BC5 v12 v13 Fp FC14{ BC15{ BC16{ v19} Fc[5] FC17{ VBC16 v20 v21 v22 Fp[3] FC6 Fp}[2] Fi Fp[7] FC17 FC16 Fc Fi Fs[5] Fi[8] FL Fc:8} VBC16 VBC17 Fi Fp} Fi Fp Fi[2]} v1 v2 v3 Fp FL[4] FC13 FC4 Fp[2] Fi[2] FC7[7] Fi}


void  S7323C1 ::v1(){vfunc_called(this, "_ZN7S7323C12v1Ev");}
void  S7323C1 ::v2(){vfunc_called(this, "_ZN7S7323C12v2Ev");}
void  S7323C1 ::v3(){vfunc_called(this, "_ZN7S7323C12v3Ev");}
S7323C1 ::~S7323C1(){ note_dtor("S7323C1", this);} // tgen
S7323C1 ::S7323C1(){ note_ctor("S7323C1", this);} // tgen

static void Test_S7323C1()
{
  extern Class_Descriptor cd_S7323C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(706,859)];
    init_test(&cd_S7323C1, buf);
    S7323C1 *dp, &lv = *(dp=new (buf) S7323C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5640,3432), "sizeof(S7323C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7323C1)");
    check_base_class_offset(lv, (S7323C4*)(S7323C3*), ABISELECT(4848,2964), "S7323C1");
    /*is_ambiguous_... S7323C1::S7323C2 */ AMB_check_base_class_offset(lv, (S7323C3*)(S7323C2*), ABISELECT(4848,2964), "S7323C1");
    check_base_class_offset(lv, (S7323C3*)(S7323C2*)(S7323C8*), ABISELECT(4848,2964), "S7323C1");
    /*is_ambiguous_... S7323C1::S7323C2 */ AMB_check_base_class_offset(lv, (S7323C2*), 0, "S7323C1");
    /*is_ambiguous_... S7323C1::S7323C4 */ AMB_check_base_class_offset(lv, (S7323C4*), ABISELECT(5152,3148), "S7323C1");
    /*is_ambiguous_... S7323C1::S7323C5 */ AMB_check_base_class_offset(lv, (S7323C4*)(S7323C5*), ABISELECT(5152,3148), "S7323C1");
    check_base_class_offset(lv, (S7323C4*)(S7323C5*)(S7323C10*), ABISELECT(5152,3148), "S7323C1");
    check_base_class_offset(lv, (S7323C5*)(S7323C8*), ABISELECT(5152,3148), "S7323C1");
    check_base_class_offset(lv, (S7323C2*)(S7323C8*), ABISELECT(440,264), "S7323C1");
    check_base_class_offset(lv, (S7323C8*), ABISELECT(440,264), "S7323C1");
    check_base_class_offset(lv, (S7323C9*), ABISELECT(1016,628), "S7323C1");
    check_base_class_offset(lv, (S7323C5*)(S7323C10*), ABISELECT(5200,3172), "S7323C1");
    check_base_class_offset(lv, (S7323C10*), ABISELECT(5200,3172), "S7323C1");
    check_field_offset(lv, s7323c1f0, ABISELECT(1920,1160), "S7323C1.s7323c1f0");
    check_field_offset(lv, s7323c1f1, ABISELECT(1928,1164), "S7323C1.s7323c1f1");
    check_field_offset(lv, s7323c1f2, ABISELECT(1960,1196), "S7323C1.s7323c1f2");
    check_field_offset(lv, s7323c1f3, ABISELECT(2400,1456), "S7323C1.s7323c1f3");
    check_field_offset(lv, s7323c1f4, ABISELECT(2408,1460), "S7323C1.s7323c1f4");
    check_field_offset(lv, s7323c1f5, ABISELECT(2424,1468), "S7323C1.s7323c1f5");
    check_field_offset(lv, s7323c1f6, ABISELECT(2432,1476), "S7323C1.s7323c1f6");
    check_field_offset(lv, s7323c1f7, ABISELECT(4840,2960), "S7323C1.s7323c1f7");
    test_class_info(&lv, &cd_S7323C1);
    dp->~S7323C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7323C1(Test_S7323C1, "S7323C1", ABISELECT(5640,3432));

#else // __cplusplus

extern void _ZN7S7323C1C1Ev();
extern void _ZN7S7323C1D1Ev();
Name_Map name_map_S7323C1[] = {
  NSPAIR(_ZN7S7323C1C1Ev),
  NSPAIR(_ZN7S7323C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7323C4;
extern VTBL_ENTRY _ZTI7S7323C4[];
extern  VTBL_ENTRY _ZTV7S7323C4[];
extern Class_Descriptor cd_S7323C3;
extern VTBL_ENTRY _ZTI7S7323C3[];
extern  VTBL_ENTRY _ZTV7S7323C3[];
extern Class_Descriptor cd_S7323C2;
extern VTBL_ENTRY _ZTI7S7323C2[];
extern  VTBL_ENTRY _ZTV7S7323C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7323C2[];
extern Class_Descriptor cd_S7323C4;
extern VTBL_ENTRY _ZTI7S7323C4[];
extern  VTBL_ENTRY _ZTV7S7323C4[];
extern Class_Descriptor cd_S7323C5;
extern VTBL_ENTRY _ZTI7S7323C5[];
extern  VTBL_ENTRY _ZTV7S7323C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7323C5[];
extern Class_Descriptor cd_S7323C2;
extern VTBL_ENTRY _ZTI7S7323C2[];
extern  VTBL_ENTRY _ZTV7S7323C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7323C2[];
extern Class_Descriptor cd_S7323C8;
extern VTBL_ENTRY _ZTI7S7323C8[];
extern  VTBL_ENTRY _ZTV7S7323C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7323C8[];
extern Class_Descriptor cd_S7323C9;
extern VTBL_ENTRY _ZTI7S7323C9[];
extern  VTBL_ENTRY _ZTV7S7323C9[];
extern Class_Descriptor cd_S7323C5;
extern VTBL_ENTRY _ZTI7S7323C5[];
extern  VTBL_ENTRY _ZTV7S7323C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7323C5[];
extern Class_Descriptor cd_S7323C10;
extern VTBL_ENTRY _ZTI8S7323C10[];
extern  VTBL_ENTRY _ZTV8S7323C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7323C10[];
static Base_Class bases_S7323C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7323C4,    ABISELECT(4848,2964), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7323C3,    ABISELECT(4848,2964), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7323C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7323C4,    ABISELECT(5152,3148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7323C5,    ABISELECT(5152,3148), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7323C2,    ABISELECT(440,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7323C8,    ABISELECT(440,264), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7323C9,    ABISELECT(1016,628), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7323C5,    ABISELECT(5200,3172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7323C10,    ABISELECT(5200,3172), //bcp->offset
    36, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7323C1[];
extern void _ZN7S7323C22v5Ev();
extern void _ZN7S7323C12v1Ev();
extern void _ZN7S7323C12v2Ev();
extern void _ZN7S7323C12v3Ev();
extern void _ZN7S7323C22v5Ev();
extern void _ZN7S7323C82v9Ev();
extern void _ZN7S7323C93v10Ev();
extern void _ZN7S7323C93v11Ev();
extern void _ZN7S7323C42v4Ev();
extern void _ZN7S7323C42v4Ev();
extern void _ZN7S7323C52v6Ev();
extern void _ZN7S7323C52v7Ev();
extern void _ZN7S7323C52v8Ev();
extern void _ZN7S7323C42v4Ev();
extern void _ZN7S7323C52v6Ev();
extern void _ZN7S7323C52v7Ev();
extern void _ZN7S7323C52v8Ev();
extern void _ZN8S7323C103v12Ev();
extern void _ZN8S7323C103v13Ev();
static  VTBL_ENTRY vtc_S7323C1[] = {
  ABISELECT(5200,3172),
  ABISELECT(5152,3148),
  ABISELECT(5152,3148),
  ABISELECT(4848,2964),
  0,
  (VTBL_ENTRY)&(_ZTI7S7323C1[0]),
  (VTBL_ENTRY)&_ZN7S7323C22v5Ev,
  (VTBL_ENTRY)&_ZN7S7323C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7323C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7323C12v3Ev,
  ABISELECT(4712,2884),
  ABISELECT(4712,2884),
  ABISELECT(4408,2700),
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI7S7323C1[0]),
  (VTBL_ENTRY)&_ZN7S7323C22v5Ev,
  (VTBL_ENTRY)&_ZN7S7323C82v9Ev,
  ABISELECT(-1016,-628),
  (VTBL_ENTRY)&(_ZTI7S7323C1[0]),
  (VTBL_ENTRY)&_ZN7S7323C93v10Ev,
  (VTBL_ENTRY)&_ZN7S7323C93v11Ev,
  0,
  ABISELECT(-4848,-2964),
  (VTBL_ENTRY)&(_ZTI7S7323C1[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-5152,-3148),
  (VTBL_ENTRY)&(_ZTI7S7323C1[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v8Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-5200,-3172),
  (VTBL_ENTRY)&(_ZTI7S7323C1[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v8Ev,
  (VTBL_ENTRY)&_ZN8S7323C103v12Ev,
  (VTBL_ENTRY)&_ZN8S7323C103v13Ev,
};
extern VTBL_ENTRY _ZTV7S7323C1[];
extern void _ZN7S7323C22v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7323C2__7S7323C1[] = {
  ABISELECT(4848,2964),
  0,
  (VTBL_ENTRY)&(_ZTI7S7323C2[0]),
  (VTBL_ENTRY)&_ZN7S7323C22v5Ev,
};
extern void _ZN7S7323C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7323C47S7323C3__7S7323C2__7S7323C1[] = {
  0,
  ABISELECT(-4848,-2964),
  (VTBL_ENTRY)&(_ZTI7S7323C2[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
};
extern void _ZN7S7323C22v5Ev();
extern void _ZN7S7323C82v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7323C8__7S7323C1[] = {
  ABISELECT(4712,2884),
  ABISELECT(4712,2884),
  ABISELECT(4408,2700),
  0,
  (VTBL_ENTRY)&(_ZTI7S7323C8[0]),
  (VTBL_ENTRY)&_ZN7S7323C22v5Ev,
  (VTBL_ENTRY)&_ZN7S7323C82v9Ev,
};
extern void _ZN7S7323C22v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7323C27S7323C8__A1__7S7323C1[] = {
  ABISELECT(4408,2700),
  0,
  (VTBL_ENTRY)&(_ZTI7S7323C2[0]),
  (VTBL_ENTRY)&_ZN7S7323C22v5Ev,
};
extern void _ZN7S7323C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7323C47S7323C3__7S7323C27S7323C8__A1__7S7323C1[] = {
  0,
  ABISELECT(-4408,-2700),
  (VTBL_ENTRY)&(_ZTI7S7323C2[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
};
extern void _ZN7S7323C42v4Ev();
extern void _ZN7S7323C52v6Ev();
extern void _ZN7S7323C52v7Ev();
extern void _ZN7S7323C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7323C5__7S7323C8__7S7323C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-4712,-2884),
  (VTBL_ENTRY)&(_ZTI7S7323C8[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v8Ev,
};
extern void _ZN7S7323C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7323C47S7323C3__A1__7S7323C8__7S7323C1[] = {
  0,
  ABISELECT(-4408,-2700),
  (VTBL_ENTRY)&(_ZTI7S7323C8[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
};
extern void _ZN7S7323C42v4Ev();
extern void _ZN7S7323C52v6Ev();
extern void _ZN7S7323C52v7Ev();
extern void _ZN7S7323C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7323C5__7S7323C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7323C5[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v8Ev,
};
extern void _ZN7S7323C42v4Ev();
extern void _ZN7S7323C52v6Ev();
extern void _ZN7S7323C52v7Ev();
extern void _ZN7S7323C52v8Ev();
extern void _ZN8S7323C103v12Ev();
extern void _ZN8S7323C103v13Ev();
static  VTBL_ENTRY _tg__ZTV8S7323C10__7S7323C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7323C10[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v8Ev,
  (VTBL_ENTRY)&_ZN8S7323C103v12Ev,
  (VTBL_ENTRY)&_ZN8S7323C103v13Ev,
};
extern void _ZN7S7323C42v4Ev();
extern void _ZN7S7323C52v6Ev();
extern void _ZN7S7323C52v7Ev();
extern void _ZN7S7323C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7323C58S7323C10__A1__7S7323C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7323C5[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7323C52v8Ev,
};
extern void _ZN7S7323C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7323C4__7S7323C58S7323C10__A1__7S7323C1[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI7S7323C5[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
};
extern void _ZN7S7323C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7323C4__8S7323C10__7S7323C1[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S7323C10[0]),
  (VTBL_ENTRY)&_ZN7S7323C42v4Ev,
};
static  VTT_ENTRY vtt_S7323C1[] = {
  {&(_ZTV7S7323C1[6]),  6,51},
  {&(_tg__ZTV7S7323C2__7S7323C1[3]),  3,4},
  {&(_tg__ZTV7S7323C47S7323C3__7S7323C2__7S7323C1[3]),  3,4},
  {&(_tg__ZTV7S7323C8__7S7323C1[5]),  5,7},
  {&(_tg__ZTV7S7323C27S7323C8__A1__7S7323C1[3]),  3,4},
  {&(_tg__ZTV7S7323C47S7323C3__7S7323C27S7323C8__A1__7S7323C1[3]),  3,4},
  {&(_tg__ZTV7S7323C5__7S7323C8__7S7323C1[7]),  7,11},
  {&(_tg__ZTV7S7323C5__7S7323C8__7S7323C1[7]),  7,11},
  {&(_tg__ZTV7S7323C47S7323C3__A1__7S7323C8__7S7323C1[3]),  3,4},
  {&(_ZTV7S7323C1[24]),  24,51},
  {&(_ZTV7S7323C1[32]),  32,51},
  {&(_ZTV7S7323C1[15]),  15,51},
  {&(_ZTV7S7323C1[32]),  32,51},
  {&(_ZTV7S7323C1[45]),  45,51},
  {&(_tg__ZTV7S7323C5__7S7323C1[4]),  4,8},
  {&(_tg__ZTV7S7323C5__7S7323C1[4]),  4,8},
  {&(_tg__ZTV8S7323C10__7S7323C1[4]),  4,10},
  {&(_tg__ZTV7S7323C58S7323C10__A1__7S7323C1[4]),  4,8},
  {&(_tg__ZTV7S7323C4__7S7323C58S7323C10__A1__7S7323C1[3]),  3,4},
  {&(_tg__ZTV7S7323C4__8S7323C10__7S7323C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7323C1[];
extern  VTBL_ENTRY _ZTV7S7323C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7323C1[];
Class_Descriptor cd_S7323C1 = {  "S7323C1", // class name
  bases_S7323C1, 10,
  &(vtc_S7323C1[0]), // expected_vtbl_contents
  &(vtt_S7323C1[0]), // expected_vtt_contents
  ABISELECT(5640,3432), // object size
  NSPAIRA(_ZTI7S7323C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7323C1),51, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7323C1),20, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8511C3_nt  {
  void *s8511c3f0[2];
  void  mf8511c3(); // _ZN10S8511C3_nt8mf8511c3Ev
};
//SIG(-1 S8511C3_nt) C1{ m Fp[2]}


void  S8511C3_nt ::mf8511c3(){}

//skip512 S8511C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8511C2  {
  int s8511c2f0;
  ::S8511C3_nt s8511c2f1[10];
  int s8511c2f2[2];
  void *s8511c2f3;
  char s8511c2f4[2];
  virtual  ~S8511C2(); // _ZN7S8511C2D1Ev
  virtual void  v10(); // _ZN7S8511C23v10Ev
  virtual void  v11(); // _ZN7S8511C23v11Ev
  virtual void  v12(); // _ZN7S8511C23v12Ev
  virtual void  v13(); // _ZN7S8511C23v13Ev
  virtual void  v14(); // _ZN7S8511C23v14Ev
  virtual void  v15(); // _ZN7S8511C23v15Ev
  virtual void  v16(); // _ZN7S8511C23v16Ev
  virtual void  v17(); // _ZN7S8511C23v17Ev
  virtual void  v18(); // _ZN7S8511C23v18Ev
  virtual void  v19(); // _ZN7S8511C23v19Ev
  S8511C2(); // tgen
};
//SIG(-1 S8511C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi FC2{ m Fp[2]}[10] Fi[2] Fp Fc[2]}


 S8511C2 ::~S8511C2(){ note_dtor("S8511C2", this);}
void  S8511C2 ::v10(){vfunc_called(this, "_ZN7S8511C23v10Ev");}
void  S8511C2 ::v11(){vfunc_called(this, "_ZN7S8511C23v11Ev");}
void  S8511C2 ::v12(){vfunc_called(this, "_ZN7S8511C23v12Ev");}
void  S8511C2 ::v13(){vfunc_called(this, "_ZN7S8511C23v13Ev");}
void  S8511C2 ::v14(){vfunc_called(this, "_ZN7S8511C23v14Ev");}
void  S8511C2 ::v15(){vfunc_called(this, "_ZN7S8511C23v15Ev");}
void  S8511C2 ::v16(){vfunc_called(this, "_ZN7S8511C23v16Ev");}
void  S8511C2 ::v17(){vfunc_called(this, "_ZN7S8511C23v17Ev");}
void  S8511C2 ::v18(){vfunc_called(this, "_ZN7S8511C23v18Ev");}
void  S8511C2 ::v19(){vfunc_called(this, "_ZN7S8511C23v19Ev");}
S8511C2 ::S8511C2(){ note_ctor("S8511C2", this);} // tgen

static void Test_S8511C2()
{
  extern Class_Descriptor cd_S8511C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,27)];
    init_test(&cd_S8511C2, buf);
    S8511C2 *dp, &lv = *(dp=new (buf) S8511C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,104), "sizeof(S8511C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8511C2)");
    check_field_offset(lv, s8511c2f0, ABISELECT(8,4), "S8511C2.s8511c2f0");
    check_field_offset(lv, s8511c2f1, ABISELECT(16,8), "S8511C2.s8511c2f1");
    check_field_offset(lv, s8511c2f2, ABISELECT(176,88), "S8511C2.s8511c2f2");
    check_field_offset(lv, s8511c2f3, ABISELECT(184,96), "S8511C2.s8511c2f3");
    check_field_offset(lv, s8511c2f4, ABISELECT(192,100), "S8511C2.s8511c2f4");
    test_class_info(&lv, &cd_S8511C2);
    dp->~S8511C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8511C2(Test_S8511C2, "S8511C2", ABISELECT(200,104));

#else // __cplusplus

extern void _ZN7S8511C2C1Ev();
extern void _ZN7S8511C2D1Ev();
Name_Map name_map_S8511C2[] = {
  NSPAIR(_ZN7S8511C2C1Ev),
  NSPAIR(_ZN7S8511C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8511C2[];
extern void _ZN7S8511C2D1Ev();
extern void _ZN7S8511C2D0Ev();
extern void _ZN7S8511C23v10Ev();
extern void _ZN7S8511C23v11Ev();
extern void _ZN7S8511C23v12Ev();
extern void _ZN7S8511C23v13Ev();
extern void _ZN7S8511C23v14Ev();
extern void _ZN7S8511C23v15Ev();
extern void _ZN7S8511C23v16Ev();
extern void _ZN7S8511C23v17Ev();
extern void _ZN7S8511C23v18Ev();
extern void _ZN7S8511C23v19Ev();
static  VTBL_ENTRY vtc_S8511C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8511C2[0]),
  (VTBL_ENTRY)&_ZN7S8511C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8511C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S8511C2[];
extern  VTBL_ENTRY _ZTV7S8511C2[];
Class_Descriptor cd_S8511C2 = {  "S8511C2", // class name
  0,0,//no base classes
  &(vtc_S8511C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,104), // object size
  NSPAIRA(_ZTI7S8511C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8511C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8511C5_nt  {
  ::S4206C24_nt s8511c5f0;
  void  mf8511c5(); // _ZN10S8511C5_nt8mf8511c5Ev
  virtual  ~S8511C5_nt(); // _ZN10S8511C5_ntD1Ev
  S8511C5_nt(); // tgen
};
//SIG(-1 S8511C5_nt) C1{ vd m FC2{ BC3{ m Fp Fi FC4{ m} FC5{ m}}}}


void  S8511C5_nt ::mf8511c5(){}
 S8511C5_nt ::~S8511C5_nt(){ note_dtor("S8511C5_nt", this);}
S8511C5_nt ::S8511C5_nt(){ note_ctor("S8511C5_nt", this);} // tgen

//skip512 S8511C5_nt

#else // __cplusplus

extern void _ZN10S8511C5_ntC1Ev();
extern void _ZN10S8511C5_ntD1Ev();
Name_Map name_map_S8511C5_nt[] = {
  NSPAIR(_ZN10S8511C5_ntC1Ev),
  NSPAIR(_ZN10S8511C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8511C5_nt[];
extern void _ZN10S8511C5_ntD1Ev();
extern void _ZN10S8511C5_ntD0Ev();
static  VTBL_ENTRY vtc_S8511C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8511C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S8511C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8511C5_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S8511C5_nt[];
VTBL_ENTRY *P__ZTI10S8511C5_nt = _ZTI10S8511C5_nt; 
extern  VTBL_ENTRY _ZTV10S8511C5_nt[];
Class_Descriptor cd_S8511C5_nt = {  "S8511C5_nt", // class name
  0,0,//no base classes
  &(vtc_S8511C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI10S8511C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8511C5_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8511C11_nt  {
  __tsi64 s8511c11f0;
  void  mf8511c11(); // _ZN11S8511C11_nt9mf8511c11Ev
};
//SIG(-1 S8511C11_nt) C1{ m FL}


void  S8511C11_nt ::mf8511c11(){}

//skip512 S8511C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8511C10_nt  {
  ::S8511C11_nt s8511c10f0;
  void  mf8511c10(); // _ZN11S8511C10_nt9mf8511c10Ev
};
//SIG(-1 S8511C10_nt) C1{ m FC2{ m FL}}


void  S8511C10_nt ::mf8511c10(){}

//skip512 S8511C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8511C4  : S8511C5_nt {
  void *s8511c4f0[3];
  int s8511c4f1[2];
  ::S8511C10_nt s8511c4f2;
  int s8511c4f3;
  ::S8511C10_nt s8511c4f4;
  int s8511c4f5;
  virtual  ~S8511C4(); // _ZN7S8511C4D1Ev
  virtual void  v20(); // _ZN7S8511C43v20Ev
  virtual void  v21(); // _ZN7S8511C43v21Ev
  S8511C4(); // tgen
};
//SIG(-1 S8511C4) C1{ BC2{ vd m FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}}} vd v1 v2 Fp[3] Fi[2] FC7{ m FC8{ m FL}} Fi FC7 Fi}


 S8511C4 ::~S8511C4(){ note_dtor("S8511C4", this);}
void  S8511C4 ::v20(){vfunc_called(this, "_ZN7S8511C43v20Ev");}
void  S8511C4 ::v21(){vfunc_called(this, "_ZN7S8511C43v21Ev");}
S8511C4 ::S8511C4(){ note_ctor("S8511C4", this);} // tgen

static void Test_S8511C4()
{
  extern Class_Descriptor cd_S8511C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S8511C4, buf);
    S8511C4 *dp, &lv = *(dp=new (buf) S8511C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S8511C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8511C4)");
    check_base_class_offset(lv, (S8511C5_nt*), 0, "S8511C4");
    check_field_offset(lv, s8511c4f0, ABISELECT(24,16), "S8511C4.s8511c4f0");
    check_field_offset(lv, s8511c4f1, ABISELECT(48,28), "S8511C4.s8511c4f1");
    check_field_offset(lv, s8511c4f2, ABISELECT(56,36), "S8511C4.s8511c4f2");
    check_field_offset(lv, s8511c4f3, ABISELECT(64,44), "S8511C4.s8511c4f3");
    check_field_offset(lv, s8511c4f4, ABISELECT(72,48), "S8511C4.s8511c4f4");
    check_field_offset(lv, s8511c4f5, ABISELECT(80,56), "S8511C4.s8511c4f5");
    test_class_info(&lv, &cd_S8511C4);
    dp->~S8511C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8511C4(Test_S8511C4, "S8511C4", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN7S8511C4C1Ev();
extern void _ZN7S8511C4D1Ev();
Name_Map name_map_S8511C4[] = {
  NSPAIR(_ZN7S8511C4C1Ev),
  NSPAIR(_ZN7S8511C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8511C5_nt;
extern VTBL_ENTRY _ZTI10S8511C5_nt[];
extern  VTBL_ENTRY _ZTV10S8511C5_nt[];
static Base_Class bases_S8511C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8511C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8511C4[];
extern void _ZN7S8511C4D1Ev();
extern void _ZN7S8511C4D0Ev();
extern void _ZN7S8511C43v20Ev();
extern void _ZN7S8511C43v21Ev();
static  VTBL_ENTRY vtc_S8511C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8511C4[0]),
  (VTBL_ENTRY)&_ZN7S8511C4D1Ev,
  (VTBL_ENTRY)&_ZN7S8511C4D0Ev,
  (VTBL_ENTRY)&_ZN7S8511C43v20Ev,
  (VTBL_ENTRY)&_ZN7S8511C43v21Ev,
};
extern VTBL_ENTRY _ZTI7S8511C4[];
extern  VTBL_ENTRY _ZTV7S8511C4[];
Class_Descriptor cd_S8511C4 = {  "S8511C4", // class name
  bases_S8511C4, 1,
  &(vtc_S8511C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI7S8511C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8511C4),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8511C12  {
  ::S16113C5_nt s8511c12f0;
  int s8511c12f1[5];
  void  mf8511c12(); // _ZN8S8511C129mf8511c12Ev
};
//SIG(-1 S8511C12) C1{ m FC2{ m Fp Fi FC3{ m}} Fi[5]}


void  S8511C12 ::mf8511c12(){}

static void Test_S8511C12()
{
  {
    init_simple_test("S8511C12");
    S8511C12 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S8511C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8511C12)");
    check_field_offset(lv, s8511c12f0, 0, "S8511C12.s8511c12f0");
    check_field_offset(lv, s8511c12f1, ABISELECT(16,12), "S8511C12.s8511c12f1");
  }
}
static Arrange_To_Call_Me vS8511C12(Test_S8511C12, "S8511C12", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8511C15  {
  ::S2440C18_nt s8511c15f0;
  int s8511c15f1;
  void  mf8511c15(); // _ZN8S8511C159mf8511c15Ev
};
//SIG(-1 S8511C15) C1{ m FC2{ m FC3{ m FC4{ m FL[2]}} FC3 FC3 FC3} Fi}


void  S8511C15 ::mf8511c15(){}

static void Test_S8511C15()
{
  {
    init_simple_test("S8511C15");
    S8511C15 lv;
    check2(sizeof(lv), ABISELECT(72,68), "sizeof(S8511C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8511C15)");
    check_field_offset(lv, s8511c15f0, 0, "S8511C15.s8511c15f0");
    check_field_offset(lv, s8511c15f1, 64, "S8511C15.s8511c15f1");
  }
}
static Arrange_To_Call_Me vS8511C15(Test_S8511C15, "S8511C15", ABISELECT(72,68));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8511C1  : S8511C2 , S8511C4 {
  ::S8511C12 s8511c1f0;
  void *s8511c1f1;
  ::S8511C15 s8511c1f2;
  ::S4206C14_nt s8511c1f3;
  ::S4206C14_nt s8511c1f4;
  virtual  ~S8511C1(); // _ZN7S8511C1D1Ev
  virtual void  v1(); // _ZN7S8511C12v1Ev
  virtual void  v2(); // _ZN7S8511C12v2Ev
  virtual void  v3(); // _ZN7S8511C12v3Ev
  virtual void  v4(); // _ZN7S8511C12v4Ev
  virtual void  v5(); // _ZN7S8511C12v5Ev
  virtual void  v6(); // _ZN7S8511C12v6Ev
  virtual void  v7(); // _ZN7S8511C12v7Ev
  virtual void  v8(); // _ZN7S8511C12v8Ev
  virtual void  v9(); // _ZN7S8511C12v9Ev
  S8511C1(); // tgen
};
//SIG(1 S8511C1) C1{ BC2{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fi FC3{ m Fp[2]}[10] Fi[2] Fp Fc[2]} BC4{ BC5{ vd m FC6{ BC7{ m Fp Fi FC8{ m} FC9{ m}}}} vd v20 v21 Fp[3] Fi[2] FC10{ m FC11{ m FL}} Fi FC10 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC12{ m FC13{ m Fp Fi FC14{ m}} Fi[5]} Fp FC15{ m FC16{ m FC17{ m FC18{ m FL[2]}} FC17 FC17 FC17} Fi} FC19{ m FC18} FC19}


 S8511C1 ::~S8511C1(){ note_dtor("S8511C1", this);}
void  S8511C1 ::v1(){vfunc_called(this, "_ZN7S8511C12v1Ev");}
void  S8511C1 ::v2(){vfunc_called(this, "_ZN7S8511C12v2Ev");}
void  S8511C1 ::v3(){vfunc_called(this, "_ZN7S8511C12v3Ev");}
void  S8511C1 ::v4(){vfunc_called(this, "_ZN7S8511C12v4Ev");}
void  S8511C1 ::v5(){vfunc_called(this, "_ZN7S8511C12v5Ev");}
void  S8511C1 ::v6(){vfunc_called(this, "_ZN7S8511C12v6Ev");}
void  S8511C1 ::v7(){vfunc_called(this, "_ZN7S8511C12v7Ev");}
void  S8511C1 ::v8(){vfunc_called(this, "_ZN7S8511C12v8Ev");}
void  S8511C1 ::v9(){vfunc_called(this, "_ZN7S8511C12v9Ev");}
S8511C1 ::S8511C1(){ note_ctor("S8511C1", this);} // tgen

static void Test_S8511C1()
{
  extern Class_Descriptor cd_S8511C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(56,76)];
    init_test(&cd_S8511C1, buf);
    S8511C1 *dp, &lv = *(dp=new (buf) S8511C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(440,300), "sizeof(S8511C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8511C1)");
    check_base_class_offset(lv, (S8511C2*), 0, "S8511C1");
    check_base_class_offset(lv, (S8511C5_nt*)(S8511C4*), ABISELECT(200,104), "S8511C1");
    check_base_class_offset(lv, (S8511C4*), ABISELECT(200,104), "S8511C1");
    check_field_offset(lv, s8511c1f0, ABISELECT(288,164), "S8511C1.s8511c1f0");
    check_field_offset(lv, s8511c1f1, ABISELECT(328,196), "S8511C1.s8511c1f1");
    check_field_offset(lv, s8511c1f2, ABISELECT(336,200), "S8511C1.s8511c1f2");
    check_field_offset(lv, s8511c1f3, ABISELECT(408,268), "S8511C1.s8511c1f3");
    check_field_offset(lv, s8511c1f4, ABISELECT(424,284), "S8511C1.s8511c1f4");
    test_class_info(&lv, &cd_S8511C1);
    dp->~S8511C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8511C1(Test_S8511C1, "S8511C1", ABISELECT(440,300));

#else // __cplusplus

extern void _ZN7S8511C1C1Ev();
extern void _ZN7S8511C1D1Ev();
Name_Map name_map_S8511C1[] = {
  NSPAIR(_ZN7S8511C1C1Ev),
  NSPAIR(_ZN7S8511C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8511C2;
extern VTBL_ENTRY _ZTI7S8511C2[];
extern  VTBL_ENTRY _ZTV7S8511C2[];
extern Class_Descriptor cd_S8511C5_nt;
extern VTBL_ENTRY _ZTI10S8511C5_nt[];
extern  VTBL_ENTRY _ZTV10S8511C5_nt[];
extern Class_Descriptor cd_S8511C4;
extern VTBL_ENTRY _ZTI7S8511C4[];
extern  VTBL_ENTRY _ZTV7S8511C4[];
static Base_Class bases_S8511C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8511C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S8511C5_nt,    ABISELECT(200,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S8511C4,    ABISELECT(200,104), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8511C1[];
extern void _ZN7S8511C1D1Ev();
extern void _ZN7S8511C1D0Ev();
extern void _ZN7S8511C23v10Ev();
extern void _ZN7S8511C23v11Ev();
extern void _ZN7S8511C23v12Ev();
extern void _ZN7S8511C23v13Ev();
extern void _ZN7S8511C23v14Ev();
extern void _ZN7S8511C23v15Ev();
extern void _ZN7S8511C23v16Ev();
extern void _ZN7S8511C23v17Ev();
extern void _ZN7S8511C23v18Ev();
extern void _ZN7S8511C23v19Ev();
extern void _ZN7S8511C12v1Ev();
extern void _ZN7S8511C12v2Ev();
extern void _ZN7S8511C12v3Ev();
extern void _ZN7S8511C12v4Ev();
extern void _ZN7S8511C12v5Ev();
extern void _ZN7S8511C12v6Ev();
extern void _ZN7S8511C12v7Ev();
extern void _ZN7S8511C12v8Ev();
extern void _ZN7S8511C12v9Ev();
extern void ABISELECT(_ZThn200_N7S8511C1D1Ev,_ZThn104_N7S8511C1D1Ev)();
extern void ABISELECT(_ZThn200_N7S8511C1D0Ev,_ZThn104_N7S8511C1D0Ev)();
extern void _ZN7S8511C43v20Ev();
extern void _ZN7S8511C43v21Ev();
static  VTBL_ENTRY vtc_S8511C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8511C1[0]),
  (VTBL_ENTRY)&_ZN7S8511C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8511C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8511C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8511C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8511C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8511C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8511C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8511C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8511C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8511C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8511C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8511C12v9Ev,
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI7S8511C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N7S8511C1D1Ev,_ZThn104_N7S8511C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn200_N7S8511C1D0Ev,_ZThn104_N7S8511C1D0Ev),
  (VTBL_ENTRY)&_ZN7S8511C43v20Ev,
  (VTBL_ENTRY)&_ZN7S8511C43v21Ev,
};
extern VTBL_ENTRY _ZTI7S8511C1[];
extern  VTBL_ENTRY _ZTV7S8511C1[];
Class_Descriptor cd_S8511C1 = {  "S8511C1", // class name
  bases_S8511C1, 3,
  &(vtc_S8511C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(440,300), // object size
  NSPAIRA(_ZTI7S8511C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8511C1),29, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3593C3_nt  {
  ::S2440C26 s3593c3f0;
  ::S2440C22 s3593c3f1;
  char s3593c3f2;
  void  mf3593c3(); // _ZN10S3593C3_nt8mf3593c3Ev
  virtual  ~S3593C3_nt(); // _ZN10S3593C3_ntD1Ev
  S3593C3_nt(); // tgen
};
//SIG(-1 S3593C3_nt) C1{ vd m FC2{ m Fp Fi FC3{ m} FC4{ m}} FC5{ m Fp Fi FC6{ m} FC3} Fc}


void  S3593C3_nt ::mf3593c3(){}
 S3593C3_nt ::~S3593C3_nt(){ note_dtor("S3593C3_nt", this);}
S3593C3_nt ::S3593C3_nt(){ note_ctor("S3593C3_nt", this);} // tgen

//skip512 S3593C3_nt

#else // __cplusplus

extern void _ZN10S3593C3_ntC1Ev();
extern void _ZN10S3593C3_ntD1Ev();
Name_Map name_map_S3593C3_nt[] = {
  NSPAIR(_ZN10S3593C3_ntC1Ev),
  NSPAIR(_ZN10S3593C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3593C3_nt[];
extern void _ZN10S3593C3_ntD1Ev();
extern void _ZN10S3593C3_ntD0Ev();
static  VTBL_ENTRY vtc_S3593C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3593C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3593C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3593C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3593C3_nt[];
VTBL_ENTRY *P__ZTI10S3593C3_nt = _ZTI10S3593C3_nt; 
extern  VTBL_ENTRY _ZTV10S3593C3_nt[];
Class_Descriptor cd_S3593C3_nt = {  "S3593C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3593C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S3593C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3593C3_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3593C10_nt  {
  ::S16113C5_nt s3593c10f0;
  int s3593c10f1[2];
  char s3593c10f2;
  virtual  ~S3593C10_nt(); // _ZN11S3593C10_ntD1Ev
  virtual void  v2(); // _ZN11S3593C10_nt2v2Ev
  virtual void  v3(); // _ZN11S3593C10_nt2v3Ev
  virtual void  v4(); // _ZN11S3593C10_nt2v4Ev
  S3593C10_nt(); // tgen
};
//SIG(-1 S3593C10_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S3593C10_nt ::~S3593C10_nt(){ note_dtor("S3593C10_nt", this);}
void  S3593C10_nt ::v2(){vfunc_called(this, "_ZN11S3593C10_nt2v2Ev");}
void  S3593C10_nt ::v3(){vfunc_called(this, "_ZN11S3593C10_nt2v3Ev");}
void  S3593C10_nt ::v4(){vfunc_called(this, "_ZN11S3593C10_nt2v4Ev");}
S3593C10_nt ::S3593C10_nt(){ note_ctor("S3593C10_nt", this);} // tgen

//skip512 S3593C10_nt

#else // __cplusplus

extern void _ZN11S3593C10_ntC1Ev();
extern void _ZN11S3593C10_ntD1Ev();
Name_Map name_map_S3593C10_nt[] = {
  NSPAIR(_ZN11S3593C10_ntC1Ev),
  NSPAIR(_ZN11S3593C10_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S3593C10_nt[];
extern void _ZN11S3593C10_ntD1Ev();
extern void _ZN11S3593C10_ntD0Ev();
extern void _ZN11S3593C10_nt2v2Ev();
extern void _ZN11S3593C10_nt2v3Ev();
extern void _ZN11S3593C10_nt2v4Ev();
static  VTBL_ENTRY vtc_S3593C10_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3593C10_nt[0]),
  (VTBL_ENTRY)&_ZN11S3593C10_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S3593C10_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S3593C10_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S3593C10_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S3593C10_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI11S3593C10_nt[];
VTBL_ENTRY *P__ZTI11S3593C10_nt = _ZTI11S3593C10_nt; 
extern  VTBL_ENTRY _ZTV11S3593C10_nt[];
Class_Descriptor cd_S3593C10_nt = {  "S3593C10_nt", // class name
  0,0,//no base classes
  &(vtc_S3593C10_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI11S3593C10_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S3593C10_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3593C18_nt  {
  ::S2440C20_nt s3593c18f0;
  __tsi64 s3593c18f1;
  int s3593c18f2;
  __tsi64 s3593c18f3;
  ::S2440C20_nt s3593c18f4;
  ::S2440C20_nt s3593c18f5;
  ::S2440C20_nt s3593c18f6;
  ::S2440C20_nt s3593c18f7;
  __tsi64 s3593c18f8[2];
  int s3593c18f9[4];
  __tsi64 s3593c18f10;
  int s3593c18f11[3];
  char s3593c18f12;
  __tsi64 s3593c18f13;
  char s3593c18f14;
  __tsi64 s3593c18f15;
  char s3593c18f16;
  int s3593c18f17;
  char s3593c18f18[2];
  void  mf3593c18(); // _ZN11S3593C18_nt9mf3593c18Ev
};
//SIG(-1 S3593C18_nt) C1{ m FC2{ m Fp Fi FC3{ m}} FL Fi FL FC2 FC2 FC2 FC2 FL[2] Fi[4] FL Fi[3] Fc FL Fc FL Fc Fi Fc[2]}


void  S3593C18_nt ::mf3593c18(){}

//skip512 S3593C18_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3593C21_nt  {
  void *s3593c21f0;
  void  mf3593c21(); // _ZN11S3593C21_nt9mf3593c21Ev
};
//SIG(-1 S3593C21_nt) C1{ m Fp}


void  S3593C21_nt ::mf3593c21(){}

//skip512 S3593C21_nt

#else // __cplusplus

Class_Descriptor cd_S3593C21_nt = {  "S3593C21_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3593C13_nt  {
  ::S8511C3_nt s3593c13f0;
  void *s3593c13f1;
  ::S8511C10_nt s3593c13f2;
  char s3593c13f3;
  ::S6469C3_nt s3593c13f4;
  ::S3593C18_nt s3593c13f5;
  ::S3593C21_nt s3593c13f6;
  int s3593c13f7[2];
  void  mf3593c13(); // _ZN11S3593C13_nt9mf3593c13Ev
};
//SIG(-1 S3593C13_nt) C1{ m FC2{ m Fp[2]} Fp FC3{ m FC4{ m FL}} Fc FC5{ m Fi[2]} FC6{ m FC7{ m Fp Fi FC8{ m}} FL Fi FL FC7 FC7 FC7 FC7 FL[2] Fi[4] FL Fi[3] Fc FL Fc FL Fc Fi Fc[2]} FC9{ m Fp} Fi[2]}


void  S3593C13_nt ::mf3593c13(){}

//skip512 S3593C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3593C2  : S3593C3_nt , S3593C10_nt {
  void *s3593c2f0[2];
  ::S3593C13_nt s3593c2f1;
  virtual  ~S3593C2(); // _ZN7S3593C2D1Ev
  virtual void  v5(); // _ZN7S3593C22v5Ev
  virtual void  v6(); // _ZN7S3593C22v6Ev
  virtual void  v7(); // _ZN7S3593C22v7Ev
  S3593C2(); // tgen
};
//SIG(-1 S3593C2) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC6{ m Fp Fi FC7{ m} FC4} Fc} BC8{ vd v4 v5 v6 FC9{ m Fp Fi FC10{ m}} Fi[2] Fc} vd v1 v2 v3 Fp[2] FC11{ m FC12{ m Fp[2]} Fp FC13{ m FC14{ m FL}} Fc FC15{ m Fi[2]} FC16{ m FC17{ m Fp Fi FC7} FL Fi FL FC17 FC17 FC17 FC17 FL[2] Fi[4] FL Fi[3] Fc FL Fc FL Fc Fi Fc[2]} FC18{ m Fp} Fi[2]}}


 S3593C2 ::~S3593C2(){ note_dtor("S3593C2", this);}
void  S3593C2 ::v5(){vfunc_called(this, "_ZN7S3593C22v5Ev");}
void  S3593C2 ::v6(){vfunc_called(this, "_ZN7S3593C22v6Ev");}
void  S3593C2 ::v7(){vfunc_called(this, "_ZN7S3593C22v7Ev");}
S3593C2 ::S3593C2(){ note_ctor("S3593C2", this);} // tgen

static void Test_S3593C2()
{
  extern Class_Descriptor cd_S3593C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,71)];
    init_test(&cd_S3593C2, buf);
    S3593C2 *dp, &lv = *(dp=new (buf) S3593C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,280), "sizeof(S3593C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3593C2)");
    check_base_class_offset(lv, (S3593C3_nt*), 0, "S3593C2");
    check_base_class_offset(lv, (S3593C10_nt*), ABISELECT(48,32), "S3593C2");
    check_field_offset(lv, s3593c2f0, ABISELECT(88,60), "S3593C2.s3593c2f0");
    check_field_offset(lv, s3593c2f1, ABISELECT(104,68), "S3593C2.s3593c2f1");
    test_class_info(&lv, &cd_S3593C2);
    dp->~S3593C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3593C2(Test_S3593C2, "S3593C2", ABISELECT(368,280));

#else // __cplusplus

extern void _ZN7S3593C2C1Ev();
extern void _ZN7S3593C2D1Ev();
Name_Map name_map_S3593C2[] = {
  NSPAIR(_ZN7S3593C2C1Ev),
  NSPAIR(_ZN7S3593C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3593C3_nt;
extern VTBL_ENTRY _ZTI10S3593C3_nt[];
extern  VTBL_ENTRY _ZTV10S3593C3_nt[];
extern Class_Descriptor cd_S3593C10_nt;
extern VTBL_ENTRY _ZTI11S3593C10_nt[];
extern  VTBL_ENTRY _ZTV11S3593C10_nt[];
static Base_Class bases_S3593C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3593C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3593C10_nt,    ABISELECT(48,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3593C2[];
extern void _ZN7S3593C2D1Ev();
extern void _ZN7S3593C2D0Ev();
extern void _ZN7S3593C22v5Ev();
extern void _ZN7S3593C22v6Ev();
extern void _ZN7S3593C22v7Ev();
extern void ABISELECT(_ZThn48_N7S3593C2D1Ev,_ZThn32_N7S3593C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S3593C2D0Ev,_ZThn32_N7S3593C2D0Ev)();
extern void _ZN11S3593C10_nt2v2Ev();
extern void _ZN11S3593C10_nt2v3Ev();
extern void _ZN11S3593C10_nt2v4Ev();
static  VTBL_ENTRY vtc_S3593C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3593C2[0]),
  (VTBL_ENTRY)&_ZN7S3593C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3593C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3593C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3593C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3593C22v7Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S3593C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3593C2D1Ev,_ZThn32_N7S3593C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3593C2D0Ev,_ZThn32_N7S3593C2D0Ev),
  (VTBL_ENTRY)&_ZN11S3593C10_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S3593C10_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S3593C10_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI7S3593C2[];
extern  VTBL_ENTRY _ZTV7S3593C2[];
Class_Descriptor cd_S3593C2 = {  "S3593C2", // class name
  bases_S3593C2, 2,
  &(vtc_S3593C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,280), // object size
  NSPAIRA(_ZTI7S3593C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3593C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3593C1  : S3593C2 {
  void *s3593c1f0;
  virtual  ~S3593C1(); // _ZN7S3593C1D1Ev
  virtual void  v1(); // _ZN7S3593C12v1Ev
  S3593C1(); // tgen
};
//SIG(1 S3593C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC7{ m Fp Fi FC8{ m} FC5} Fc} BC9{ vd v2 v3 v4 FC10{ m Fp Fi FC11{ m}} Fi[2] Fc} vd v5 v6 v7 Fp[2] FC12{ m FC13{ m Fp[2]} Fp FC14{ m FC15{ m FL}} Fc FC16{ m Fi[2]} FC17{ m FC18{ m Fp Fi FC8} FL Fi FL FC18 FC18 FC18 FC18 FL[2] Fi[4] FL Fi[3] Fc FL Fc FL Fc Fi Fc[2]} FC19{ m Fp} Fi[2]}} vd v1 Fp}


 S3593C1 ::~S3593C1(){ note_dtor("S3593C1", this);}
void  S3593C1 ::v1(){vfunc_called(this, "_ZN7S3593C12v1Ev");}
S3593C1 ::S3593C1(){ note_ctor("S3593C1", this);} // tgen

static void Test_S3593C1()
{
  extern Class_Descriptor cd_S3593C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,72)];
    init_test(&cd_S3593C1, buf);
    S3593C1 *dp, &lv = *(dp=new (buf) S3593C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,284), "sizeof(S3593C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3593C1)");
    check_base_class_offset(lv, (S3593C3_nt*)(S3593C2*), 0, "S3593C1");
    check_base_class_offset(lv, (S3593C10_nt*)(S3593C2*), ABISELECT(48,32), "S3593C1");
    check_base_class_offset(lv, (S3593C2*), 0, "S3593C1");
    check_field_offset(lv, s3593c1f0, ABISELECT(368,280), "S3593C1.s3593c1f0");
    test_class_info(&lv, &cd_S3593C1);
    dp->~S3593C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3593C1(Test_S3593C1, "S3593C1", ABISELECT(376,284));

#else // __cplusplus

extern void _ZN7S3593C1C1Ev();
extern void _ZN7S3593C1D1Ev();
Name_Map name_map_S3593C1[] = {
  NSPAIR(_ZN7S3593C1C1Ev),
  NSPAIR(_ZN7S3593C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3593C3_nt;
extern VTBL_ENTRY _ZTI10S3593C3_nt[];
extern  VTBL_ENTRY _ZTV10S3593C3_nt[];
extern Class_Descriptor cd_S3593C10_nt;
extern VTBL_ENTRY _ZTI11S3593C10_nt[];
extern  VTBL_ENTRY _ZTV11S3593C10_nt[];
extern Class_Descriptor cd_S3593C2;
extern VTBL_ENTRY _ZTI7S3593C2[];
extern  VTBL_ENTRY _ZTV7S3593C2[];
static Base_Class bases_S3593C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3593C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3593C10_nt,    ABISELECT(48,32), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3593C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3593C1[];
extern void _ZN7S3593C1D1Ev();
extern void _ZN7S3593C1D0Ev();
extern void _ZN7S3593C22v5Ev();
extern void _ZN7S3593C22v6Ev();
extern void _ZN7S3593C22v7Ev();
extern void _ZN7S3593C12v1Ev();
extern void ABISELECT(_ZThn48_N7S3593C1D1Ev,_ZThn32_N7S3593C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S3593C1D0Ev,_ZThn32_N7S3593C1D0Ev)();
extern void _ZN11S3593C10_nt2v2Ev();
extern void _ZN11S3593C10_nt2v3Ev();
extern void _ZN11S3593C10_nt2v4Ev();
static  VTBL_ENTRY vtc_S3593C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3593C1[0]),
  (VTBL_ENTRY)&_ZN7S3593C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3593C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3593C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3593C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3593C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3593C12v1Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S3593C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3593C1D1Ev,_ZThn32_N7S3593C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3593C1D0Ev,_ZThn32_N7S3593C1D0Ev),
  (VTBL_ENTRY)&_ZN11S3593C10_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S3593C10_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S3593C10_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI7S3593C1[];
extern  VTBL_ENTRY _ZTV7S3593C1[];
Class_Descriptor cd_S3593C1 = {  "S3593C1", // class name
  bases_S3593C1, 3,
  &(vtc_S3593C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(376,284), // object size
  NSPAIRA(_ZTI7S3593C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3593C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3594C10  {
  ::S16113C5_nt s3594c10f0;
  int s3594c10f1[2];
  char s3594c10f2;
  virtual  ~S3594C10(); // _ZN8S3594C10D1Ev
  virtual void  v2(); // _ZN8S3594C102v2Ev
  virtual void  v3(); // _ZN8S3594C102v3Ev
  virtual void  v4(); // _ZN8S3594C102v4Ev
  S3594C10(); // tgen
};
//SIG(-1 S3594C10) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S3594C10 ::~S3594C10(){ note_dtor("S3594C10", this);}
void  S3594C10 ::v2(){vfunc_called(this, "_ZN8S3594C102v2Ev");}
void  S3594C10 ::v3(){vfunc_called(this, "_ZN8S3594C102v3Ev");}
void  S3594C10 ::v4(){vfunc_called(this, "_ZN8S3594C102v4Ev");}
S3594C10 ::S3594C10(){ note_ctor("S3594C10", this);} // tgen

static void Test_S3594C10()
{
  extern Class_Descriptor cd_S3594C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S3594C10, buf);
    S3594C10 *dp, &lv = *(dp=new (buf) S3594C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S3594C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3594C10)");
    check_field_offset(lv, s3594c10f0, ABISELECT(8,4), "S3594C10.s3594c10f0");
    check_field_offset(lv, s3594c10f1, ABISELECT(24,16), "S3594C10.s3594c10f1");
    check_field_offset(lv, s3594c10f2, ABISELECT(32,24), "S3594C10.s3594c10f2");
    test_class_info(&lv, &cd_S3594C10);
    dp->~S3594C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3594C10(Test_S3594C10, "S3594C10", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN8S3594C10C1Ev();
extern void _ZN8S3594C10D1Ev();
Name_Map name_map_S3594C10[] = {
  NSPAIR(_ZN8S3594C10C1Ev),
  NSPAIR(_ZN8S3594C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3594C10[];
extern void _ZN8S3594C10D1Ev();
extern void _ZN8S3594C10D0Ev();
extern void _ZN8S3594C102v2Ev();
extern void _ZN8S3594C102v3Ev();
extern void _ZN8S3594C102v4Ev();
static  VTBL_ENTRY vtc_S3594C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3594C10[0]),
  (VTBL_ENTRY)&_ZN8S3594C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3594C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3594C102v2Ev,
  (VTBL_ENTRY)&_ZN8S3594C102v3Ev,
  (VTBL_ENTRY)&_ZN8S3594C102v4Ev,
};
extern VTBL_ENTRY _ZTI8S3594C10[];
extern  VTBL_ENTRY _ZTV8S3594C10[];
Class_Descriptor cd_S3594C10 = {  "S3594C10", // class name
  0,0,//no base classes
  &(vtc_S3594C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI8S3594C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3594C10),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3594C2  : S3593C3_nt , S3594C10 {
  void *s3594c2f0[2];
  ::S3593C13_nt s3594c2f1;
  virtual  ~S3594C2(); // _ZN7S3594C2D1Ev
  virtual void  v5(); // _ZN7S3594C22v5Ev
  virtual void  v6(); // _ZN7S3594C22v6Ev
  virtual void  v7(); // _ZN7S3594C22v7Ev
  S3594C2(); // tgen
};
//SIG(-1 S3594C2) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC6{ m Fp Fi FC7{ m} FC4} Fc} BC8{ vd v4 v5 v6 FC9{ m Fp Fi FC10{ m}} Fi[2] Fc} vd v1 v2 v3 Fp[2] FC11{ m FC12{ m Fp[2]} Fp FC13{ m FC14{ m FL}} Fc FC15{ m Fi[2]} FC16{ m FC17{ m Fp Fi FC7} FL Fi FL FC17 FC17 FC17 FC17 FL[2] Fi[4] FL Fi[3] Fc FL Fc FL Fc Fi Fc[2]} FC18{ m Fp} Fi[2]}}


 S3594C2 ::~S3594C2(){ note_dtor("S3594C2", this);}
void  S3594C2 ::v5(){vfunc_called(this, "_ZN7S3594C22v5Ev");}
void  S3594C2 ::v6(){vfunc_called(this, "_ZN7S3594C22v6Ev");}
void  S3594C2 ::v7(){vfunc_called(this, "_ZN7S3594C22v7Ev");}
S3594C2 ::S3594C2(){ note_ctor("S3594C2", this);} // tgen

static void Test_S3594C2()
{
  extern Class_Descriptor cd_S3594C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,71)];
    init_test(&cd_S3594C2, buf);
    S3594C2 *dp, &lv = *(dp=new (buf) S3594C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,280), "sizeof(S3594C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3594C2)");
    check_base_class_offset(lv, (S3593C3_nt*), 0, "S3594C2");
    check_base_class_offset(lv, (S3594C10*), ABISELECT(48,32), "S3594C2");
    check_field_offset(lv, s3594c2f0, ABISELECT(88,60), "S3594C2.s3594c2f0");
    check_field_offset(lv, s3594c2f1, ABISELECT(104,68), "S3594C2.s3594c2f1");
    test_class_info(&lv, &cd_S3594C2);
    dp->~S3594C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3594C2(Test_S3594C2, "S3594C2", ABISELECT(368,280));

#else // __cplusplus

extern void _ZN7S3594C2C1Ev();
extern void _ZN7S3594C2D1Ev();
Name_Map name_map_S3594C2[] = {
  NSPAIR(_ZN7S3594C2C1Ev),
  NSPAIR(_ZN7S3594C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3593C3_nt;
extern VTBL_ENTRY _ZTI10S3593C3_nt[];
extern  VTBL_ENTRY _ZTV10S3593C3_nt[];
extern Class_Descriptor cd_S3594C10;
extern VTBL_ENTRY _ZTI8S3594C10[];
extern  VTBL_ENTRY _ZTV8S3594C10[];
static Base_Class bases_S3594C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3593C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3594C10,    ABISELECT(48,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3594C2[];
extern void _ZN7S3594C2D1Ev();
extern void _ZN7S3594C2D0Ev();
extern void _ZN7S3594C22v5Ev();
extern void _ZN7S3594C22v6Ev();
extern void _ZN7S3594C22v7Ev();
extern void ABISELECT(_ZThn48_N7S3594C2D1Ev,_ZThn32_N7S3594C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S3594C2D0Ev,_ZThn32_N7S3594C2D0Ev)();
extern void _ZN8S3594C102v2Ev();
extern void _ZN8S3594C102v3Ev();
extern void _ZN8S3594C102v4Ev();
static  VTBL_ENTRY vtc_S3594C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3594C2[0]),
  (VTBL_ENTRY)&_ZN7S3594C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3594C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3594C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3594C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3594C22v7Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S3594C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3594C2D1Ev,_ZThn32_N7S3594C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3594C2D0Ev,_ZThn32_N7S3594C2D0Ev),
  (VTBL_ENTRY)&_ZN8S3594C102v2Ev,
  (VTBL_ENTRY)&_ZN8S3594C102v3Ev,
  (VTBL_ENTRY)&_ZN8S3594C102v4Ev,
};
extern VTBL_ENTRY _ZTI7S3594C2[];
extern  VTBL_ENTRY _ZTV7S3594C2[];
Class_Descriptor cd_S3594C2 = {  "S3594C2", // class name
  bases_S3594C2, 2,
  &(vtc_S3594C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,280), // object size
  NSPAIRA(_ZTI7S3594C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3594C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3594C1  : S3594C2 {
  virtual  ~S3594C1(); // _ZN7S3594C1D1Ev
  virtual void  v1(); // _ZN7S3594C12v1Ev
  S3594C1(); // tgen
};
//SIG(1 S3594C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC7{ m Fp Fi FC8{ m} FC5} Fc} BC9{ vd v2 v3 v4 FC10{ m Fp Fi FC11{ m}} Fi[2] Fc} vd v5 v6 v7 Fp[2] FC12{ m FC13{ m Fp[2]} Fp FC14{ m FC15{ m FL}} Fc FC16{ m Fi[2]} FC17{ m FC18{ m Fp Fi FC8} FL Fi FL FC18 FC18 FC18 FC18 FL[2] Fi[4] FL Fi[3] Fc FL Fc FL Fc Fi Fc[2]} FC19{ m Fp} Fi[2]}} vd v1}


 S3594C1 ::~S3594C1(){ note_dtor("S3594C1", this);}
void  S3594C1 ::v1(){vfunc_called(this, "_ZN7S3594C12v1Ev");}
S3594C1 ::S3594C1(){ note_ctor("S3594C1", this);} // tgen

static void Test_S3594C1()
{
  extern Class_Descriptor cd_S3594C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,71)];
    init_test(&cd_S3594C1, buf);
    S3594C1 *dp, &lv = *(dp=new (buf) S3594C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,280), "sizeof(S3594C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3594C1)");
    check_base_class_offset(lv, (S3593C3_nt*)(S3594C2*), 0, "S3594C1");
    check_base_class_offset(lv, (S3594C10*)(S3594C2*), ABISELECT(48,32), "S3594C1");
    check_base_class_offset(lv, (S3594C2*), 0, "S3594C1");
    test_class_info(&lv, &cd_S3594C1);
    dp->~S3594C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3594C1(Test_S3594C1, "S3594C1", ABISELECT(368,280));

#else // __cplusplus

extern void _ZN7S3594C1C1Ev();
extern void _ZN7S3594C1D1Ev();
Name_Map name_map_S3594C1[] = {
  NSPAIR(_ZN7S3594C1C1Ev),
  NSPAIR(_ZN7S3594C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3593C3_nt;
extern VTBL_ENTRY _ZTI10S3593C3_nt[];
extern  VTBL_ENTRY _ZTV10S3593C3_nt[];
extern Class_Descriptor cd_S3594C10;
extern VTBL_ENTRY _ZTI8S3594C10[];
extern  VTBL_ENTRY _ZTV8S3594C10[];
extern Class_Descriptor cd_S3594C2;
extern VTBL_ENTRY _ZTI7S3594C2[];
extern  VTBL_ENTRY _ZTV7S3594C2[];
static Base_Class bases_S3594C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3593C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3594C10,    ABISELECT(48,32), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3594C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3594C1[];
extern void _ZN7S3594C1D1Ev();
extern void _ZN7S3594C1D0Ev();
extern void _ZN7S3594C22v5Ev();
extern void _ZN7S3594C22v6Ev();
extern void _ZN7S3594C22v7Ev();
extern void _ZN7S3594C12v1Ev();
extern void ABISELECT(_ZThn48_N7S3594C1D1Ev,_ZThn32_N7S3594C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S3594C1D0Ev,_ZThn32_N7S3594C1D0Ev)();
extern void _ZN8S3594C102v2Ev();
extern void _ZN8S3594C102v3Ev();
extern void _ZN8S3594C102v4Ev();
static  VTBL_ENTRY vtc_S3594C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3594C1[0]),
  (VTBL_ENTRY)&_ZN7S3594C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3594C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3594C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3594C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3594C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3594C12v1Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S3594C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3594C1D1Ev,_ZThn32_N7S3594C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3594C1D0Ev,_ZThn32_N7S3594C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3594C102v2Ev,
  (VTBL_ENTRY)&_ZN8S3594C102v3Ev,
  (VTBL_ENTRY)&_ZN8S3594C102v4Ev,
};
extern VTBL_ENTRY _ZTI7S3594C1[];
extern  VTBL_ENTRY _ZTV7S3594C1[];
Class_Descriptor cd_S3594C1 = {  "S3594C1", // class name
  bases_S3594C1, 3,
  &(vtc_S3594C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,280), // object size
  NSPAIRA(_ZTI7S3594C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3594C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20802C3  {
  long double s20802c3f0;
  void *s20802c3f1[3];
  __tsi64 s20802c3f2;
  char s20802c3f3;
  long double s20802c3f4;
  int s20802c3f5;
  virtual void  v2(); // _ZN8S20802C32v2Ev
  ~S20802C3(); // tgen
  S20802C3(); // tgen
};
//SIG(-1 S20802C3) C1{ v1 FD Fp[3] FL Fc FD Fi}


void  S20802C3 ::v2(){vfunc_called(this, "_ZN8S20802C32v2Ev");}
S20802C3 ::~S20802C3(){ note_dtor("S20802C3", this);} // tgen
S20802C3 ::S20802C3(){ note_ctor("S20802C3", this);} // tgen

static void Test_S20802C3()
{
  extern Class_Descriptor cd_S20802C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,15)];
    init_test(&cd_S20802C3, buf);
    S20802C3 *dp, &lv = *(dp=new (buf) S20802C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S20802C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20802C3)");
    check_field_offset(lv, s20802c3f0, ABISELECT(16,4), "S20802C3.s20802c3f0");
    check_field_offset(lv, s20802c3f1, ABISELECT(32,16), "S20802C3.s20802c3f1");
    check_field_offset(lv, s20802c3f2, ABISELECT(56,28), "S20802C3.s20802c3f2");
    check_field_offset(lv, s20802c3f3, ABISELECT(64,36), "S20802C3.s20802c3f3");
    check_field_offset(lv, s20802c3f4, ABISELECT(80,40), "S20802C3.s20802c3f4");
    check_field_offset(lv, s20802c3f5, ABISELECT(96,52), "S20802C3.s20802c3f5");
    test_class_info(&lv, &cd_S20802C3);
    dp->~S20802C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20802C3(Test_S20802C3, "S20802C3", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S20802C3C1Ev();
extern void _ZN8S20802C3D1Ev();
Name_Map name_map_S20802C3[] = {
  NSPAIR(_ZN8S20802C3C1Ev),
  NSPAIR(_ZN8S20802C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20802C3[];
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY vtc_S20802C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C3[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
Class_Descriptor cd_S20802C3 = {  "S20802C3", // class name
  0,0,//no base classes
  &(vtc_S20802C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S20802C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20802C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20802C5  : S20802C3 {
  ~S20802C5(); // tgen
  S20802C5(); // tgen
};
//SIG(-1 S20802C5) C1{ BC2{ v1 FD Fp[3] FL Fc FD Fi}}


S20802C5 ::~S20802C5(){ note_dtor("S20802C5", this);} // tgen
S20802C5 ::S20802C5(){ note_ctor("S20802C5", this);} // tgen

static void Test_S20802C5()
{
  extern Class_Descriptor cd_S20802C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,15)];
    init_test(&cd_S20802C5, buf);
    S20802C5 *dp, &lv = *(dp=new (buf) S20802C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S20802C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20802C5)");
    check_base_class_offset(lv, (S20802C3*), 0, "S20802C5");
    test_class_info(&lv, &cd_S20802C5);
    dp->~S20802C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20802C5(Test_S20802C5, "S20802C5", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S20802C5C1Ev();
extern void _ZN8S20802C5D1Ev();
Name_Map name_map_S20802C5[] = {
  NSPAIR(_ZN8S20802C5C1Ev),
  NSPAIR(_ZN8S20802C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
static Base_Class bases_S20802C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20802C3,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20802C5[];
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY vtc_S20802C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C5[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
Class_Descriptor cd_S20802C5 = {  "S20802C5", // class name
  bases_S20802C5, 1,
  &(vtc_S20802C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S20802C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20802C5),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20802C4  : virtual S20802C3 , virtual S20802C5 {
  int s20802c4f0;
  int s20802c4f1:5;
  long double s20802c4f2;
  ::S20802C5 s20802c4f3;
  ::S20802C3 s20802c4f4;
  virtual void  v3(); // _ZN8S20802C42v3Ev
  ~S20802C4(); // tgen
  S20802C4(); // tgen
};
//SIG(-1 S20802C4) C1{ VBC2{ v2 FD Fp[3] FL Fc FD Fi} VBC3{ BC2} v1 Fi Fi:5 FD FC3 FC2}


void  S20802C4 ::v3(){vfunc_called(this, "_ZN8S20802C42v3Ev");}
S20802C4 ::~S20802C4(){ note_dtor("S20802C4", this);} // tgen
S20802C4 ::S20802C4(){ note_ctor("S20802C4", this);} // tgen

static void Test_S20802C4()
{
  extern Class_Descriptor cd_S20802C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(31,63)];
    init_test(&cd_S20802C4, buf);
    S20802C4 *dp, &lv = *(dp=new (buf) S20802C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,248), "sizeof(S20802C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20802C4)");
    /*is_ambiguous_... S20802C4::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*), ABISELECT(256,136), "S20802C4");
    check_base_class_offset(lv, (S20802C3*)(S20802C5*), ABISELECT(368,192), "S20802C4");
    check_base_class_offset(lv, (S20802C5*), ABISELECT(368,192), "S20802C4");
    check_field_offset(lv, s20802c4f0, ABISELECT(8,4), "S20802C4.s20802c4f0");
    set_bf_and_test(lv, s20802c4f1, ABISELECT(12,8), 0, 5, 1, "S20802C4");
    set_bf_and_test(lv, s20802c4f1, ABISELECT(12,8), 0, 5, hide_sll(1LL<<4), "S20802C4");
    check_field_offset(lv, s20802c4f2, ABISELECT(16,12), "S20802C4.s20802c4f2");
    check_field_offset(lv, s20802c4f3, ABISELECT(32,24), "S20802C4.s20802c4f3");
    check_field_offset(lv, s20802c4f4, ABISELECT(144,80), "S20802C4.s20802c4f4");
    test_class_info(&lv, &cd_S20802C4);
    dp->~S20802C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20802C4(Test_S20802C4, "S20802C4", ABISELECT(480,248));

#else // __cplusplus

extern void _ZN8S20802C4C1Ev();
extern void _ZN8S20802C4D1Ev();
Name_Map name_map_S20802C4[] = {
  NSPAIR(_ZN8S20802C4C1Ev),
  NSPAIR(_ZN8S20802C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
static Base_Class bases_S20802C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20802C3,    ABISELECT(256,136), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20802C3,    ABISELECT(368,192), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(368,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20802C4[];
extern void _ZN8S20802C42v3Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY vtc_S20802C4[] = {
  ABISELECT(368,192),
  ABISELECT(256,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
  0,
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  0,
  ABISELECT(-368,-192),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S20802C4[];
static  VTT_ENTRY vtt_S20802C4[] = {
  {&(_ZTV8S20802C4[4]),  4,13},
  {&(_ZTV8S20802C4[8]),  8,13},
  {&(_ZTV8S20802C4[12]),  12,13},
};
extern VTBL_ENTRY _ZTI8S20802C4[];
extern  VTBL_ENTRY _ZTV8S20802C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C4[];
Class_Descriptor cd_S20802C4 = {  "S20802C4", // class name
  bases_S20802C4, 3,
  &(vtc_S20802C4[0]), // expected_vtbl_contents
  &(vtt_S20802C4[0]), // expected_vtt_contents
  ABISELECT(480,248), // object size
  NSPAIRA(_ZTI8S20802C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20802C4),13, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20802C4),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20802C6  : S20802C5 , S20802C3 {
  long double s20802c6f0;
  virtual void  v4(); // _ZN8S20802C62v4Ev
  ~S20802C6(); // tgen
  S20802C6(); // tgen
};
//SIG(-1 S20802C6) C1{ BC2{ BC3{ v2 FD Fp[3] FL Fc FD Fi}} BC3 v1 FD}


void  S20802C6 ::v4(){vfunc_called(this, "_ZN8S20802C62v4Ev");}
S20802C6 ::~S20802C6(){ note_dtor("S20802C6", this);} // tgen
S20802C6 ::S20802C6(){ note_ctor("S20802C6", this);} // tgen

static void Test_S20802C6()
{
  extern Class_Descriptor cd_S20802C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,32)];
    init_test(&cd_S20802C6, buf);
    S20802C6 *dp, &lv = *(dp=new (buf) S20802C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,124), "sizeof(S20802C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20802C6)");
    check_base_class_offset(lv, (S20802C3*)(S20802C5*), 0, "S20802C6");
    check_base_class_offset(lv, (S20802C5*), 0, "S20802C6");
    /*is_ambiguous_... S20802C6::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*), ABISELECT(112,56), "S20802C6");
    check_field_offset(lv, s20802c6f0, ABISELECT(224,112), "S20802C6.s20802c6f0");
    test_class_info(&lv, &cd_S20802C6);
    dp->~S20802C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20802C6(Test_S20802C6, "S20802C6", ABISELECT(240,124));

#else // __cplusplus

extern void _ZN8S20802C6C1Ev();
extern void _ZN8S20802C6D1Ev();
Name_Map name_map_S20802C6[] = {
  NSPAIR(_ZN8S20802C6C1Ev),
  NSPAIR(_ZN8S20802C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
static Base_Class bases_S20802C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20802C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20802C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20802C3,    ABISELECT(112,56), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20802C6[];
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY vtc_S20802C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C6[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20802C6[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern VTBL_ENTRY _ZTI8S20802C6[];
extern  VTBL_ENTRY _ZTV8S20802C6[];
Class_Descriptor cd_S20802C6 = {  "S20802C6", // class name
  bases_S20802C6, 3,
  &(vtc_S20802C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,124), // object size
  NSPAIRA(_ZTI8S20802C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20802C6),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20802C2  : virtual S20802C3 , virtual S20802C4 , S20802C5 , S20802C6 {
  void *s20802c2f0;
  ~S20802C2(); // tgen
  S20802C2(); // tgen
};
//SIG(-1 S20802C2) C1{ VBC2{ v1 FD Fp[3] FL Fc FD Fi} VBC3{ VBC2 VBC4{ BC2} v2 Fi Fi:5 FD FC4 FC2} BC4 BC5{ BC4 BC2 v3 FD} Fp}


S20802C2 ::~S20802C2(){ note_dtor("S20802C2", this);} // tgen
S20802C2 ::S20802C2(){ note_ctor("S20802C2", this);} // tgen

static void Test_S20802C2()
{
  extern Class_Descriptor cd_S20802C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,109)];
    init_test(&cd_S20802C2, buf);
    S20802C2 *dp, &lv = *(dp=new (buf) S20802C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,432), "sizeof(S20802C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20802C2)");
    /*is_ambiguous_... S20802C2::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*), ABISELECT(368,184), "S20802C2");
    /*is_ambiguous_... S20802C4::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C4*), ABISELECT(368,184), "S20802C2");
    /*is_ambiguous_... S20802C2::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*), ABISELECT(736,376), "S20802C2");
    check_base_class_offset(lv, (S20802C5*)(S20802C4*), ABISELECT(736,376), "S20802C2");
    check_base_class_offset(lv, (S20802C4*), ABISELECT(480,240), "S20802C2");
    /*is_ambiguous_... S20802C2::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*), 0, "S20802C2");
    /*is_ambiguous_... S20802C2::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C5*), 0, "S20802C2");
    check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C6*), ABISELECT(112,56), "S20802C2");
    check_base_class_offset(lv, (S20802C5*)(S20802C6*), ABISELECT(112,56), "S20802C2");
    /*is_ambiguous_... S20802C6::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C6*), ABISELECT(224,112), "S20802C2");
    check_base_class_offset(lv, (S20802C6*), ABISELECT(112,56), "S20802C2");
    check_field_offset(lv, s20802c2f0, ABISELECT(352,180), "S20802C2.s20802c2f0");
    test_class_info(&lv, &cd_S20802C2);
    dp->~S20802C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20802C2(Test_S20802C2, "S20802C2", ABISELECT(848,432));

#else // __cplusplus

extern void _ZN8S20802C2C1Ev();
extern void _ZN8S20802C2D1Ev();
Name_Map name_map_S20802C2[] = {
  NSPAIR(_ZN8S20802C2C1Ev),
  NSPAIR(_ZN8S20802C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C4;
extern VTBL_ENTRY _ZTI8S20802C4[];
extern  VTBL_ENTRY _ZTV8S20802C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C4[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C6;
extern VTBL_ENTRY _ZTI8S20802C6[];
extern  VTBL_ENTRY _ZTV8S20802C6[];
static Base_Class bases_S20802C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20802C3,    ABISELECT(368,184), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20802C3,    ABISELECT(736,376), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(736,376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20802C4,    ABISELECT(480,240), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20802C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20802C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20802C3,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(224,112), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20802C6,    ABISELECT(112,56), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20802C2[];
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C42v3Ev();
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY vtc_S20802C2[] = {
  ABISELECT(736,376),
  ABISELECT(480,240),
  ABISELECT(368,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  0,
  ABISELECT(-368,-184),
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(-480,-240),
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
  0,
  ABISELECT(-736,-376),
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S20802C2[];
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__8S20802C2[] = {
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__8S20802C4__8S20802C2[] = {
  0,
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A1__8S20802C4__8S20802C2[] = {
  0,
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
static  VTT_ENTRY vtt_S20802C2[] = {
  {&(_ZTV8S20802C2[5]),  5,27},
  {&(_ZTV8S20802C2[16]),  16,27},
  {&(_ZTV8S20802C2[22]),  22,27},
  {&(_ZTV8S20802C2[26]),  26,27},
  {&(_tg__ZTV8S20802C4__8S20802C2[4]),  4,5},
  {&(_tg__ZTV8S20802C3__8S20802C4__8S20802C2[3]),  3,4},
  {&(_tg__ZTV8S20802C38S20802C5__A1__8S20802C4__8S20802C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20802C2[];
extern  VTBL_ENTRY _ZTV8S20802C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C2[];
Class_Descriptor cd_S20802C2 = {  "S20802C2", // class name
  bases_S20802C2, 10,
  &(vtc_S20802C2[0]), // expected_vtbl_contents
  &(vtt_S20802C2[0]), // expected_vtt_contents
  ABISELECT(848,432), // object size
  NSPAIRA(_ZTI8S20802C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20802C2),27, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20802C2),7, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20802C7  {
  int s20802c7f0;
  __tsi64 s20802c7f1;
  virtual void  v5(); // _ZN8S20802C72v5Ev
  ~S20802C7(); // tgen
  S20802C7(); // tgen
};
//SIG(-1 S20802C7) C1{ v1 Fi FL}


void  S20802C7 ::v5(){vfunc_called(this, "_ZN8S20802C72v5Ev");}
S20802C7 ::~S20802C7(){ note_dtor("S20802C7", this);} // tgen
S20802C7 ::S20802C7(){ note_ctor("S20802C7", this);} // tgen

static void Test_S20802C7()
{
  extern Class_Descriptor cd_S20802C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20802C7, buf);
    S20802C7 *dp, &lv = *(dp=new (buf) S20802C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20802C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20802C7)");
    check_field_offset(lv, s20802c7f0, ABISELECT(8,4), "S20802C7.s20802c7f0");
    check_field_offset(lv, s20802c7f1, ABISELECT(16,8), "S20802C7.s20802c7f1");
    test_class_info(&lv, &cd_S20802C7);
    dp->~S20802C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20802C7(Test_S20802C7, "S20802C7", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20802C7C1Ev();
extern void _ZN8S20802C7D1Ev();
Name_Map name_map_S20802C7[] = {
  NSPAIR(_ZN8S20802C7C1Ev),
  NSPAIR(_ZN8S20802C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20802C7[];
extern void _ZN8S20802C72v5Ev();
static  VTBL_ENTRY vtc_S20802C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C7[0]),
  (VTBL_ENTRY)&_ZN8S20802C72v5Ev,
};
extern VTBL_ENTRY _ZTI8S20802C7[];
extern  VTBL_ENTRY _ZTV8S20802C7[];
Class_Descriptor cd_S20802C7 = {  "S20802C7", // class name
  0,0,//no base classes
  &(vtc_S20802C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20802C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20802C7),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20802C9  : S20802C6 , S20802C3 , virtual S20802C5 , S20802C4 , virtual S20802C2 {
  ::S20802C5 s20802c9f0;
  ~S20802C9(); // tgen
  S20802C9(); // tgen
};
//SIG(-1 S20802C9) C1{ BC2{ BC3{ BC4{ v1 FD Fp[3] FL Fc FD Fi}} BC4 v2 FD} BC4 VBC3 BC5{ VBC4 VBC3 v3 Fi Fi:5 FD FC3 FC4} VBC6{ VBC4 VBC5 BC3 BC2 Fp} FC3}


S20802C9 ::~S20802C9(){ note_dtor("S20802C9", this);} // tgen
S20802C9 ::S20802C9(){ note_ctor("S20802C9", this);} // tgen

static void Test_S20802C9()
{
  extern Class_Descriptor cd_S20802C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(99,202)];
    init_test(&cd_S20802C9, buf);
    S20802C9 *dp, &lv = *(dp=new (buf) S20802C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1568,804), "sizeof(S20802C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20802C9)");
    /*is_ambiguous_... S20802C9::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C6*), 0, "S20802C9");
    /*is_ambiguous_... S20802C9::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C6*), 0, "S20802C9");
    /*is_ambiguous_... S20802C9::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C6*), ABISELECT(112,56), "S20802C9");
    /*is_ambiguous_... S20802C9::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C6*), 0, "S20802C9");
    /*is_ambiguous_... S20802C9::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*), ABISELECT(240,124), "S20802C9");
    /*is_ambiguous_... S20802C9::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*), ABISELECT(720,372), "S20802C9");
    /*is_ambiguous_... S20802C9::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C5*), ABISELECT(720,372), "S20802C9");
    /*is_ambiguous_... S20802C9::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C4*), ABISELECT(720,372), "S20802C9");
    /*is_ambiguous_... S20802C9::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C4*), ABISELECT(720,372), "S20802C9");
    /*is_ambiguous_... S20802C9::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C4*), ABISELECT(832,428), "S20802C9");
    /*is_ambiguous_... S20802C2::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C2*), ABISELECT(832,428), "S20802C9");
    /*is_ambiguous_... S20802C9::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C4*), ABISELECT(832,428), "S20802C9");
    /*is_ambiguous_... S20802C9::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C4*), ABISELECT(352,180), "S20802C9");
    check_base_class_offset(lv, (S20802C4*)(S20802C2*), ABISELECT(1312,668), "S20802C9");
    /*is_ambiguous_... S20802C2::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C2*), ABISELECT(944,484), "S20802C9");
    /*is_ambiguous_... S20802C2::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C2*), ABISELECT(944,484), "S20802C9");
    check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C6*)(S20802C2*), ABISELECT(1056,540), "S20802C9");
    check_base_class_offset(lv, (S20802C5*)(S20802C6*)(S20802C2*), ABISELECT(1056,540), "S20802C9");
    /*is_ambiguous_... S20802C6::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C6*)(S20802C2*), ABISELECT(1168,596), "S20802C9");
    check_base_class_offset(lv, (S20802C6*)(S20802C2*), ABISELECT(1056,540), "S20802C9");
    check_base_class_offset(lv, (S20802C2*), ABISELECT(944,484), "S20802C9");
    check_field_offset(lv, s20802c9f0, ABISELECT(608,316), "S20802C9.s20802c9f0");
    test_class_info(&lv, &cd_S20802C9);
    dp->~S20802C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20802C9(Test_S20802C9, "S20802C9", ABISELECT(1568,804));

#else // __cplusplus

extern void _ZN8S20802C9C1Ev();
extern void _ZN8S20802C9D1Ev();
Name_Map name_map_S20802C9[] = {
  NSPAIR(_ZN8S20802C9C1Ev),
  NSPAIR(_ZN8S20802C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C6;
extern VTBL_ENTRY _ZTI8S20802C6[];
extern  VTBL_ENTRY _ZTV8S20802C6[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C4;
extern VTBL_ENTRY _ZTI8S20802C4[];
extern  VTBL_ENTRY _ZTV8S20802C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C4[];
extern Class_Descriptor cd_S20802C4;
extern VTBL_ENTRY _ZTI8S20802C4[];
extern  VTBL_ENTRY _ZTV8S20802C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C4[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C6;
extern VTBL_ENTRY _ZTI8S20802C6[];
extern  VTBL_ENTRY _ZTV8S20802C6[];
extern Class_Descriptor cd_S20802C2;
extern VTBL_ENTRY _ZTI8S20802C2[];
extern  VTBL_ENTRY _ZTV8S20802C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C2[];
static Base_Class bases_S20802C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20802C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20802C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(112,56), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20802C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20802C3,    ABISELECT(240,124), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20802C3,    ABISELECT(720,372), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(720,372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20802C3,    ABISELECT(832,428), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20802C4,    ABISELECT(352,180), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20802C4,    ABISELECT(1312,668), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20802C3,    ABISELECT(944,484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(944,484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(1056,540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(1056,540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(1168,596), //bcp->offset
    39, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20802C6,    ABISELECT(1056,540), //bcp->offset
    35, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20802C2,    ABISELECT(944,484), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20802C9[];
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C42v3Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY vtc_S20802C9[] = {
  ABISELECT(1312,668),
  ABISELECT(944,484),
  ABISELECT(832,428),
  ABISELECT(720,372),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(368,192),
  ABISELECT(480,248),
  ABISELECT(-352,-180),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
  0,
  ABISELECT(-720,-372),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  0,
  ABISELECT(-832,-428),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(112,56),
  0,
  ABISELECT(-224,-112),
  ABISELECT(368,184),
  ABISELECT(-112,-56),
  ABISELECT(-944,-484),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(-1056,-540),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
  ABISELECT(-1168,-596),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  0,
  ABISELECT(-592,-296),
  ABISELECT(-480,-240),
  ABISELECT(-1312,-668),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20802C9[];
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__A__8S20802C9[] = {
  ABISELECT(368,192),
  ABISELECT(480,248),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__8S20802C4__A__8S20802C9[] = {
  0,
  ABISELECT(-480,-248),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A1__8S20802C4__A__8S20802C9[] = {
  0,
  ABISELECT(-368,-192),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C2__8S20802C9[] = {
  ABISELECT(-224,-112),
  ABISELECT(368,184),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__8S20802C2__8S20802C9[] = {
  0,
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__8S20802C2__8S20802C9[] = {
  0,
  ABISELECT(-592,-296),
  ABISELECT(-480,-240),
  ABISELECT(-368,-184),
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A1__8S20802C2__8S20802C9[] = {
  0,
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__A1__8S20802C9[] = {
  ABISELECT(-592,-296),
  ABISELECT(-480,-240),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__8S20802C4__A1__8S20802C9[] = {
  0,
  ABISELECT(480,240),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A1__8S20802C4__A1__8S20802C9[] = {
  0,
  ABISELECT(592,296),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
static  VTT_ENTRY vtt_S20802C9[] = {
  {&(_ZTV8S20802C9[6]),  6,48},
  {&(_tg__ZTV8S20802C4__A__8S20802C9[4]),  4,5},
  {&(_tg__ZTV8S20802C3__8S20802C4__A__8S20802C9[3]),  3,4},
  {&(_tg__ZTV8S20802C38S20802C5__A1__8S20802C4__A__8S20802C9[3]),  3,4},
  {&(_ZTV8S20802C9[22]),  22,48},
  {&(_ZTV8S20802C9[18]),  18,48},
  {&(_ZTV8S20802C9[26]),  26,48},
  {&(_ZTV8S20802C9[34]),  34,48},
  {&(_ZTV8S20802C9[47]),  47,48},
  {&(_ZTV8S20802C9[37]),  37,48},
  {&(_ZTV8S20802C9[41]),  41,48},
  {&(_tg__ZTV8S20802C2__8S20802C9[5]),  5,6},
  {&(_tg__ZTV8S20802C3__8S20802C2__8S20802C9[3]),  3,4},
  {&(_tg__ZTV8S20802C4__8S20802C2__8S20802C9[5]),  5,6},
  {&(_tg__ZTV8S20802C38S20802C5__A1__8S20802C2__8S20802C9[3]),  3,4},
  {&(_tg__ZTV8S20802C4__A1__8S20802C9[4]),  4,5},
  {&(_tg__ZTV8S20802C3__8S20802C4__A1__8S20802C9[3]),  3,4},
  {&(_tg__ZTV8S20802C38S20802C5__A1__8S20802C4__A1__8S20802C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20802C9[];
extern  VTBL_ENTRY _ZTV8S20802C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C9[];
Class_Descriptor cd_S20802C9 = {  "S20802C9", // class name
  bases_S20802C9, 17,
  &(vtc_S20802C9[0]), // expected_vtbl_contents
  &(vtt_S20802C9[0]), // expected_vtt_contents
  ABISELECT(1568,804), // object size
  NSPAIRA(_ZTI8S20802C9),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20802C9),48, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20802C9),18, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20802C10  : virtual S20802C2 , S20802C3 , S20802C4 , S20802C5 {
  int s20802c10f0;
  void *s20802c10f1;
  ::S20802C9 s20802c10f2;
  void *s20802c10f3;
  short s20802c10f4:4;
  unsigned char s20802c10f5:1;
  long double s20802c10f6[4];
  virtual void  v6(); // _ZN9S20802C102v6Ev
  virtual void  v7(); // _ZN9S20802C102v7Ev
  ~S20802C10(); // tgen
  S20802C10(); // tgen
};
//SIG(-1 S20802C10) C1{ VBC2{ VBC3{ v3 FD Fp[3] FL Fc FD Fi} VBC4{ VBC3 VBC5{ BC3} v4 Fi Fi:5 FD FC5 FC3} BC5 BC6{ BC5 BC3 v5 FD} Fp} BC3 BC4 BC5 v1 v2 Fi Fp FC7{ BC6 BC3 VBC5 BC4 VBC2 FC5} Fp Fs:4 Fc:1 FD[4]}


void  S20802C10 ::v6(){vfunc_called(this, "_ZN9S20802C102v6Ev");}
void  S20802C10 ::v7(){vfunc_called(this, "_ZN9S20802C102v7Ev");}
S20802C10 ::~S20802C10(){ note_dtor("S20802C10", this);} // tgen
S20802C10 ::S20802C10(){ note_ctor("S20802C10", this);} // tgen

static void Test_S20802C10()
{
  extern Class_Descriptor cd_S20802C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(187,388)];
    init_test(&cd_S20802C10, buf);
    S20802C10 *dp, &lv = *(dp=new (buf) S20802C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2976,1548), "sizeof(S20802C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20802C10)");
    /*is_ambiguous_... S20802C2::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C2*), ABISELECT(2496,1300), "S20802C10");
    /*is_ambiguous_... S20802C10::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C4*), ABISELECT(2496,1300), "S20802C10");
    /*is_ambiguous_... S20802C10::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C4*), ABISELECT(2496,1300), "S20802C10");
    /*is_ambiguous_... S20802C10::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*), ABISELECT(2864,1492), "S20802C10");
    /*is_ambiguous_... S20802C10::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C4*), ABISELECT(2864,1492), "S20802C10");
    /*is_ambiguous_... S20802C10::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C4*), ABISELECT(2864,1492), "S20802C10");
    check_base_class_offset(lv, (S20802C4*)(S20802C2*), ABISELECT(2608,1356), "S20802C10");
    /*is_ambiguous_... S20802C2::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C2*), ABISELECT(2128,1116), "S20802C10");
    /*is_ambiguous_... S20802C2::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C2*), ABISELECT(2128,1116), "S20802C10");
    check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C6*)(S20802C2*), ABISELECT(2240,1172), "S20802C10");
    check_base_class_offset(lv, (S20802C5*)(S20802C6*)(S20802C2*), ABISELECT(2240,1172), "S20802C10");
    /*is_ambiguous_... S20802C6::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C6*)(S20802C2*), ABISELECT(2352,1228), "S20802C10");
    check_base_class_offset(lv, (S20802C6*)(S20802C2*), ABISELECT(2240,1172), "S20802C10");
    check_base_class_offset(lv, (S20802C2*), ABISELECT(2128,1116), "S20802C10");
    /*is_ambiguous_... S20802C10::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*), 0, "S20802C10");
    /*is_ambiguous_... S20802C10::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C4*), ABISELECT(112,56), "S20802C10");
    /*is_ambiguous_... S20802C10::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*), ABISELECT(368,192), "S20802C10");
    /*is_ambiguous_... S20802C10::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C5*), ABISELECT(368,192), "S20802C10");
    check_field_offset(lv, s20802c10f0, ABISELECT(468,248), "S20802C10.s20802c10f0");
    check_field_offset(lv, s20802c10f1, ABISELECT(472,252), "S20802C10.s20802c10f1");
    check_field_offset(lv, s20802c10f2, ABISELECT(480,256), "S20802C10.s20802c10f2");
    check_field_offset(lv, s20802c10f3, ABISELECT(2048,1060), "S20802C10.s20802c10f3");
    set_bf_and_test(lv, s20802c10f4, ABISELECT(2056,1064), 0, 4, 1, "S20802C10");
    set_bf_and_test(lv, s20802c10f4, ABISELECT(2056,1064), 0, 4, hide_sll(1LL<<3), "S20802C10");
    set_bf_and_test(lv, s20802c10f5, ABISELECT(2056,1064), 4, 1, 1, "S20802C10");
    check_field_offset(lv, s20802c10f6, ABISELECT(2064,1068), "S20802C10.s20802c10f6");
    test_class_info(&lv, &cd_S20802C10);
    dp->~S20802C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20802C10(Test_S20802C10, "S20802C10", ABISELECT(2976,1548));

#else // __cplusplus

extern void _ZN9S20802C10C1Ev();
extern void _ZN9S20802C10D1Ev();
Name_Map name_map_S20802C10[] = {
  NSPAIR(_ZN9S20802C10C1Ev),
  NSPAIR(_ZN9S20802C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C4;
extern VTBL_ENTRY _ZTI8S20802C4[];
extern  VTBL_ENTRY _ZTV8S20802C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C4[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C6;
extern VTBL_ENTRY _ZTI8S20802C6[];
extern  VTBL_ENTRY _ZTV8S20802C6[];
extern Class_Descriptor cd_S20802C2;
extern VTBL_ENTRY _ZTI8S20802C2[];
extern  VTBL_ENTRY _ZTV8S20802C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C2[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C4;
extern VTBL_ENTRY _ZTI8S20802C4[];
extern  VTBL_ENTRY _ZTV8S20802C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C4[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
static Base_Class bases_S20802C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20802C3,    ABISELECT(2496,1300), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20802C3,    ABISELECT(2864,1492), //bcp->offset
    42, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(2864,1492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20802C4,    ABISELECT(2608,1356), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20802C3,    ABISELECT(2128,1116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(2128,1116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(2240,1172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(2240,1172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(2352,1228), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20802C6,    ABISELECT(2240,1172), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20802C2,    ABISELECT(2128,1116), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20802C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20802C4,    ABISELECT(112,56), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20802C3,    ABISELECT(368,192), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(368,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20802C10[];
extern void _ZN8S20802C32v2Ev();
extern void _ZN9S20802C102v6Ev();
extern void _ZN9S20802C102v7Ev();
extern void _ZN8S20802C42v3Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C42v3Ev();
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY vtc_S20802C10[] = {
  ABISELECT(2864,1492),
  ABISELECT(2608,1356),
  ABISELECT(2496,1300),
  ABISELECT(2128,1116),
  0,
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN9S20802C102v6Ev,
  (VTBL_ENTRY)&_ZN9S20802C102v7Ev,
  ABISELECT(2752,1436),
  ABISELECT(2384,1244),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
  ABISELECT(-368,-192),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(112,56),
  0,
  ABISELECT(736,376),
  ABISELECT(480,240),
  ABISELECT(368,184),
  ABISELECT(-2128,-1116),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(-2240,-1172),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
  ABISELECT(-2352,-1228),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  0,
  ABISELECT(-2496,-1300),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(-2608,-1356),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
  0,
  ABISELECT(-2864,-1492),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern VTBL_ENTRY _ZTV9S20802C10[];
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__A__9S20802C10[] = {
  ABISELECT(2752,1436),
  ABISELECT(2384,1244),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__8S20802C4__A__9S20802C10[] = {
  0,
  ABISELECT(-2384,-1244),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A1__8S20802C4__A__9S20802C10[] = {
  0,
  ABISELECT(-2752,-1436),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C2__9S20802C10[] = {
  ABISELECT(736,376),
  ABISELECT(480,240),
  ABISELECT(368,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__8S20802C2__9S20802C10[] = {
  0,
  ABISELECT(-368,-184),
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__8S20802C2__9S20802C10[] = {
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(-480,-240),
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A1__8S20802C2__9S20802C10[] = {
  0,
  ABISELECT(-736,-376),
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__9S20802C10[] = {
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__8S20802C4__9S20802C10[] = {
  0,
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A1__8S20802C4__9S20802C10[] = {
  0,
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
static  VTT_ENTRY vtt_S20802C10[] = {
  {&(_ZTV9S20802C10[6]),  6,46},
  {&(_tg__ZTV8S20802C4__A__9S20802C10[4]),  4,5},
  {&(_tg__ZTV8S20802C3__8S20802C4__A__9S20802C10[3]),  3,4},
  {&(_tg__ZTV8S20802C38S20802C5__A1__8S20802C4__A__9S20802C10[3]),  3,4},
  {&(_ZTV9S20802C10[24]),  24,46},
  {&(_ZTV9S20802C10[35]),  35,46},
  {&(_ZTV9S20802C10[41]),  41,46},
  {&(_ZTV9S20802C10[45]),  45,46},
  {&(_ZTV9S20802C10[27]),  27,46},
  {&(_ZTV9S20802C10[31]),  31,46},
  {&(_ZTV9S20802C10[13]),  13,46},
  {&(_tg__ZTV8S20802C2__9S20802C10[5]),  5,6},
  {&(_tg__ZTV8S20802C3__8S20802C2__9S20802C10[3]),  3,4},
  {&(_tg__ZTV8S20802C4__8S20802C2__9S20802C10[5]),  5,6},
  {&(_tg__ZTV8S20802C38S20802C5__A1__8S20802C2__9S20802C10[3]),  3,4},
  {&(_tg__ZTV8S20802C4__9S20802C10[4]),  4,5},
  {&(_tg__ZTV8S20802C3__8S20802C4__9S20802C10[3]),  3,4},
  {&(_tg__ZTV8S20802C38S20802C5__A1__8S20802C4__9S20802C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20802C10[];
extern  VTBL_ENTRY _ZTV9S20802C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20802C10[];
Class_Descriptor cd_S20802C10 = {  "S20802C10", // class name
  bases_S20802C10, 15,
  &(vtc_S20802C10[0]), // expected_vtbl_contents
  &(vtt_S20802C10[0]), // expected_vtt_contents
  ABISELECT(2976,1548), // object size
  NSPAIRA(_ZTI9S20802C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20802C10),46, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20802C10),18, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20802C8  : S20802C6 , S20802C3 , S20802C9 , S20802C10 {
  long double s20802c8f0[3];
  __tsi64 s20802c8f1;
  char s20802c8f2;
  virtual void  v8(); // _ZN8S20802C82v8Ev
  virtual void  v9(); // _ZN8S20802C82v9Ev
  virtual void  v10(); // _ZN8S20802C83v10Ev
  ~S20802C8(); // tgen
  S20802C8(); // tgen
};
//SIG(-1 S20802C8) C1{ BC2{ BC3{ BC4{ v4 FD Fp[3] FL Fc FD Fi}} BC4 v5 FD} BC4 BC5{ BC2 BC4 VBC3 BC6{ VBC4 VBC3 v6 Fi Fi:5 FD FC3 FC4} VBC7{ VBC4 VBC6 BC3 BC2 Fp} FC3} BC8{ VBC7 BC4 BC6 BC3 v7 v8 Fi Fp FC5 Fp Fs:4 Fc:1 FD[4]} v1 v2 v3 FD[3] FL Fc}


void  S20802C8 ::v8(){vfunc_called(this, "_ZN8S20802C82v8Ev");}
void  S20802C8 ::v9(){vfunc_called(this, "_ZN8S20802C82v9Ev");}
void  S20802C8 ::v10(){vfunc_called(this, "_ZN8S20802C83v10Ev");}
S20802C8 ::~S20802C8(){ note_dtor("S20802C8", this);} // tgen
S20802C8 ::S20802C8(){ note_ctor("S20802C8", this);} // tgen

static void Test_S20802C8()
{
  extern Class_Descriptor cd_S20802C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(258,538)];
    init_test(&cd_S20802C8, buf);
    S20802C8 *dp, &lv = *(dp=new (buf) S20802C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4112,2148), "sizeof(S20802C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20802C8)");
    /*is_ambiguous_... S20802C8::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C6*), 0, "S20802C8");
    /*is_ambiguous_... S20802C8::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C6*), 0, "S20802C8");
    /*is_ambiguous_... S20802C8::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C6*), ABISELECT(112,56), "S20802C8");
    /*is_ambiguous_... S20802C8::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C6*), 0, "S20802C8");
    /*is_ambiguous_... S20802C8::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*), ABISELECT(240,124), "S20802C8");
    /*is_ambiguous_... S20802C9::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C6*)(S20802C9*), ABISELECT(352,180), "S20802C8");
    /*is_ambiguous_... S20802C9::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C6*)(S20802C9*), ABISELECT(352,180), "S20802C8");
    /*is_ambiguous_... S20802C9::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C6*)(S20802C9*), ABISELECT(464,236), "S20802C8");
    /*is_ambiguous_... S20802C9::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C6*)(S20802C9*), ABISELECT(352,180), "S20802C8");
    /*is_ambiguous_... S20802C9::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C9*), ABISELECT(592,304), "S20802C8");
    /*is_ambiguous_... S20802C8::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*), ABISELECT(3264,1716), "S20802C8");
    /*is_ambiguous_... S20802C9::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C9*), ABISELECT(3264,1716), "S20802C8");
    /*is_ambiguous_... S20802C9::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C4*)(S20802C9*), ABISELECT(3264,1716), "S20802C8");
    /*is_ambiguous_... S20802C8::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C4*), ABISELECT(3264,1716), "S20802C8");
    /*is_ambiguous_... S20802C10::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C4*)(S20802C10*), ABISELECT(3264,1716), "S20802C8");
    /*is_ambiguous_... S20802C9::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C4*)(S20802C9*), ABISELECT(3376,1772), "S20802C8");
    /*is_ambiguous_... S20802C2::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C2*), ABISELECT(3376,1772), "S20802C8");
    /*is_ambiguous_... S20802C8::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C4*), ABISELECT(3376,1772), "S20802C8");
    /*is_ambiguous_... S20802C10::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C4*)(S20802C10*), ABISELECT(3376,1772), "S20802C8");
    /*is_ambiguous_... S20802C9::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C4*)(S20802C9*), ABISELECT(704,360), "S20802C8");
    check_base_class_offset(lv, (S20802C4*)(S20802C2*), ABISELECT(3856,2012), "S20802C8");
    /*is_ambiguous_... S20802C2::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C2*), ABISELECT(3488,1828), "S20802C8");
    /*is_ambiguous_... S20802C2::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C2*), ABISELECT(3488,1828), "S20802C8");
    check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C6*)(S20802C2*), ABISELECT(3600,1884), "S20802C8");
    check_base_class_offset(lv, (S20802C5*)(S20802C6*)(S20802C2*), ABISELECT(3600,1884), "S20802C8");
    /*is_ambiguous_... S20802C6::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C6*)(S20802C2*), ABISELECT(3712,1940), "S20802C8");
    check_base_class_offset(lv, (S20802C6*)(S20802C2*), ABISELECT(3600,1884), "S20802C8");
    check_base_class_offset(lv, (S20802C2*)(S20802C9*), ABISELECT(3488,1828), "S20802C8");
    check_base_class_offset(lv, (S20802C2*)(S20802C10*), ABISELECT(3488,1828), "S20802C8");
    check_base_class_offset(lv, (S20802C9*), ABISELECT(352,180), "S20802C8");
    /*is_ambiguous_... S20802C10::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C10*), ABISELECT(1072,552), "S20802C8");
    /*is_ambiguous_... S20802C10::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C4*)(S20802C10*), ABISELECT(1184,608), "S20802C8");
    /*is_ambiguous_... S20802C10::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C10*), ABISELECT(1440,744), "S20802C8");
    /*is_ambiguous_... S20802C10::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C10*), ABISELECT(1440,744), "S20802C8");
    check_base_class_offset(lv, (S20802C10*), ABISELECT(1072,552), "S20802C8");
    check_field_offset(lv, s20802c8f0, ABISELECT(3200,1668), "S20802C8.s20802c8f0");
    check_field_offset(lv, s20802c8f1, ABISELECT(3248,1704), "S20802C8.s20802c8f1");
    check_field_offset(lv, s20802c8f2, ABISELECT(3256,1712), "S20802C8.s20802c8f2");
    test_class_info(&lv, &cd_S20802C8);
    dp->~S20802C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20802C8(Test_S20802C8, "S20802C8", ABISELECT(4112,2148));

#else // __cplusplus

extern void _ZN8S20802C8C1Ev();
extern void _ZN8S20802C8D1Ev();
Name_Map name_map_S20802C8[] = {
  NSPAIR(_ZN8S20802C8C1Ev),
  NSPAIR(_ZN8S20802C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C6;
extern VTBL_ENTRY _ZTI8S20802C6[];
extern  VTBL_ENTRY _ZTV8S20802C6[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C6;
extern VTBL_ENTRY _ZTI8S20802C6[];
extern  VTBL_ENTRY _ZTV8S20802C6[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C4;
extern VTBL_ENTRY _ZTI8S20802C4[];
extern  VTBL_ENTRY _ZTV8S20802C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C4[];
extern Class_Descriptor cd_S20802C4;
extern VTBL_ENTRY _ZTI8S20802C4[];
extern  VTBL_ENTRY _ZTV8S20802C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C4[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C6;
extern VTBL_ENTRY _ZTI8S20802C6[];
extern  VTBL_ENTRY _ZTV8S20802C6[];
extern Class_Descriptor cd_S20802C2;
extern VTBL_ENTRY _ZTI8S20802C2[];
extern  VTBL_ENTRY _ZTV8S20802C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C2[];
extern Class_Descriptor cd_S20802C9;
extern VTBL_ENTRY _ZTI8S20802C9[];
extern  VTBL_ENTRY _ZTV8S20802C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C9[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C4;
extern VTBL_ENTRY _ZTI8S20802C4[];
extern  VTBL_ENTRY _ZTV8S20802C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C4[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C10;
extern VTBL_ENTRY _ZTI9S20802C10[];
extern  VTBL_ENTRY _ZTV9S20802C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20802C10[];
static Base_Class bases_S20802C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20802C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20802C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(112,56), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20802C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20802C3,    ABISELECT(240,124), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20802C3,    ABISELECT(352,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(352,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(464,236), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20802C6,    ABISELECT(352,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(592,304), //bcp->offset
    28, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(3264,1716), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(3264,1716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20802C3,    ABISELECT(3376,1772), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20802C4,    ABISELECT(704,360), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20802C4,    ABISELECT(3856,2012), //bcp->offset
    76, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S20802C3,    ABISELECT(3488,1828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(3488,1828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(3600,1884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(3600,1884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(3712,1940), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20802C6,    ABISELECT(3600,1884), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20802C2,    ABISELECT(3488,1828), //bcp->offset
    61, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S20802C9,    ABISELECT(352,180), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20802C3,    ABISELECT(1072,552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20802C4,    ABISELECT(1184,608), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(1440,744), //bcp->offset
    50, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(1440,744), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20802C10,    ABISELECT(1072,552), //bcp->offset
    36, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20802C8[];
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
extern void _ZN8S20802C82v8Ev();
extern void _ZN8S20802C82v9Ev();
extern void _ZN8S20802C83v10Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C42v3Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN9S20802C102v6Ev();
extern void _ZN9S20802C102v7Ev();
extern void _ZN8S20802C42v3Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY vtc_S20802C8[] = {
  ABISELECT(3856,2012),
  ABISELECT(3488,1828),
  ABISELECT(3376,1772),
  ABISELECT(3264,1716),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
  (VTBL_ENTRY)&_ZN8S20802C82v8Ev,
  (VTBL_ENTRY)&_ZN8S20802C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20802C83v10Ev,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(3504,1832),
  ABISELECT(3136,1648),
  ABISELECT(3024,1592),
  ABISELECT(2912,1536),
  ABISELECT(-352,-180),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
  ABISELECT(-464,-236),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(-592,-304),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(2560,1356),
  ABISELECT(2672,1412),
  ABISELECT(-704,-360),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
  ABISELECT(2192,1164),
  ABISELECT(2784,1460),
  ABISELECT(2304,1220),
  ABISELECT(2416,1276),
  ABISELECT(-1072,-552),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN9S20802C102v6Ev,
  (VTBL_ENTRY)&_ZN9S20802C102v7Ev,
  ABISELECT(2080,1108),
  ABISELECT(2192,1164),
  ABISELECT(-1184,-608),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
  ABISELECT(-1440,-744),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  0,
  ABISELECT(-3264,-1716),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  0,
  ABISELECT(-3376,-1772),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(112,56),
  0,
  ABISELECT(-224,-112),
  ABISELECT(368,184),
  ABISELECT(-112,-56),
  ABISELECT(-3488,-1828),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(-3600,-1884),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
  ABISELECT(-3712,-1940),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  0,
  ABISELECT(-592,-296),
  ABISELECT(-480,-240),
  ABISELECT(-3856,-2012),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20802C8[];
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C9__8S20802C8[] = {
  ABISELECT(3504,1832),
  ABISELECT(3136,1648),
  ABISELECT(3024,1592),
  ABISELECT(2912,1536),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C48S20802C9__8S20802C8[] = {
  ABISELECT(2560,1356),
  ABISELECT(2672,1412),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__8S20802C48S20802C9__8S20802C8[] = {
  0,
  ABISELECT(-2672,-1412),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A1__8S20802C48S20802C9__8S20802C8[] = {
  0,
  ABISELECT(-2560,-1356),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A3__8S20802C9__8S20802C8[] = {
  0,
  ABISELECT(-2912,-1536),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__A__8S20802C9__8S20802C8[] = {
  ABISELECT(2560,1356),
  ABISELECT(2672,1412),
  ABISELECT(-352,-180),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__A4__8S20802C9__8S20802C8[] = {
  0,
  ABISELECT(-3024,-1592),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C2__8S20802C9__8S20802C8[] = {
  ABISELECT(112,56),
  0,
  ABISELECT(-224,-112),
  ABISELECT(368,184),
  ABISELECT(-112,-56),
  ABISELECT(-3136,-1648),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__A1__8S20802C9__8S20802C8[] = {
  0,
  ABISELECT(-592,-296),
  ABISELECT(-480,-240),
  ABISELECT(-3504,-1832),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C68S20802C2__A1__8S20802C9__8S20802C8[] = {
  ABISELECT(-3248,-1704),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C68S20802C2__A7__8S20802C9__8S20802C8[] = {
  ABISELECT(-3360,-1760),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
extern void _ZN9S20802C102v6Ev();
extern void _ZN9S20802C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20802C10__8S20802C8[] = {
  ABISELECT(2192,1164),
  ABISELECT(2784,1460),
  ABISELECT(2304,1220),
  ABISELECT(2416,1276),
  0,
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN9S20802C102v6Ev,
  (VTBL_ENTRY)&_ZN9S20802C102v7Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C49S20802C10__A2__8S20802C8[] = {
  ABISELECT(2080,1108),
  ABISELECT(2192,1164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__8S20802C49S20802C10__A2__8S20802C8[] = {
  0,
  ABISELECT(-2192,-1164),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A1__8S20802C49S20802C10__A2__8S20802C8[] = {
  0,
  ABISELECT(-2080,-1108),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C2__9S20802C10__8S20802C8[] = {
  ABISELECT(112,56),
  0,
  ABISELECT(-224,-112),
  ABISELECT(368,184),
  ABISELECT(-112,-56),
  ABISELECT(-2416,-1276),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__9S20802C10__8S20802C8[] = {
  0,
  ABISELECT(-2304,-1220),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__9S20802C10__8S20802C8[] = {
  0,
  ABISELECT(-592,-296),
  ABISELECT(-480,-240),
  ABISELECT(-2784,-1460),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A1__9S20802C10__8S20802C8[] = {
  0,
  ABISELECT(-2192,-1164),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C68S20802C2__9S20802C10__8S20802C8[] = {
  ABISELECT(-2528,-1332),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C68S20802C2__A4__9S20802C10__8S20802C8[] = {
  ABISELECT(-2640,-1388),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__A__9S20802C10__8S20802C8[] = {
  ABISELECT(2080,1108),
  ABISELECT(2192,1164),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C2__8S20802C8[] = {
  ABISELECT(-224,-112),
  ABISELECT(368,184),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__8S20802C2__8S20802C8[] = {
  0,
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__8S20802C2__8S20802C8[] = {
  0,
  ABISELECT(-592,-296),
  ABISELECT(-480,-240),
  ABISELECT(-368,-184),
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A1__8S20802C2__8S20802C8[] = {
  0,
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__A1__8S20802C8[] = {
  ABISELECT(-592,-296),
  ABISELECT(-480,-240),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__8S20802C4__A1__8S20802C8[] = {
  0,
  ABISELECT(480,240),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A1__8S20802C4__A1__8S20802C8[] = {
  0,
  ABISELECT(592,296),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
static  VTT_ENTRY vtt_S20802C8[] = {
  {&(_ZTV8S20802C8[6]),  6,82},
  {&(_tg__ZTV8S20802C9__8S20802C8[6]),  6,8},
  {&(_tg__ZTV8S20802C48S20802C9__8S20802C8[4]),  4,5},
  {&(_tg__ZTV8S20802C3__8S20802C48S20802C9__8S20802C8[3]),  3,4},
  {&(_tg__ZTV8S20802C38S20802C5__A1__8S20802C48S20802C9__8S20802C8[3]),  3,4},
  {&(_tg__ZTV8S20802C38S20802C5__A3__8S20802C9__8S20802C8[3]),  3,4},
  {&(_tg__ZTV8S20802C4__A__8S20802C9__8S20802C8[4]),  4,5},
  {&(_tg__ZTV8S20802C3__A4__8S20802C9__8S20802C8[3]),  3,4},
  {&(_tg__ZTV8S20802C2__8S20802C9__8S20802C8[7]),  7,8},
  {&(_tg__ZTV8S20802C4__A1__8S20802C9__8S20802C8[5]),  5,6},
  {&(_tg__ZTV8S20802C68S20802C2__A1__8S20802C9__8S20802C8[2]),  2,4},
  {&(_tg__ZTV8S20802C38S20802C68S20802C2__A7__8S20802C9__8S20802C8[2]),  2,3},
  {&(_tg__ZTV9S20802C10__8S20802C8[6]),  6,9},
  {&(_tg__ZTV8S20802C49S20802C10__A2__8S20802C8[4]),  4,5},
  {&(_tg__ZTV8S20802C3__8S20802C49S20802C10__A2__8S20802C8[3]),  3,4},
  {&(_tg__ZTV8S20802C38S20802C5__A1__8S20802C49S20802C10__A2__8S20802C8[3]),  3,4},
  {&(_tg__ZTV8S20802C2__9S20802C10__8S20802C8[7]),  7,8},
  {&(_tg__ZTV8S20802C3__9S20802C10__8S20802C8[3]),  3,4},
  {&(_tg__ZTV8S20802C4__9S20802C10__8S20802C8[5]),  5,6},
  {&(_tg__ZTV8S20802C38S20802C5__A1__9S20802C10__8S20802C8[3]),  3,4},
  {&(_tg__ZTV8S20802C68S20802C2__9S20802C10__8S20802C8[2]),  2,4},
  {&(_tg__ZTV8S20802C38S20802C68S20802C2__A4__9S20802C10__8S20802C8[2]),  2,3},
  {&(_tg__ZTV8S20802C4__A__9S20802C10__8S20802C8[4]),  4,5},
  {&(_ZTV8S20802C8[23]),  23,82},
  {&(_ZTV8S20802C8[56]),  56,82},
  {&(_ZTV8S20802C8[35]),  35,82},
  {&(_ZTV8S20802C8[60]),  60,82},
  {&(_ZTV8S20802C8[68]),  68,82},
  {&(_ZTV8S20802C8[81]),  81,82},
  {&(_ZTV8S20802C8[71]),  71,82},
  {&(_ZTV8S20802C8[75]),  75,82},
  {&(_ZTV8S20802C8[42]),  42,82},
  {&(_ZTV8S20802C8[49]),  49,82},
  {&(_tg__ZTV8S20802C2__8S20802C8[5]),  5,6},
  {&(_tg__ZTV8S20802C3__8S20802C2__8S20802C8[3]),  3,4},
  {&(_tg__ZTV8S20802C4__8S20802C2__8S20802C8[5]),  5,6},
  {&(_tg__ZTV8S20802C38S20802C5__A1__8S20802C2__8S20802C8[3]),  3,4},
  {&(_tg__ZTV8S20802C4__A1__8S20802C8[4]),  4,5},
  {&(_tg__ZTV8S20802C3__8S20802C4__A1__8S20802C8[3]),  3,4},
  {&(_tg__ZTV8S20802C38S20802C5__A1__8S20802C4__A1__8S20802C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20802C8[];
extern  VTBL_ENTRY _ZTV8S20802C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C8[];
Class_Descriptor cd_S20802C8 = {  "S20802C8", // class name
  bases_S20802C8, 28,
  &(vtc_S20802C8[0]), // expected_vtbl_contents
  &(vtt_S20802C8[0]), // expected_vtt_contents
  ABISELECT(4112,2148), // object size
  NSPAIRA(_ZTI8S20802C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20802C8),82, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20802C8),40, //virtual table table var
  28, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20802C11  : S20802C5 , virtual S20802C3 , S20802C6 , virtual S20802C4 {
  ::S2489C12_nt s20802c11f0;
  int s20802c11f1;
  char s20802c11f2[3];
  int s20802c11f3;
  virtual void  v11(); // _ZN9S20802C113v11Ev
  virtual void  v12(); // _ZN9S20802C113v12Ev
  virtual void  v13(); // _ZN9S20802C113v13Ev
  ~S20802C11(); // tgen
  S20802C11(); // tgen
};
//SIG(-1 S20802C11) C1{ BC2{ BC3{ v4 FD Fp[3] FL Fc FD Fi}} VBC3 BC4{ BC2 BC3 v5 FD} VBC5{ VBC3 VBC2 v6 Fi Fi:5 FD FC2 FC3} v1 v2 v3 FC6{} Fi Fc[3] Fi}


void  S20802C11 ::v11(){vfunc_called(this, "_ZN9S20802C113v11Ev");}
void  S20802C11 ::v12(){vfunc_called(this, "_ZN9S20802C113v12Ev");}
void  S20802C11 ::v13(){vfunc_called(this, "_ZN9S20802C113v13Ev");}
S20802C11 ::~S20802C11(){ note_dtor("S20802C11", this);} // tgen
S20802C11 ::S20802C11(){ note_ctor("S20802C11", this);} // tgen

static void Test_S20802C11()
{
  extern Class_Descriptor cd_S20802C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,112)];
    init_test(&cd_S20802C11, buf);
    S20802C11 *dp, &lv = *(dp=new (buf) S20802C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,444), "sizeof(S20802C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20802C11)");
    /*is_ambiguous_... S20802C11::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*), 0, "S20802C11");
    /*is_ambiguous_... S20802C11::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C5*), 0, "S20802C11");
    /*is_ambiguous_... S20802C11::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*), ABISELECT(368,196), "S20802C11");
    /*is_ambiguous_... S20802C4::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C4*), ABISELECT(368,196), "S20802C11");
    check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C6*), ABISELECT(112,56), "S20802C11");
    check_base_class_offset(lv, (S20802C5*)(S20802C6*), ABISELECT(112,56), "S20802C11");
    /*is_ambiguous_... S20802C6::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C6*), ABISELECT(224,112), "S20802C11");
    check_base_class_offset(lv, (S20802C6*), ABISELECT(112,56), "S20802C11");
    /*is_ambiguous_... S20802C11::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*), ABISELECT(736,388), "S20802C11");
    check_base_class_offset(lv, (S20802C5*)(S20802C4*), ABISELECT(736,388), "S20802C11");
    check_base_class_offset(lv, (S20802C4*), ABISELECT(480,252), "S20802C11");
    check_field_offset(lv, s20802c11f0, ABISELECT(352,180), "S20802C11.s20802c11f0");
    check_field_offset(lv, s20802c11f1, ABISELECT(356,184), "S20802C11.s20802c11f1");
    check_field_offset(lv, s20802c11f2, ABISELECT(360,188), "S20802C11.s20802c11f2");
    check_field_offset(lv, s20802c11f3, ABISELECT(364,192), "S20802C11.s20802c11f3");
    test_class_info(&lv, &cd_S20802C11);
    dp->~S20802C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20802C11(Test_S20802C11, "S20802C11", ABISELECT(848,444));

#else // __cplusplus

extern void _ZN9S20802C11C1Ev();
extern void _ZN9S20802C11D1Ev();
Name_Map name_map_S20802C11[] = {
  NSPAIR(_ZN9S20802C11C1Ev),
  NSPAIR(_ZN9S20802C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C6;
extern VTBL_ENTRY _ZTI8S20802C6[];
extern  VTBL_ENTRY _ZTV8S20802C6[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C4;
extern VTBL_ENTRY _ZTI8S20802C4[];
extern  VTBL_ENTRY _ZTV8S20802C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C4[];
static Base_Class bases_S20802C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20802C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20802C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20802C3,    ABISELECT(368,196), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20802C3,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(224,112), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20802C6,    ABISELECT(112,56), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20802C3,    ABISELECT(736,388), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(736,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20802C4,    ABISELECT(480,252), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20802C11[];
extern void _ZN8S20802C32v2Ev();
extern void _ZN9S20802C113v11Ev();
extern void _ZN9S20802C113v12Ev();
extern void _ZN9S20802C113v13Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C42v3Ev();
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY vtc_S20802C11[] = {
  ABISELECT(736,388),
  ABISELECT(480,252),
  ABISELECT(368,196),
  0,
  (VTBL_ENTRY)&(_ZTI9S20802C11[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN9S20802C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20802C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20802C113v13Ev,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI9S20802C11[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI9S20802C11[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  0,
  ABISELECT(-368,-196),
  (VTBL_ENTRY)&(_ZTI9S20802C11[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(-480,-252),
  (VTBL_ENTRY)&(_ZTI9S20802C11[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
  0,
  ABISELECT(-736,-388),
  (VTBL_ENTRY)&(_ZTI9S20802C11[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern VTBL_ENTRY _ZTV9S20802C11[];
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__9S20802C11[] = {
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__8S20802C4__9S20802C11[] = {
  0,
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A1__8S20802C4__9S20802C11[] = {
  0,
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
static  VTT_ENTRY vtt_S20802C11[] = {
  {&(_ZTV9S20802C11[5]),  5,30},
  {&(_ZTV9S20802C11[19]),  19,30},
  {&(_ZTV9S20802C11[25]),  25,30},
  {&(_ZTV9S20802C11[29]),  29,30},
  {&(_tg__ZTV8S20802C4__9S20802C11[4]),  4,5},
  {&(_tg__ZTV8S20802C3__8S20802C4__9S20802C11[3]),  3,4},
  {&(_tg__ZTV8S20802C38S20802C5__A1__8S20802C4__9S20802C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20802C11[];
extern  VTBL_ENTRY _ZTV9S20802C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20802C11[];
Class_Descriptor cd_S20802C11 = {  "S20802C11", // class name
  bases_S20802C11, 10,
  &(vtc_S20802C11[0]), // expected_vtbl_contents
  &(vtt_S20802C11[0]), // expected_vtt_contents
  ABISELECT(848,444), // object size
  NSPAIRA(_ZTI9S20802C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20802C11),30, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20802C11),7, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20802C1  : virtual S20802C2 , S20802C7 , virtual S20802C8 , virtual S20802C9 , S20802C11 {
  char s20802c1f0;
  virtual void  v1(); // _ZN8S20802C12v1Ev
  ~S20802C1(); // tgen
  S20802C1(); // tgen
};
//SIG(1 S20802C1) C1{ VBC2{ VBC3{ v2 FD Fp[3] FL Fc FD Fi} VBC4{ VBC3 VBC5{ BC3} v3 Fi Fi:5 FD FC5 FC3} BC5 BC6{ BC5 BC3 v4 FD} Fp} BC7{ v5 Fi FL} VBC8{ BC6 BC3 BC9{ BC6 BC3 VBC5 BC4 VBC2 FC5} BC10{ VBC2 BC3 BC4 BC5 v6 v7 Fi Fp FC9 Fp Fs:4 Fc:1 FD[4]} v8 v9 v10 FD[3] FL Fc} VBC9 BC11{ BC5 VBC3 BC6 VBC4 v11 v12 v13 FC12{} Fi Fc[3] Fi} v1 Fc}


void  S20802C1 ::v1(){vfunc_called(this, "_ZN8S20802C12v1Ev");}
S20802C1 ::~S20802C1(){ note_dtor("S20802C1", this);} // tgen
S20802C1 ::S20802C1(){ note_ctor("S20802C1", this);} // tgen

static void Test_S20802C1()
{
  extern Class_Descriptor cd_S20802C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(329,685)];
    init_test(&cd_S20802C1, buf);
    S20802C1 *dp, &lv = *(dp=new (buf) S20802C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5248,2736), "sizeof(S20802C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20802C1)");
    /*is_ambiguous_... S20802C2::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C2*), ABISELECT(784,400), "S20802C1");
    /*is_ambiguous_... S20802C1::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C4*), ABISELECT(784,400), "S20802C1");
    /*is_ambiguous_... S20802C9::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C4*)(S20802C9*)(S20802C8*), ABISELECT(784,400), "S20802C1");
    /*is_ambiguous_... S20802C10::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C4*)(S20802C10*)(S20802C8*), ABISELECT(784,400), "S20802C1");
    /*is_ambiguous_... S20802C1::S20802C9 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C4*)(S20802C9*), ABISELECT(784,400), "S20802C1");
    /*is_ambiguous_... S20802C11::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C11*), ABISELECT(784,400), "S20802C1");
    /*is_ambiguous_... S20802C1::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*), ABISELECT(1152,592), "S20802C1");
    /*is_ambiguous_... S20802C1::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C4*), ABISELECT(1152,592), "S20802C1");
    /*is_ambiguous_... S20802C9::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C9*)(S20802C8*), ABISELECT(1152,592), "S20802C1");
    /*is_ambiguous_... S20802C9::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C4*)(S20802C9*)(S20802C8*), ABISELECT(1152,592), "S20802C1");
    /*is_ambiguous_... S20802C10::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C4*)(S20802C10*)(S20802C8*), ABISELECT(1152,592), "S20802C1");
    /*is_ambiguous_... S20802C1::S20802C9 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C9*), ABISELECT(1152,592), "S20802C1");
    /*is_ambiguous_... S20802C1::S20802C9 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C4*)(S20802C9*), ABISELECT(1152,592), "S20802C1");
    check_base_class_offset(lv, (S20802C4*)(S20802C2*), ABISELECT(896,456), "S20802C1");
    check_base_class_offset(lv, (S20802C4*)(S20802C11*), ABISELECT(896,456), "S20802C1");
    /*is_ambiguous_... S20802C2::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C2*), ABISELECT(416,216), "S20802C1");
    /*is_ambiguous_... S20802C2::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C2*), ABISELECT(416,216), "S20802C1");
    check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C6*)(S20802C2*), ABISELECT(528,272), "S20802C1");
    check_base_class_offset(lv, (S20802C5*)(S20802C6*)(S20802C2*), ABISELECT(528,272), "S20802C1");
    /*is_ambiguous_... S20802C6::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C6*)(S20802C2*), ABISELECT(640,328), "S20802C1");
    check_base_class_offset(lv, (S20802C6*)(S20802C2*), ABISELECT(528,272), "S20802C1");
    check_base_class_offset(lv, (S20802C2*), ABISELECT(416,216), "S20802C1");
    check_base_class_offset(lv, (S20802C2*)(S20802C9*)(S20802C8*), ABISELECT(416,216), "S20802C1");
    check_base_class_offset(lv, (S20802C2*)(S20802C10*)(S20802C8*), ABISELECT(416,216), "S20802C1");
    /*is_ambiguous_... S20802C1::S20802C9 */ AMB_check_base_class_offset(lv, (S20802C2*)(S20802C9*), ABISELECT(416,216), "S20802C1");
    check_base_class_offset(lv, (S20802C7*), 0, "S20802C1");
    /*is_ambiguous_... S20802C8::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C6*)(S20802C8*), ABISELECT(1264,648), "S20802C1");
    /*is_ambiguous_... S20802C8::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C6*)(S20802C8*), ABISELECT(1264,648), "S20802C1");
    /*is_ambiguous_... S20802C8::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C6*)(S20802C8*), ABISELECT(1376,704), "S20802C1");
    /*is_ambiguous_... S20802C8::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C6*)(S20802C8*), ABISELECT(1264,648), "S20802C1");
    /*is_ambiguous_... S20802C8::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C8*), ABISELECT(1504,772), "S20802C1");
    /*is_ambiguous_... S20802C9::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C6*)(S20802C9*)(S20802C8*), ABISELECT(1616,828), "S20802C1");
    /*is_ambiguous_... S20802C9::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C6*)(S20802C9*)(S20802C8*), ABISELECT(1616,828), "S20802C1");
    /*is_ambiguous_... S20802C9::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C6*)(S20802C9*)(S20802C8*), ABISELECT(1728,884), "S20802C1");
    /*is_ambiguous_... S20802C9::S20802C6 */ AMB_check_base_class_offset(lv, (S20802C6*)(S20802C9*)(S20802C8*), ABISELECT(1616,828), "S20802C1");
    /*is_ambiguous_... S20802C9::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C9*)(S20802C8*), ABISELECT(1856,952), "S20802C1");
    /*is_ambiguous_... S20802C9::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C4*)(S20802C9*)(S20802C8*), ABISELECT(1968,1008), "S20802C1");
    check_base_class_offset(lv, (S20802C9*)(S20802C8*), ABISELECT(1616,828), "S20802C1");
    /*is_ambiguous_... S20802C10::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C10*)(S20802C8*), ABISELECT(2336,1200), "S20802C1");
    /*is_ambiguous_... S20802C10::S20802C4 */ AMB_check_base_class_offset(lv, (S20802C4*)(S20802C10*)(S20802C8*), ABISELECT(2448,1256), "S20802C1");
    /*is_ambiguous_... S20802C10::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C10*)(S20802C8*), ABISELECT(2704,1392), "S20802C1");
    /*is_ambiguous_... S20802C10::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C10*)(S20802C8*), ABISELECT(2704,1392), "S20802C1");
    check_base_class_offset(lv, (S20802C10*)(S20802C8*), ABISELECT(2336,1200), "S20802C1");
    check_base_class_offset(lv, (S20802C8*), ABISELECT(1264,648), "S20802C1");
    /*is_ambiguous_... S20802C1::S20802C9 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C6*)(S20802C9*), ABISELECT(4528,2364), "S20802C1");
    /*is_ambiguous_... S20802C1::S20802C9 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C6*)(S20802C9*), ABISELECT(4528,2364), "S20802C1");
    /*is_ambiguous_... S20802C1::S20802C9 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C6*)(S20802C9*), ABISELECT(4640,2420), "S20802C1");
    /*is_ambiguous_... S20802C1::S20802C9 */ AMB_check_base_class_offset(lv, (S20802C6*)(S20802C9*), ABISELECT(4528,2364), "S20802C1");
    /*is_ambiguous_... S20802C1::S20802C9 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C9*), ABISELECT(4768,2488), "S20802C1");
    /*is_ambiguous_... S20802C1::S20802C9 */ AMB_check_base_class_offset(lv, (S20802C4*)(S20802C9*), ABISELECT(4880,2544), "S20802C1");
    /*is_ambiguous_... S20802C1::S20802C9 */ AMB_check_base_class_offset(lv, (S20802C9*), ABISELECT(4528,2364), "S20802C1");
    /*is_ambiguous_... S20802C11::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C11*), ABISELECT(32,16), "S20802C1");
    /*is_ambiguous_... S20802C11::S20802C5 */ AMB_check_base_class_offset(lv, (S20802C5*)(S20802C11*), ABISELECT(32,16), "S20802C1");
    check_base_class_offset(lv, (S20802C3*)(S20802C5*)(S20802C6*)(S20802C11*), ABISELECT(144,72), "S20802C1");
    check_base_class_offset(lv, (S20802C5*)(S20802C6*)(S20802C11*), ABISELECT(144,72), "S20802C1");
    /*is_ambiguous_... S20802C6::S20802C3 */ AMB_check_base_class_offset(lv, (S20802C3*)(S20802C6*)(S20802C11*), ABISELECT(256,128), "S20802C1");
    check_base_class_offset(lv, (S20802C6*)(S20802C11*), ABISELECT(144,72), "S20802C1");
    check_base_class_offset(lv, (S20802C11*), ABISELECT(32,16), "S20802C1");
    check_field_offset(lv, s20802c1f0, ABISELECT(400,212), "S20802C1.s20802c1f0");
    test_class_info(&lv, &cd_S20802C1);
    dp->~S20802C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20802C1(Test_S20802C1, "S20802C1", ABISELECT(5248,2736));

#else // __cplusplus

extern void _ZN8S20802C1C1Ev();
extern void _ZN8S20802C1D1Ev();
Name_Map name_map_S20802C1[] = {
  NSPAIR(_ZN8S20802C1C1Ev),
  NSPAIR(_ZN8S20802C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C4;
extern VTBL_ENTRY _ZTI8S20802C4[];
extern  VTBL_ENTRY _ZTV8S20802C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C4[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C6;
extern VTBL_ENTRY _ZTI8S20802C6[];
extern  VTBL_ENTRY _ZTV8S20802C6[];
extern Class_Descriptor cd_S20802C2;
extern VTBL_ENTRY _ZTI8S20802C2[];
extern  VTBL_ENTRY _ZTV8S20802C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C2[];
extern Class_Descriptor cd_S20802C7;
extern VTBL_ENTRY _ZTI8S20802C7[];
extern  VTBL_ENTRY _ZTV8S20802C7[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C6;
extern VTBL_ENTRY _ZTI8S20802C6[];
extern  VTBL_ENTRY _ZTV8S20802C6[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C6;
extern VTBL_ENTRY _ZTI8S20802C6[];
extern  VTBL_ENTRY _ZTV8S20802C6[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C4;
extern VTBL_ENTRY _ZTI8S20802C4[];
extern  VTBL_ENTRY _ZTV8S20802C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C4[];
extern Class_Descriptor cd_S20802C9;
extern VTBL_ENTRY _ZTI8S20802C9[];
extern  VTBL_ENTRY _ZTV8S20802C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C9[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C4;
extern VTBL_ENTRY _ZTI8S20802C4[];
extern  VTBL_ENTRY _ZTV8S20802C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C4[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C10;
extern VTBL_ENTRY _ZTI9S20802C10[];
extern  VTBL_ENTRY _ZTV9S20802C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20802C10[];
extern Class_Descriptor cd_S20802C8;
extern VTBL_ENTRY _ZTI8S20802C8[];
extern  VTBL_ENTRY _ZTV8S20802C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C8[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C6;
extern VTBL_ENTRY _ZTI8S20802C6[];
extern  VTBL_ENTRY _ZTV8S20802C6[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C4;
extern VTBL_ENTRY _ZTI8S20802C4[];
extern  VTBL_ENTRY _ZTV8S20802C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C4[];
extern Class_Descriptor cd_S20802C9;
extern VTBL_ENTRY _ZTI8S20802C9[];
extern  VTBL_ENTRY _ZTV8S20802C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C9[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C5;
extern VTBL_ENTRY _ZTI8S20802C5[];
extern  VTBL_ENTRY _ZTV8S20802C5[];
extern Class_Descriptor cd_S20802C3;
extern VTBL_ENTRY _ZTI8S20802C3[];
extern  VTBL_ENTRY _ZTV8S20802C3[];
extern Class_Descriptor cd_S20802C6;
extern VTBL_ENTRY _ZTI8S20802C6[];
extern  VTBL_ENTRY _ZTV8S20802C6[];
extern Class_Descriptor cd_S20802C11;
extern VTBL_ENTRY _ZTI9S20802C11[];
extern  VTBL_ENTRY _ZTV9S20802C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20802C11[];
static Base_Class bases_S20802C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20802C3,    ABISELECT(784,400), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20802C3,    ABISELECT(1152,592), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(1152,592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20802C4,    ABISELECT(896,456), //bcp->offset
    45, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20802C3,    ABISELECT(416,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(416,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(528,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(528,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(640,328), //bcp->offset
    38, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20802C6,    ABISELECT(528,272), //bcp->offset
    34, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20802C2,    ABISELECT(416,216), //bcp->offset
    26, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20802C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20802C3,    ABISELECT(1264,648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(1264,648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(1376,704), //bcp->offset
    74, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20802C6,    ABISELECT(1264,648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(1504,772), //bcp->offset
    77, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(1616,828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(1616,828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(1728,884), //bcp->offset
    88, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20802C6,    ABISELECT(1616,828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(1856,952), //bcp->offset
    91, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20802C4,    ABISELECT(1968,1008), //bcp->offset
    94, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20802C9,    ABISELECT(1616,828), //bcp->offset
    80, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(2336,1200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20802C4,    ABISELECT(2448,1256), //bcp->offset
    108, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(2704,1392), //bcp->offset
    113, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(2704,1392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20802C10,    ABISELECT(2336,1200), //bcp->offset
    99, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20802C8,    ABISELECT(1264,648), //bcp->offset
    55, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20802C3,    ABISELECT(4528,2364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(4528,2364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(4640,2420), //bcp->offset
    127, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S20802C6,    ABISELECT(4528,2364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(4768,2488), //bcp->offset
    130, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20802C4,    ABISELECT(4880,2544), //bcp->offset
    133, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20802C9,    ABISELECT(4528,2364), //bcp->offset
    116, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20802C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(144,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S20802C5,    ABISELECT(144,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S20802C3,    ABISELECT(256,128), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S20802C6,    ABISELECT(144,72), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S20802C11,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20802C1[];
extern void _ZN8S20802C72v5Ev();
extern void _ZN8S20802C12v1Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN9S20802C113v11Ev();
extern void _ZN9S20802C113v12Ev();
extern void _ZN9S20802C113v13Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C42v3Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
extern void _ZN8S20802C82v8Ev();
extern void _ZN8S20802C82v9Ev();
extern void _ZN8S20802C83v10Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C42v3Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN9S20802C102v6Ev();
extern void _ZN9S20802C102v7Ev();
extern void _ZN8S20802C42v3Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY vtc_S20802C1[] = {
  ABISELECT(4528,2364),
  ABISELECT(1264,648),
  ABISELECT(1152,592),
  ABISELECT(896,456),
  ABISELECT(784,400),
  ABISELECT(416,216),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20802C12v1Ev,
  ABISELECT(1120,576),
  ABISELECT(864,440),
  ABISELECT(752,384),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN9S20802C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20802C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20802C113v13Ev,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
  ABISELECT(-256,-128),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(112,56),
  0,
  ABISELECT(736,376),
  ABISELECT(480,240),
  ABISELECT(368,184),
  ABISELECT(-416,-216),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(-528,-272),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
  ABISELECT(-640,-328),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  0,
  ABISELECT(-784,-400),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(-896,-456),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
  0,
  ABISELECT(-1152,-592),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(1072,552),
  ABISELECT(1072,552),
  ABISELECT(704,360),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-192),
  ABISELECT(-848,-432),
  ABISELECT(-480,-248),
  ABISELECT(-112,-56),
  ABISELECT(-1264,-648),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
  (VTBL_ENTRY)&_ZN8S20802C82v8Ev,
  (VTBL_ENTRY)&_ZN8S20802C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20802C83v10Ev,
  ABISELECT(-1376,-704),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(-1504,-772),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(-720,-372),
  ABISELECT(-1200,-612),
  ABISELECT(-832,-428),
  ABISELECT(-464,-236),
  ABISELECT(-1616,-828),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
  ABISELECT(-1728,-884),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(-1856,-952),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(-816,-416),
  ABISELECT(-1184,-608),
  ABISELECT(-1968,-1008),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
  ABISELECT(-1184,-608),
  ABISELECT(-1440,-744),
  ABISELECT(-1552,-800),
  ABISELECT(-1920,-984),
  ABISELECT(-2336,-1200),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN9S20802C102v6Ev,
  (VTBL_ENTRY)&_ZN9S20802C102v7Ev,
  ABISELECT(-1296,-664),
  ABISELECT(-1664,-856),
  ABISELECT(-2448,-1256),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
  ABISELECT(-2704,-1392),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(352,180),
  0,
  0,
  ABISELECT(-3632,-1908),
  ABISELECT(-4112,-2148),
  ABISELECT(-3744,-1964),
  ABISELECT(-3376,-1772),
  ABISELECT(-4528,-2364),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
  ABISELECT(-4640,-2420),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(-4768,-2488),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  ABISELECT(-3728,-1952),
  ABISELECT(-4096,-2144),
  ABISELECT(-4880,-2544),
  (VTBL_ENTRY)&(_ZTI8S20802C1[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20802C1[];
extern void _ZN8S20802C32v2Ev();
extern void _ZN9S20802C113v11Ev();
extern void _ZN9S20802C113v12Ev();
extern void _ZN9S20802C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20802C11__8S20802C1[] = {
  ABISELECT(1120,576),
  ABISELECT(864,440),
  ABISELECT(752,384),
  0,
  (VTBL_ENTRY)&(_ZTI9S20802C11[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN9S20802C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20802C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20802C113v13Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__A1__9S20802C11__8S20802C1[] = {
  0,
  ABISELECT(-752,-384),
  (VTBL_ENTRY)&(_ZTI9S20802C11[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__9S20802C11__8S20802C1[] = {
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(-864,-440),
  (VTBL_ENTRY)&(_ZTI9S20802C11[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A4__9S20802C11__8S20802C1[] = {
  0,
  ABISELECT(-1120,-576),
  (VTBL_ENTRY)&(_ZTI9S20802C11[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C2__8S20802C1[] = {
  ABISELECT(736,376),
  ABISELECT(480,240),
  ABISELECT(368,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__8S20802C2__8S20802C1[] = {
  0,
  ABISELECT(-368,-184),
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__8S20802C2__8S20802C1[] = {
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(-480,-240),
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A1__8S20802C2__8S20802C1[] = {
  0,
  ABISELECT(-736,-376),
  (VTBL_ENTRY)&(_ZTI8S20802C2[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__8S20802C1[] = {
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__8S20802C4__8S20802C1[] = {
  0,
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A1__8S20802C4__8S20802C1[] = {
  0,
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
extern void _ZN8S20802C82v8Ev();
extern void _ZN8S20802C82v9Ev();
extern void _ZN8S20802C83v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C8__8S20802C1[] = {
  ABISELECT(-368,-192),
  ABISELECT(-848,-432),
  ABISELECT(-480,-248),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
  (VTBL_ENTRY)&_ZN8S20802C82v8Ev,
  (VTBL_ENTRY)&_ZN8S20802C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20802C83v10Ev,
};
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C98S20802C8__8S20802C1[] = {
  ABISELECT(-720,-372),
  ABISELECT(-1200,-612),
  ABISELECT(-832,-428),
  ABISELECT(-464,-236),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C48S20802C98S20802C8__A1__8S20802C1[] = {
  ABISELECT(-816,-416),
  ABISELECT(-1184,-608),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__8S20802C48S20802C98S20802C8__A1__8S20802C1[] = {
  0,
  ABISELECT(1184,608),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A1__8S20802C48S20802C98S20802C8__A1__8S20802C1[] = {
  0,
  ABISELECT(816,416),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A3__8S20802C98S20802C8__8S20802C1[] = {
  0,
  ABISELECT(464,236),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__A__8S20802C98S20802C8__8S20802C1[] = {
  ABISELECT(-816,-416),
  ABISELECT(-1184,-608),
  ABISELECT(-352,-180),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__A4__8S20802C98S20802C8__8S20802C1[] = {
  0,
  ABISELECT(832,428),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C2__8S20802C98S20802C8__8S20802C1[] = {
  ABISELECT(112,56),
  0,
  ABISELECT(736,376),
  ABISELECT(480,240),
  ABISELECT(368,184),
  ABISELECT(1200,612),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__A1__8S20802C98S20802C8__8S20802C1[] = {
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(720,372),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C68S20802C2__A1__8S20802C98S20802C8__8S20802C1[] = {
  ABISELECT(1088,556),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C68S20802C2__A7__8S20802C98S20802C8__8S20802C1[] = {
  ABISELECT(976,500),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
extern void _ZN9S20802C102v6Ev();
extern void _ZN9S20802C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20802C108S20802C8__8S20802C1[] = {
  ABISELECT(-1184,-608),
  ABISELECT(-1440,-744),
  ABISELECT(-1552,-800),
  ABISELECT(-1920,-984),
  0,
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN9S20802C102v6Ev,
  (VTBL_ENTRY)&_ZN9S20802C102v7Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C49S20802C108S20802C8__A2__8S20802C1[] = {
  ABISELECT(-1296,-664),
  ABISELECT(-1664,-856),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__8S20802C49S20802C108S20802C8__A2__8S20802C1[] = {
  0,
  ABISELECT(1664,856),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A1__8S20802C49S20802C108S20802C8__A2__8S20802C1[] = {
  0,
  ABISELECT(1296,664),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C2__9S20802C108S20802C8__8S20802C1[] = {
  ABISELECT(112,56),
  0,
  ABISELECT(736,376),
  ABISELECT(480,240),
  ABISELECT(368,184),
  ABISELECT(1920,984),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__9S20802C108S20802C8__8S20802C1[] = {
  0,
  ABISELECT(1552,800),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__9S20802C108S20802C8__8S20802C1[] = {
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(1440,744),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A1__9S20802C108S20802C8__8S20802C1[] = {
  0,
  ABISELECT(1184,608),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C68S20802C2__9S20802C108S20802C8__8S20802C1[] = {
  ABISELECT(1808,928),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C68S20802C2__A4__9S20802C108S20802C8__8S20802C1[] = {
  ABISELECT(1696,872),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__A__9S20802C108S20802C8__8S20802C1[] = {
  ABISELECT(-1296,-664),
  ABISELECT(-1664,-856),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI9S20802C10[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C9__8S20802C8__8S20802C1[] = {
  ABISELECT(-720,-372),
  ABISELECT(-1200,-612),
  ABISELECT(-832,-428),
  ABISELECT(-464,-236),
  ABISELECT(-352,-180),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A6__8S20802C8__8S20802C1[] = {
  0,
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C48S20802C9__8S20802C8__8S20802C1[] = {
  ABISELECT(-816,-416),
  ABISELECT(-1184,-608),
  ABISELECT(-704,-360),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__A7__8S20802C8__8S20802C1[] = {
  0,
  ABISELECT(480,248),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C2__8S20802C8__8S20802C1[] = {
  ABISELECT(112,56),
  0,
  ABISELECT(736,376),
  ABISELECT(480,240),
  ABISELECT(368,184),
  ABISELECT(848,432),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__A1__8S20802C8__8S20802C1[] = {
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(368,192),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C68S20802C2__A2__8S20802C8__8S20802C1[] = {
  ABISELECT(736,376),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C68S20802C2__A10__8S20802C8__8S20802C1[] = {
  ABISELECT(624,320),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
extern void _ZN9S20802C102v6Ev();
extern void _ZN9S20802C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20802C10__8S20802C8__8S20802C1[] = {
  ABISELECT(-1184,-608),
  ABISELECT(-1440,-744),
  ABISELECT(-1552,-800),
  ABISELECT(-1920,-984),
  ABISELECT(-1072,-552),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN9S20802C102v6Ev,
  (VTBL_ENTRY)&_ZN9S20802C102v7Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C49S20802C10__A2__8S20802C8__8S20802C1[] = {
  ABISELECT(-1296,-664),
  ABISELECT(-1664,-856),
  ABISELECT(-1184,-608),
  (VTBL_ENTRY)&(_ZTI8S20802C8[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C9__A1__8S20802C1[] = {
  ABISELECT(-3632,-1908),
  ABISELECT(-4112,-2148),
  ABISELECT(-3744,-1964),
  ABISELECT(-3376,-1772),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C48S20802C9__A3__8S20802C1[] = {
  ABISELECT(-3728,-1952),
  ABISELECT(-4096,-2144),
  0,
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__8S20802C48S20802C9__A3__8S20802C1[] = {
  0,
  ABISELECT(4096,2144),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A1__8S20802C48S20802C9__A3__8S20802C1[] = {
  0,
  ABISELECT(3728,1952),
  (VTBL_ENTRY)&(_ZTI8S20802C4[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C5__A3__8S20802C9__A1__8S20802C1[] = {
  0,
  ABISELECT(3376,1772),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__A__8S20802C9__A1__8S20802C1[] = {
  ABISELECT(-3728,-1952),
  ABISELECT(-4096,-2144),
  ABISELECT(-352,-180),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C3__A4__8S20802C9__A1__8S20802C1[] = {
  0,
  ABISELECT(3744,1964),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C2__8S20802C9__A1__8S20802C1[] = {
  ABISELECT(112,56),
  0,
  ABISELECT(736,376),
  ABISELECT(480,240),
  ABISELECT(368,184),
  ABISELECT(4112,2148),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
extern void _ZN8S20802C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C4__A1__8S20802C9__A1__8S20802C1[] = {
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(3632,1908),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C42v3Ev,
};
extern void _ZN8S20802C32v2Ev();
extern void _ZN8S20802C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C68S20802C2__A1__8S20802C9__A1__8S20802C1[] = {
  ABISELECT(4000,2092),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20802C62v4Ev,
};
extern void _ZN8S20802C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20802C38S20802C68S20802C2__A7__8S20802C9__A1__8S20802C1[] = {
  ABISELECT(3888,2036),
  (VTBL_ENTRY)&(_ZTI8S20802C9[0]),
  (VTBL_ENTRY)&_ZN8S20802C32v2Ev,
};
static  VTT_ENTRY vtt_S20802C1[] = {
  {&(_ZTV8S20802C1[8]),  8,138},
  {&(_tg__ZTV9S20802C11__8S20802C1[5]),  5,9},
  {&(_tg__ZTV8S20802C3__A1__9S20802C11__8S20802C1[3]),  3,4},
  {&(_tg__ZTV8S20802C4__9S20802C11__8S20802C1[5]),  5,6},
  {&(_tg__ZTV8S20802C38S20802C5__A4__9S20802C11__8S20802C1[3]),  3,4},
  {&(_ZTV8S20802C1[33]),  33,138},
  {&(_ZTV8S20802C1[44]),  44,138},
  {&(_ZTV8S20802C1[50]),  50,138},
  {&(_ZTV8S20802C1[54]),  54,138},
  {&(_ZTV8S20802C1[36]),  36,138},
  {&(_ZTV8S20802C1[40]),  40,138},
  {&(_ZTV8S20802C1[69]),  69,138},
  {&(_ZTV8S20802C1[76]),  76,138},
  {&(_ZTV8S20802C1[79]),  79,138},
  {&(_ZTV8S20802C1[86]),  86,138},
  {&(_ZTV8S20802C1[90]),  90,138},
  {&(_ZTV8S20802C1[93]),  93,138},
  {&(_ZTV8S20802C1[98]),  98,138},
  {&(_ZTV8S20802C1[105]),  105,138},
  {&(_ZTV8S20802C1[112]),  112,138},
  {&(_ZTV8S20802C1[115]),  115,138},
  {&(_ZTV8S20802C1[125]),  125,138},
  {&(_ZTV8S20802C1[129]),  129,138},
  {&(_ZTV8S20802C1[132]),  132,138},
  {&(_ZTV8S20802C1[137]),  137,138},
  {&(_ZTV8S20802C1[15]),  15,138},
  {&(_tg__ZTV8S20802C2__8S20802C1[5]),  5,6},
  {&(_tg__ZTV8S20802C3__8S20802C2__8S20802C1[3]),  3,4},
  {&(_tg__ZTV8S20802C4__8S20802C2__8S20802C1[5]),  5,6},
  {&(_tg__ZTV8S20802C38S20802C5__A1__8S20802C2__8S20802C1[3]),  3,4},
  {&(_tg__ZTV8S20802C4__8S20802C1[4]),  4,5},
  {&(_tg__ZTV8S20802C3__8S20802C4__8S20802C1[3]),  3,4},
  {&(_tg__ZTV8S20802C38S20802C5__A1__8S20802C4__8S20802C1[3]),  3,4},
  {&(_tg__ZTV8S20802C8__8S20802C1[6]),  6,11},
  {&(_tg__ZTV8S20802C98S20802C8__8S20802C1[6]),  6,8},
  {&(_tg__ZTV8S20802C48S20802C98S20802C8__A1__8S20802C1[4]),  4,5},
  {&(_tg__ZTV8S20802C3__8S20802C48S20802C98S20802C8__A1__8S20802C1[3]),  3,4},
  {&(_tg__ZTV8S20802C38S20802C5__A1__8S20802C48S20802C98S20802C8__A1__8S20802C1[3]),  3,4},
  {&(_tg__ZTV8S20802C38S20802C5__A3__8S20802C98S20802C8__8S20802C1[3]),  3,4},
  {&(_tg__ZTV8S20802C4__A__8S20802C98S20802C8__8S20802C1[4]),  4,5},
  {&(_tg__ZTV8S20802C3__A4__8S20802C98S20802C8__8S20802C1[3]),  3,4},
  {&(_tg__ZTV8S20802C2__8S20802C98S20802C8__8S20802C1[7]),  7,8},
  {&(_tg__ZTV8S20802C4__A1__8S20802C98S20802C8__8S20802C1[5]),  5,6},
  {&(_tg__ZTV8S20802C68S20802C2__A1__8S20802C98S20802C8__8S20802C1[2]),  2,4},
  {&(_tg__ZTV8S20802C38S20802C68S20802C2__A7__8S20802C98S20802C8__8S20802C1[2]),  2,3},
  {&(_tg__ZTV9S20802C108S20802C8__8S20802C1[6]),  6,9},
  {&(_tg__ZTV8S20802C49S20802C108S20802C8__A2__8S20802C1[4]),  4,5},
  {&(_tg__ZTV8S20802C3__8S20802C49S20802C108S20802C8__A2__8S20802C1[3]),  3,4},
  {&(_tg__ZTV8S20802C38S20802C5__A1__8S20802C49S20802C108S20802C8__A2__8S20802C1[3]),  3,4},
  {&(_tg__ZTV8S20802C2__9S20802C108S20802C8__8S20802C1[7]),  7,8},
  {&(_tg__ZTV8S20802C3__9S20802C108S20802C8__8S20802C1[3]),  3,4},
  {&(_tg__ZTV8S20802C4__9S20802C108S20802C8__8S20802C1[5]),  5,6},
  {&(_tg__ZTV8S20802C38S20802C5__A1__9S20802C108S20802C8__8S20802C1[3]),  3,4},
  {&(_tg__ZTV8S20802C68S20802C2__9S20802C108S20802C8__8S20802C1[2]),  2,4},
  {&(_tg__ZTV8S20802C38S20802C68S20802C2__A4__9S20802C108S20802C8__8S20802C1[2]),  2,3},
  {&(_tg__ZTV8S20802C4__A__9S20802C108S20802C8__8S20802C1[4]),  4,5},
  {&(_tg__ZTV8S20802C9__8S20802C8__8S20802C1[6]),  6,8},
  {&(_tg__ZTV8S20802C38S20802C5__A6__8S20802C8__8S20802C1[3]),  3,4},
  {&(_tg__ZTV8S20802C48S20802C9__8S20802C8__8S20802C1[4]),  4,5},
  {&(_tg__ZTV8S20802C3__A7__8S20802C8__8S20802C1[3]),  3,4},
  {&(_tg__ZTV8S20802C2__8S20802C8__8S20802C1[7]),  7,8},
  {&(_tg__ZTV8S20802C4__A1__8S20802C8__8S20802C1[5]),  5,6},
  {&(_tg__ZTV8S20802C68S20802C2__A2__8S20802C8__8S20802C1[2]),  2,4},
  {&(_tg__ZTV8S20802C38S20802C68S20802C2__A10__8S20802C8__8S20802C1[2]),  2,3},
  {&(_tg__ZTV9S20802C10__8S20802C8__8S20802C1[6]),  6,9},
  {&(_tg__ZTV8S20802C49S20802C10__A2__8S20802C8__8S20802C1[4]),  4,5},
  {&(_tg__ZTV8S20802C9__A1__8S20802C1[6]),  6,8},
  {&(_tg__ZTV8S20802C48S20802C9__A3__8S20802C1[4]),  4,5},
  {&(_tg__ZTV8S20802C3__8S20802C48S20802C9__A3__8S20802C1[3]),  3,4},
  {&(_tg__ZTV8S20802C38S20802C5__A1__8S20802C48S20802C9__A3__8S20802C1[3]),  3,4},
  {&(_tg__ZTV8S20802C38S20802C5__A3__8S20802C9__A1__8S20802C1[3]),  3,4},
  {&(_tg__ZTV8S20802C4__A__8S20802C9__A1__8S20802C1[4]),  4,5},
  {&(_tg__ZTV8S20802C3__A4__8S20802C9__A1__8S20802C1[3]),  3,4},
  {&(_tg__ZTV8S20802C2__8S20802C9__A1__8S20802C1[7]),  7,8},
  {&(_tg__ZTV8S20802C4__A1__8S20802C9__A1__8S20802C1[5]),  5,6},
  {&(_tg__ZTV8S20802C68S20802C2__A1__8S20802C9__A1__8S20802C1[2]),  2,4},
  {&(_tg__ZTV8S20802C38S20802C68S20802C2__A7__8S20802C9__A1__8S20802C1[2]),  2,3},
};
extern VTBL_ENTRY _ZTI8S20802C1[];
extern  VTBL_ENTRY _ZTV8S20802C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20802C1[];
Class_Descriptor cd_S20802C1 = {  "S20802C1", // class name
  bases_S20802C1, 44,
  &(vtc_S20802C1[0]), // expected_vtbl_contents
  &(vtt_S20802C1[0]), // expected_vtt_contents
  ABISELECT(5248,2736), // object size
  NSPAIRA(_ZTI8S20802C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20802C1),138, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20802C1),77, //virtual table table var
  44, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20803C3  {
  long double s20803c3f0;
  void *s20803c3f1[3];
  __tsi64 s20803c3f2;
  char s20803c3f3;
  long double s20803c3f4;
  int s20803c3f5;
  virtual void  v2(); // _ZN8S20803C32v2Ev
  ~S20803C3(); // tgen
  S20803C3(); // tgen
};
//SIG(-1 S20803C3) C1{ v1 FD Fp[3] FL Fc FD Fi}


void  S20803C3 ::v2(){vfunc_called(this, "_ZN8S20803C32v2Ev");}
S20803C3 ::~S20803C3(){ note_dtor("S20803C3", this);} // tgen
S20803C3 ::S20803C3(){ note_ctor("S20803C3", this);} // tgen

static void Test_S20803C3()
{
  extern Class_Descriptor cd_S20803C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,15)];
    init_test(&cd_S20803C3, buf);
    S20803C3 *dp, &lv = *(dp=new (buf) S20803C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S20803C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20803C3)");
    check_field_offset(lv, s20803c3f0, ABISELECT(16,4), "S20803C3.s20803c3f0");
    check_field_offset(lv, s20803c3f1, ABISELECT(32,16), "S20803C3.s20803c3f1");
    check_field_offset(lv, s20803c3f2, ABISELECT(56,28), "S20803C3.s20803c3f2");
    check_field_offset(lv, s20803c3f3, ABISELECT(64,36), "S20803C3.s20803c3f3");
    check_field_offset(lv, s20803c3f4, ABISELECT(80,40), "S20803C3.s20803c3f4");
    check_field_offset(lv, s20803c3f5, ABISELECT(96,52), "S20803C3.s20803c3f5");
    test_class_info(&lv, &cd_S20803C3);
    dp->~S20803C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20803C3(Test_S20803C3, "S20803C3", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S20803C3C1Ev();
extern void _ZN8S20803C3D1Ev();
Name_Map name_map_S20803C3[] = {
  NSPAIR(_ZN8S20803C3C1Ev),
  NSPAIR(_ZN8S20803C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20803C3[];
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY vtc_S20803C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C3[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
Class_Descriptor cd_S20803C3 = {  "S20803C3", // class name
  0,0,//no base classes
  &(vtc_S20803C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S20803C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20803C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20803C5  : S20803C3 {
  ~S20803C5(); // tgen
  S20803C5(); // tgen
};
//SIG(-1 S20803C5) C1{ BC2{ v1 FD Fp[3] FL Fc FD Fi}}


S20803C5 ::~S20803C5(){ note_dtor("S20803C5", this);} // tgen
S20803C5 ::S20803C5(){ note_ctor("S20803C5", this);} // tgen

static void Test_S20803C5()
{
  extern Class_Descriptor cd_S20803C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,15)];
    init_test(&cd_S20803C5, buf);
    S20803C5 *dp, &lv = *(dp=new (buf) S20803C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S20803C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20803C5)");
    check_base_class_offset(lv, (S20803C3*), 0, "S20803C5");
    test_class_info(&lv, &cd_S20803C5);
    dp->~S20803C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20803C5(Test_S20803C5, "S20803C5", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S20803C5C1Ev();
extern void _ZN8S20803C5D1Ev();
Name_Map name_map_S20803C5[] = {
  NSPAIR(_ZN8S20803C5C1Ev),
  NSPAIR(_ZN8S20803C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
static Base_Class bases_S20803C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20803C3,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20803C5[];
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY vtc_S20803C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C5[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
Class_Descriptor cd_S20803C5 = {  "S20803C5", // class name
  bases_S20803C5, 1,
  &(vtc_S20803C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S20803C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20803C5),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20803C4  : virtual S20803C3 , virtual S20803C5 {
  int s20803c4f0;
  __tsi64 s20803c4f1:5;
  long double s20803c4f2;
  ::S20803C5 s20803c4f3;
  ::S20803C3 s20803c4f4;
  virtual void  v3(); // _ZN8S20803C42v3Ev
  ~S20803C4(); // tgen
  S20803C4(); // tgen
};
//SIG(-1 S20803C4) C1{ VBC2{ v2 FD Fp[3] FL Fc FD Fi} VBC3{ BC2} v1 Fi FL:5 FD FC3 FC2}


void  S20803C4 ::v3(){vfunc_called(this, "_ZN8S20803C42v3Ev");}
S20803C4 ::~S20803C4(){ note_dtor("S20803C4", this);} // tgen
S20803C4 ::S20803C4(){ note_ctor("S20803C4", this);} // tgen

static void Test_S20803C4()
{
  extern Class_Descriptor cd_S20803C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(31,63)];
    init_test(&cd_S20803C4, buf);
    S20803C4 *dp, &lv = *(dp=new (buf) S20803C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,248), "sizeof(S20803C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20803C4)");
    /*is_ambiguous_... S20803C4::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*), ABISELECT(256,136), "S20803C4");
    check_base_class_offset(lv, (S20803C3*)(S20803C5*), ABISELECT(368,192), "S20803C4");
    check_base_class_offset(lv, (S20803C5*), ABISELECT(368,192), "S20803C4");
    check_field_offset(lv, s20803c4f0, ABISELECT(8,4), "S20803C4.s20803c4f0");
    set_bf_and_test(lv, s20803c4f1, ABISELECT(12,8), 0, 5, 1, "S20803C4");
    set_bf_and_test(lv, s20803c4f1, ABISELECT(12,8), 0, 5, hide_sll(1LL<<4), "S20803C4");
    check_field_offset(lv, s20803c4f2, ABISELECT(16,12), "S20803C4.s20803c4f2");
    check_field_offset(lv, s20803c4f3, ABISELECT(32,24), "S20803C4.s20803c4f3");
    check_field_offset(lv, s20803c4f4, ABISELECT(144,80), "S20803C4.s20803c4f4");
    test_class_info(&lv, &cd_S20803C4);
    dp->~S20803C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20803C4(Test_S20803C4, "S20803C4", ABISELECT(480,248));

#else // __cplusplus

extern void _ZN8S20803C4C1Ev();
extern void _ZN8S20803C4D1Ev();
Name_Map name_map_S20803C4[] = {
  NSPAIR(_ZN8S20803C4C1Ev),
  NSPAIR(_ZN8S20803C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
static Base_Class bases_S20803C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20803C3,    ABISELECT(256,136), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20803C3,    ABISELECT(368,192), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(368,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20803C4[];
extern void _ZN8S20803C42v3Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY vtc_S20803C4[] = {
  ABISELECT(368,192),
  ABISELECT(256,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
  0,
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  0,
  ABISELECT(-368,-192),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S20803C4[];
static  VTT_ENTRY vtt_S20803C4[] = {
  {&(_ZTV8S20803C4[4]),  4,13},
  {&(_ZTV8S20803C4[8]),  8,13},
  {&(_ZTV8S20803C4[12]),  12,13},
};
extern VTBL_ENTRY _ZTI8S20803C4[];
extern  VTBL_ENTRY _ZTV8S20803C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C4[];
Class_Descriptor cd_S20803C4 = {  "S20803C4", // class name
  bases_S20803C4, 3,
  &(vtc_S20803C4[0]), // expected_vtbl_contents
  &(vtt_S20803C4[0]), // expected_vtt_contents
  ABISELECT(480,248), // object size
  NSPAIRA(_ZTI8S20803C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20803C4),13, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20803C4),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20803C6  : S20803C5 , S20803C3 {
  long double s20803c6f0;
  virtual void  v4(); // _ZN8S20803C62v4Ev
  ~S20803C6(); // tgen
  S20803C6(); // tgen
};
//SIG(-1 S20803C6) C1{ BC2{ BC3{ v2 FD Fp[3] FL Fc FD Fi}} BC3 v1 FD}


void  S20803C6 ::v4(){vfunc_called(this, "_ZN8S20803C62v4Ev");}
S20803C6 ::~S20803C6(){ note_dtor("S20803C6", this);} // tgen
S20803C6 ::S20803C6(){ note_ctor("S20803C6", this);} // tgen

static void Test_S20803C6()
{
  extern Class_Descriptor cd_S20803C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,32)];
    init_test(&cd_S20803C6, buf);
    S20803C6 *dp, &lv = *(dp=new (buf) S20803C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,124), "sizeof(S20803C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20803C6)");
    check_base_class_offset(lv, (S20803C3*)(S20803C5*), 0, "S20803C6");
    check_base_class_offset(lv, (S20803C5*), 0, "S20803C6");
    /*is_ambiguous_... S20803C6::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*), ABISELECT(112,56), "S20803C6");
    check_field_offset(lv, s20803c6f0, ABISELECT(224,112), "S20803C6.s20803c6f0");
    test_class_info(&lv, &cd_S20803C6);
    dp->~S20803C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20803C6(Test_S20803C6, "S20803C6", ABISELECT(240,124));

#else // __cplusplus

extern void _ZN8S20803C6C1Ev();
extern void _ZN8S20803C6D1Ev();
Name_Map name_map_S20803C6[] = {
  NSPAIR(_ZN8S20803C6C1Ev),
  NSPAIR(_ZN8S20803C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
static Base_Class bases_S20803C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20803C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20803C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20803C3,    ABISELECT(112,56), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20803C6[];
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY vtc_S20803C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C6[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20803C6[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern VTBL_ENTRY _ZTI8S20803C6[];
extern  VTBL_ENTRY _ZTV8S20803C6[];
Class_Descriptor cd_S20803C6 = {  "S20803C6", // class name
  bases_S20803C6, 3,
  &(vtc_S20803C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,124), // object size
  NSPAIRA(_ZTI8S20803C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20803C6),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20803C2  : virtual S20803C3 , virtual S20803C4 , S20803C5 , S20803C6 {
  void *s20803c2f0;
  ~S20803C2(); // tgen
  S20803C2(); // tgen
};
//SIG(-1 S20803C2) C1{ VBC2{ v1 FD Fp[3] FL Fc FD Fi} VBC3{ VBC2 VBC4{ BC2} v2 Fi FL:5 FD FC4 FC2} BC4 BC5{ BC4 BC2 v3 FD} Fp}


S20803C2 ::~S20803C2(){ note_dtor("S20803C2", this);} // tgen
S20803C2 ::S20803C2(){ note_ctor("S20803C2", this);} // tgen

static void Test_S20803C2()
{
  extern Class_Descriptor cd_S20803C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,109)];
    init_test(&cd_S20803C2, buf);
    S20803C2 *dp, &lv = *(dp=new (buf) S20803C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,432), "sizeof(S20803C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20803C2)");
    /*is_ambiguous_... S20803C2::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*), ABISELECT(368,184), "S20803C2");
    /*is_ambiguous_... S20803C4::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C4*), ABISELECT(368,184), "S20803C2");
    /*is_ambiguous_... S20803C2::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*), ABISELECT(736,376), "S20803C2");
    check_base_class_offset(lv, (S20803C5*)(S20803C4*), ABISELECT(736,376), "S20803C2");
    check_base_class_offset(lv, (S20803C4*), ABISELECT(480,240), "S20803C2");
    /*is_ambiguous_... S20803C2::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*), 0, "S20803C2");
    /*is_ambiguous_... S20803C2::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C5*), 0, "S20803C2");
    check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C6*), ABISELECT(112,56), "S20803C2");
    check_base_class_offset(lv, (S20803C5*)(S20803C6*), ABISELECT(112,56), "S20803C2");
    /*is_ambiguous_... S20803C6::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C6*), ABISELECT(224,112), "S20803C2");
    check_base_class_offset(lv, (S20803C6*), ABISELECT(112,56), "S20803C2");
    check_field_offset(lv, s20803c2f0, ABISELECT(352,180), "S20803C2.s20803c2f0");
    test_class_info(&lv, &cd_S20803C2);
    dp->~S20803C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20803C2(Test_S20803C2, "S20803C2", ABISELECT(848,432));

#else // __cplusplus

extern void _ZN8S20803C2C1Ev();
extern void _ZN8S20803C2D1Ev();
Name_Map name_map_S20803C2[] = {
  NSPAIR(_ZN8S20803C2C1Ev),
  NSPAIR(_ZN8S20803C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C4;
extern VTBL_ENTRY _ZTI8S20803C4[];
extern  VTBL_ENTRY _ZTV8S20803C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C4[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C6;
extern VTBL_ENTRY _ZTI8S20803C6[];
extern  VTBL_ENTRY _ZTV8S20803C6[];
static Base_Class bases_S20803C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20803C3,    ABISELECT(368,184), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20803C3,    ABISELECT(736,376), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(736,376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20803C4,    ABISELECT(480,240), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20803C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20803C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20803C3,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(224,112), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20803C6,    ABISELECT(112,56), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20803C2[];
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C42v3Ev();
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY vtc_S20803C2[] = {
  ABISELECT(736,376),
  ABISELECT(480,240),
  ABISELECT(368,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  0,
  ABISELECT(-368,-184),
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(-480,-240),
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
  0,
  ABISELECT(-736,-376),
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S20803C2[];
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__8S20803C2[] = {
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__8S20803C4__8S20803C2[] = {
  0,
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A1__8S20803C4__8S20803C2[] = {
  0,
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
static  VTT_ENTRY vtt_S20803C2[] = {
  {&(_ZTV8S20803C2[5]),  5,27},
  {&(_ZTV8S20803C2[16]),  16,27},
  {&(_ZTV8S20803C2[22]),  22,27},
  {&(_ZTV8S20803C2[26]),  26,27},
  {&(_tg__ZTV8S20803C4__8S20803C2[4]),  4,5},
  {&(_tg__ZTV8S20803C3__8S20803C4__8S20803C2[3]),  3,4},
  {&(_tg__ZTV8S20803C38S20803C5__A1__8S20803C4__8S20803C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20803C2[];
extern  VTBL_ENTRY _ZTV8S20803C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C2[];
Class_Descriptor cd_S20803C2 = {  "S20803C2", // class name
  bases_S20803C2, 10,
  &(vtc_S20803C2[0]), // expected_vtbl_contents
  &(vtt_S20803C2[0]), // expected_vtt_contents
  ABISELECT(848,432), // object size
  NSPAIRA(_ZTI8S20803C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20803C2),27, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20803C2),7, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20803C7  {
  int s20803c7f0;
  __tsi64 s20803c7f1;
  virtual void  v5(); // _ZN8S20803C72v5Ev
  ~S20803C7(); // tgen
  S20803C7(); // tgen
};
//SIG(-1 S20803C7) C1{ v1 Fi FL}


void  S20803C7 ::v5(){vfunc_called(this, "_ZN8S20803C72v5Ev");}
S20803C7 ::~S20803C7(){ note_dtor("S20803C7", this);} // tgen
S20803C7 ::S20803C7(){ note_ctor("S20803C7", this);} // tgen

static void Test_S20803C7()
{
  extern Class_Descriptor cd_S20803C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20803C7, buf);
    S20803C7 *dp, &lv = *(dp=new (buf) S20803C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20803C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20803C7)");
    check_field_offset(lv, s20803c7f0, ABISELECT(8,4), "S20803C7.s20803c7f0");
    check_field_offset(lv, s20803c7f1, ABISELECT(16,8), "S20803C7.s20803c7f1");
    test_class_info(&lv, &cd_S20803C7);
    dp->~S20803C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20803C7(Test_S20803C7, "S20803C7", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20803C7C1Ev();
extern void _ZN8S20803C7D1Ev();
Name_Map name_map_S20803C7[] = {
  NSPAIR(_ZN8S20803C7C1Ev),
  NSPAIR(_ZN8S20803C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20803C7[];
extern void _ZN8S20803C72v5Ev();
static  VTBL_ENTRY vtc_S20803C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C7[0]),
  (VTBL_ENTRY)&_ZN8S20803C72v5Ev,
};
extern VTBL_ENTRY _ZTI8S20803C7[];
extern  VTBL_ENTRY _ZTV8S20803C7[];
Class_Descriptor cd_S20803C7 = {  "S20803C7", // class name
  0,0,//no base classes
  &(vtc_S20803C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20803C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20803C7),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20803C9  : S20803C6 , S20803C3 , virtual S20803C5 , S20803C4 , virtual S20803C2 {
  ::S20803C5 s20803c9f0;
  ~S20803C9(); // tgen
  S20803C9(); // tgen
};
//SIG(-1 S20803C9) C1{ BC2{ BC3{ BC4{ v1 FD Fp[3] FL Fc FD Fi}} BC4 v2 FD} BC4 VBC3 BC5{ VBC4 VBC3 v3 Fi FL:5 FD FC3 FC4} VBC6{ VBC4 VBC5 BC3 BC2 Fp} FC3}


S20803C9 ::~S20803C9(){ note_dtor("S20803C9", this);} // tgen
S20803C9 ::S20803C9(){ note_ctor("S20803C9", this);} // tgen

static void Test_S20803C9()
{
  extern Class_Descriptor cd_S20803C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(99,202)];
    init_test(&cd_S20803C9, buf);
    S20803C9 *dp, &lv = *(dp=new (buf) S20803C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1568,804), "sizeof(S20803C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20803C9)");
    /*is_ambiguous_... S20803C9::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C6*), 0, "S20803C9");
    /*is_ambiguous_... S20803C9::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C6*), 0, "S20803C9");
    /*is_ambiguous_... S20803C9::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C6*), ABISELECT(112,56), "S20803C9");
    /*is_ambiguous_... S20803C9::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C6*), 0, "S20803C9");
    /*is_ambiguous_... S20803C9::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*), ABISELECT(240,124), "S20803C9");
    /*is_ambiguous_... S20803C9::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*), ABISELECT(720,372), "S20803C9");
    /*is_ambiguous_... S20803C9::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C5*), ABISELECT(720,372), "S20803C9");
    /*is_ambiguous_... S20803C9::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C4*), ABISELECT(720,372), "S20803C9");
    /*is_ambiguous_... S20803C9::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C4*), ABISELECT(720,372), "S20803C9");
    /*is_ambiguous_... S20803C9::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C4*), ABISELECT(832,428), "S20803C9");
    /*is_ambiguous_... S20803C2::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C2*), ABISELECT(832,428), "S20803C9");
    /*is_ambiguous_... S20803C9::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C4*), ABISELECT(832,428), "S20803C9");
    /*is_ambiguous_... S20803C9::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C4*), ABISELECT(352,180), "S20803C9");
    check_base_class_offset(lv, (S20803C4*)(S20803C2*), ABISELECT(1312,668), "S20803C9");
    /*is_ambiguous_... S20803C2::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C2*), ABISELECT(944,484), "S20803C9");
    /*is_ambiguous_... S20803C2::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C2*), ABISELECT(944,484), "S20803C9");
    check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C6*)(S20803C2*), ABISELECT(1056,540), "S20803C9");
    check_base_class_offset(lv, (S20803C5*)(S20803C6*)(S20803C2*), ABISELECT(1056,540), "S20803C9");
    /*is_ambiguous_... S20803C6::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C6*)(S20803C2*), ABISELECT(1168,596), "S20803C9");
    check_base_class_offset(lv, (S20803C6*)(S20803C2*), ABISELECT(1056,540), "S20803C9");
    check_base_class_offset(lv, (S20803C2*), ABISELECT(944,484), "S20803C9");
    check_field_offset(lv, s20803c9f0, ABISELECT(608,316), "S20803C9.s20803c9f0");
    test_class_info(&lv, &cd_S20803C9);
    dp->~S20803C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20803C9(Test_S20803C9, "S20803C9", ABISELECT(1568,804));

#else // __cplusplus

extern void _ZN8S20803C9C1Ev();
extern void _ZN8S20803C9D1Ev();
Name_Map name_map_S20803C9[] = {
  NSPAIR(_ZN8S20803C9C1Ev),
  NSPAIR(_ZN8S20803C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C6;
extern VTBL_ENTRY _ZTI8S20803C6[];
extern  VTBL_ENTRY _ZTV8S20803C6[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C4;
extern VTBL_ENTRY _ZTI8S20803C4[];
extern  VTBL_ENTRY _ZTV8S20803C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C4[];
extern Class_Descriptor cd_S20803C4;
extern VTBL_ENTRY _ZTI8S20803C4[];
extern  VTBL_ENTRY _ZTV8S20803C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C4[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C6;
extern VTBL_ENTRY _ZTI8S20803C6[];
extern  VTBL_ENTRY _ZTV8S20803C6[];
extern Class_Descriptor cd_S20803C2;
extern VTBL_ENTRY _ZTI8S20803C2[];
extern  VTBL_ENTRY _ZTV8S20803C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C2[];
static Base_Class bases_S20803C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20803C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20803C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(112,56), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20803C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20803C3,    ABISELECT(240,124), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20803C3,    ABISELECT(720,372), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(720,372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20803C3,    ABISELECT(832,428), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20803C4,    ABISELECT(352,180), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20803C4,    ABISELECT(1312,668), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20803C3,    ABISELECT(944,484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(944,484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(1056,540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(1056,540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(1168,596), //bcp->offset
    39, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20803C6,    ABISELECT(1056,540), //bcp->offset
    35, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20803C2,    ABISELECT(944,484), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20803C9[];
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C42v3Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY vtc_S20803C9[] = {
  ABISELECT(1312,668),
  ABISELECT(944,484),
  ABISELECT(832,428),
  ABISELECT(720,372),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(368,192),
  ABISELECT(480,248),
  ABISELECT(-352,-180),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
  0,
  ABISELECT(-720,-372),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  0,
  ABISELECT(-832,-428),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(112,56),
  0,
  ABISELECT(-224,-112),
  ABISELECT(368,184),
  ABISELECT(-112,-56),
  ABISELECT(-944,-484),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(-1056,-540),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
  ABISELECT(-1168,-596),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  0,
  ABISELECT(-592,-296),
  ABISELECT(-480,-240),
  ABISELECT(-1312,-668),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20803C9[];
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__A__8S20803C9[] = {
  ABISELECT(368,192),
  ABISELECT(480,248),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__8S20803C4__A__8S20803C9[] = {
  0,
  ABISELECT(-480,-248),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A1__8S20803C4__A__8S20803C9[] = {
  0,
  ABISELECT(-368,-192),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C2__8S20803C9[] = {
  ABISELECT(-224,-112),
  ABISELECT(368,184),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__8S20803C2__8S20803C9[] = {
  0,
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__8S20803C2__8S20803C9[] = {
  0,
  ABISELECT(-592,-296),
  ABISELECT(-480,-240),
  ABISELECT(-368,-184),
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A1__8S20803C2__8S20803C9[] = {
  0,
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__A1__8S20803C9[] = {
  ABISELECT(-592,-296),
  ABISELECT(-480,-240),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__8S20803C4__A1__8S20803C9[] = {
  0,
  ABISELECT(480,240),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A1__8S20803C4__A1__8S20803C9[] = {
  0,
  ABISELECT(592,296),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
static  VTT_ENTRY vtt_S20803C9[] = {
  {&(_ZTV8S20803C9[6]),  6,48},
  {&(_tg__ZTV8S20803C4__A__8S20803C9[4]),  4,5},
  {&(_tg__ZTV8S20803C3__8S20803C4__A__8S20803C9[3]),  3,4},
  {&(_tg__ZTV8S20803C38S20803C5__A1__8S20803C4__A__8S20803C9[3]),  3,4},
  {&(_ZTV8S20803C9[22]),  22,48},
  {&(_ZTV8S20803C9[18]),  18,48},
  {&(_ZTV8S20803C9[26]),  26,48},
  {&(_ZTV8S20803C9[34]),  34,48},
  {&(_ZTV8S20803C9[47]),  47,48},
  {&(_ZTV8S20803C9[37]),  37,48},
  {&(_ZTV8S20803C9[41]),  41,48},
  {&(_tg__ZTV8S20803C2__8S20803C9[5]),  5,6},
  {&(_tg__ZTV8S20803C3__8S20803C2__8S20803C9[3]),  3,4},
  {&(_tg__ZTV8S20803C4__8S20803C2__8S20803C9[5]),  5,6},
  {&(_tg__ZTV8S20803C38S20803C5__A1__8S20803C2__8S20803C9[3]),  3,4},
  {&(_tg__ZTV8S20803C4__A1__8S20803C9[4]),  4,5},
  {&(_tg__ZTV8S20803C3__8S20803C4__A1__8S20803C9[3]),  3,4},
  {&(_tg__ZTV8S20803C38S20803C5__A1__8S20803C4__A1__8S20803C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20803C9[];
extern  VTBL_ENTRY _ZTV8S20803C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C9[];
Class_Descriptor cd_S20803C9 = {  "S20803C9", // class name
  bases_S20803C9, 17,
  &(vtc_S20803C9[0]), // expected_vtbl_contents
  &(vtt_S20803C9[0]), // expected_vtt_contents
  ABISELECT(1568,804), // object size
  NSPAIRA(_ZTI8S20803C9),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20803C9),48, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20803C9),18, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20803C10  : virtual S20803C2 , S20803C3 , S20803C4 , S20803C5 {
  int s20803c10f0;
  void *s20803c10f1;
  ::S20803C9 s20803c10f2;
  void *s20803c10f3;
  short s20803c10f4:4;
  unsigned char s20803c10f5:1;
  long double s20803c10f6[4];
  virtual void  v6(); // _ZN9S20803C102v6Ev
  virtual void  v7(); // _ZN9S20803C102v7Ev
  ~S20803C10(); // tgen
  S20803C10(); // tgen
};
//SIG(-1 S20803C10) C1{ VBC2{ VBC3{ v3 FD Fp[3] FL Fc FD Fi} VBC4{ VBC3 VBC5{ BC3} v4 Fi FL:5 FD FC5 FC3} BC5 BC6{ BC5 BC3 v5 FD} Fp} BC3 BC4 BC5 v1 v2 Fi Fp FC7{ BC6 BC3 VBC5 BC4 VBC2 FC5} Fp Fs:4 Fc:1 FD[4]}


void  S20803C10 ::v6(){vfunc_called(this, "_ZN9S20803C102v6Ev");}
void  S20803C10 ::v7(){vfunc_called(this, "_ZN9S20803C102v7Ev");}
S20803C10 ::~S20803C10(){ note_dtor("S20803C10", this);} // tgen
S20803C10 ::S20803C10(){ note_ctor("S20803C10", this);} // tgen

static void Test_S20803C10()
{
  extern Class_Descriptor cd_S20803C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(187,388)];
    init_test(&cd_S20803C10, buf);
    S20803C10 *dp, &lv = *(dp=new (buf) S20803C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2976,1548), "sizeof(S20803C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20803C10)");
    /*is_ambiguous_... S20803C2::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C2*), ABISELECT(2496,1300), "S20803C10");
    /*is_ambiguous_... S20803C10::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C4*), ABISELECT(2496,1300), "S20803C10");
    /*is_ambiguous_... S20803C10::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C4*), ABISELECT(2496,1300), "S20803C10");
    /*is_ambiguous_... S20803C10::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*), ABISELECT(2864,1492), "S20803C10");
    /*is_ambiguous_... S20803C10::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C4*), ABISELECT(2864,1492), "S20803C10");
    /*is_ambiguous_... S20803C10::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C4*), ABISELECT(2864,1492), "S20803C10");
    check_base_class_offset(lv, (S20803C4*)(S20803C2*), ABISELECT(2608,1356), "S20803C10");
    /*is_ambiguous_... S20803C2::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C2*), ABISELECT(2128,1116), "S20803C10");
    /*is_ambiguous_... S20803C2::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C2*), ABISELECT(2128,1116), "S20803C10");
    check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C6*)(S20803C2*), ABISELECT(2240,1172), "S20803C10");
    check_base_class_offset(lv, (S20803C5*)(S20803C6*)(S20803C2*), ABISELECT(2240,1172), "S20803C10");
    /*is_ambiguous_... S20803C6::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C6*)(S20803C2*), ABISELECT(2352,1228), "S20803C10");
    check_base_class_offset(lv, (S20803C6*)(S20803C2*), ABISELECT(2240,1172), "S20803C10");
    check_base_class_offset(lv, (S20803C2*), ABISELECT(2128,1116), "S20803C10");
    /*is_ambiguous_... S20803C10::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*), 0, "S20803C10");
    /*is_ambiguous_... S20803C10::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C4*), ABISELECT(112,56), "S20803C10");
    /*is_ambiguous_... S20803C10::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*), ABISELECT(368,192), "S20803C10");
    /*is_ambiguous_... S20803C10::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C5*), ABISELECT(368,192), "S20803C10");
    check_field_offset(lv, s20803c10f0, ABISELECT(468,248), "S20803C10.s20803c10f0");
    check_field_offset(lv, s20803c10f1, ABISELECT(472,252), "S20803C10.s20803c10f1");
    check_field_offset(lv, s20803c10f2, ABISELECT(480,256), "S20803C10.s20803c10f2");
    check_field_offset(lv, s20803c10f3, ABISELECT(2048,1060), "S20803C10.s20803c10f3");
    set_bf_and_test(lv, s20803c10f4, ABISELECT(2056,1064), 0, 4, 1, "S20803C10");
    set_bf_and_test(lv, s20803c10f4, ABISELECT(2056,1064), 0, 4, hide_sll(1LL<<3), "S20803C10");
    set_bf_and_test(lv, s20803c10f5, ABISELECT(2056,1064), 4, 1, 1, "S20803C10");
    check_field_offset(lv, s20803c10f6, ABISELECT(2064,1068), "S20803C10.s20803c10f6");
    test_class_info(&lv, &cd_S20803C10);
    dp->~S20803C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20803C10(Test_S20803C10, "S20803C10", ABISELECT(2976,1548));

#else // __cplusplus

extern void _ZN9S20803C10C1Ev();
extern void _ZN9S20803C10D1Ev();
Name_Map name_map_S20803C10[] = {
  NSPAIR(_ZN9S20803C10C1Ev),
  NSPAIR(_ZN9S20803C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C4;
extern VTBL_ENTRY _ZTI8S20803C4[];
extern  VTBL_ENTRY _ZTV8S20803C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C4[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C6;
extern VTBL_ENTRY _ZTI8S20803C6[];
extern  VTBL_ENTRY _ZTV8S20803C6[];
extern Class_Descriptor cd_S20803C2;
extern VTBL_ENTRY _ZTI8S20803C2[];
extern  VTBL_ENTRY _ZTV8S20803C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C2[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C4;
extern VTBL_ENTRY _ZTI8S20803C4[];
extern  VTBL_ENTRY _ZTV8S20803C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C4[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
static Base_Class bases_S20803C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20803C3,    ABISELECT(2496,1300), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20803C3,    ABISELECT(2864,1492), //bcp->offset
    42, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(2864,1492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20803C4,    ABISELECT(2608,1356), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20803C3,    ABISELECT(2128,1116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(2128,1116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(2240,1172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(2240,1172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(2352,1228), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20803C6,    ABISELECT(2240,1172), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20803C2,    ABISELECT(2128,1116), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20803C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20803C4,    ABISELECT(112,56), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20803C3,    ABISELECT(368,192), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(368,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20803C10[];
extern void _ZN8S20803C32v2Ev();
extern void _ZN9S20803C102v6Ev();
extern void _ZN9S20803C102v7Ev();
extern void _ZN8S20803C42v3Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C42v3Ev();
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY vtc_S20803C10[] = {
  ABISELECT(2864,1492),
  ABISELECT(2608,1356),
  ABISELECT(2496,1300),
  ABISELECT(2128,1116),
  0,
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN9S20803C102v6Ev,
  (VTBL_ENTRY)&_ZN9S20803C102v7Ev,
  ABISELECT(2752,1436),
  ABISELECT(2384,1244),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
  ABISELECT(-368,-192),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(112,56),
  0,
  ABISELECT(736,376),
  ABISELECT(480,240),
  ABISELECT(368,184),
  ABISELECT(-2128,-1116),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(-2240,-1172),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
  ABISELECT(-2352,-1228),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  0,
  ABISELECT(-2496,-1300),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(-2608,-1356),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
  0,
  ABISELECT(-2864,-1492),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern VTBL_ENTRY _ZTV9S20803C10[];
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__A__9S20803C10[] = {
  ABISELECT(2752,1436),
  ABISELECT(2384,1244),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__8S20803C4__A__9S20803C10[] = {
  0,
  ABISELECT(-2384,-1244),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A1__8S20803C4__A__9S20803C10[] = {
  0,
  ABISELECT(-2752,-1436),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C2__9S20803C10[] = {
  ABISELECT(736,376),
  ABISELECT(480,240),
  ABISELECT(368,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__8S20803C2__9S20803C10[] = {
  0,
  ABISELECT(-368,-184),
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__8S20803C2__9S20803C10[] = {
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(-480,-240),
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A1__8S20803C2__9S20803C10[] = {
  0,
  ABISELECT(-736,-376),
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__9S20803C10[] = {
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__8S20803C4__9S20803C10[] = {
  0,
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A1__8S20803C4__9S20803C10[] = {
  0,
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
static  VTT_ENTRY vtt_S20803C10[] = {
  {&(_ZTV9S20803C10[6]),  6,46},
  {&(_tg__ZTV8S20803C4__A__9S20803C10[4]),  4,5},
  {&(_tg__ZTV8S20803C3__8S20803C4__A__9S20803C10[3]),  3,4},
  {&(_tg__ZTV8S20803C38S20803C5__A1__8S20803C4__A__9S20803C10[3]),  3,4},
  {&(_ZTV9S20803C10[24]),  24,46},
  {&(_ZTV9S20803C10[35]),  35,46},
  {&(_ZTV9S20803C10[41]),  41,46},
  {&(_ZTV9S20803C10[45]),  45,46},
  {&(_ZTV9S20803C10[27]),  27,46},
  {&(_ZTV9S20803C10[31]),  31,46},
  {&(_ZTV9S20803C10[13]),  13,46},
  {&(_tg__ZTV8S20803C2__9S20803C10[5]),  5,6},
  {&(_tg__ZTV8S20803C3__8S20803C2__9S20803C10[3]),  3,4},
  {&(_tg__ZTV8S20803C4__8S20803C2__9S20803C10[5]),  5,6},
  {&(_tg__ZTV8S20803C38S20803C5__A1__8S20803C2__9S20803C10[3]),  3,4},
  {&(_tg__ZTV8S20803C4__9S20803C10[4]),  4,5},
  {&(_tg__ZTV8S20803C3__8S20803C4__9S20803C10[3]),  3,4},
  {&(_tg__ZTV8S20803C38S20803C5__A1__8S20803C4__9S20803C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20803C10[];
extern  VTBL_ENTRY _ZTV9S20803C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20803C10[];
Class_Descriptor cd_S20803C10 = {  "S20803C10", // class name
  bases_S20803C10, 15,
  &(vtc_S20803C10[0]), // expected_vtbl_contents
  &(vtt_S20803C10[0]), // expected_vtt_contents
  ABISELECT(2976,1548), // object size
  NSPAIRA(_ZTI9S20803C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20803C10),46, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20803C10),18, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20803C8  : S20803C6 , S20803C3 , S20803C9 , S20803C10 {
  long double s20803c8f0[3];
  __tsi64 s20803c8f1;
  char s20803c8f2;
  virtual void  v8(); // _ZN8S20803C82v8Ev
  virtual void  v9(); // _ZN8S20803C82v9Ev
  virtual void  v10(); // _ZN8S20803C83v10Ev
  ~S20803C8(); // tgen
  S20803C8(); // tgen
};
//SIG(-1 S20803C8) C1{ BC2{ BC3{ BC4{ v4 FD Fp[3] FL Fc FD Fi}} BC4 v5 FD} BC4 BC5{ BC2 BC4 VBC3 BC6{ VBC4 VBC3 v6 Fi FL:5 FD FC3 FC4} VBC7{ VBC4 VBC6 BC3 BC2 Fp} FC3} BC8{ VBC7 BC4 BC6 BC3 v7 v8 Fi Fp FC5 Fp Fs:4 Fc:1 FD[4]} v1 v2 v3 FD[3] FL Fc}


void  S20803C8 ::v8(){vfunc_called(this, "_ZN8S20803C82v8Ev");}
void  S20803C8 ::v9(){vfunc_called(this, "_ZN8S20803C82v9Ev");}
void  S20803C8 ::v10(){vfunc_called(this, "_ZN8S20803C83v10Ev");}
S20803C8 ::~S20803C8(){ note_dtor("S20803C8", this);} // tgen
S20803C8 ::S20803C8(){ note_ctor("S20803C8", this);} // tgen

static void Test_S20803C8()
{
  extern Class_Descriptor cd_S20803C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(258,538)];
    init_test(&cd_S20803C8, buf);
    S20803C8 *dp, &lv = *(dp=new (buf) S20803C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4112,2148), "sizeof(S20803C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20803C8)");
    /*is_ambiguous_... S20803C8::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C6*), 0, "S20803C8");
    /*is_ambiguous_... S20803C8::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C6*), 0, "S20803C8");
    /*is_ambiguous_... S20803C8::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C6*), ABISELECT(112,56), "S20803C8");
    /*is_ambiguous_... S20803C8::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C6*), 0, "S20803C8");
    /*is_ambiguous_... S20803C8::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*), ABISELECT(240,124), "S20803C8");
    /*is_ambiguous_... S20803C9::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C6*)(S20803C9*), ABISELECT(352,180), "S20803C8");
    /*is_ambiguous_... S20803C9::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C6*)(S20803C9*), ABISELECT(352,180), "S20803C8");
    /*is_ambiguous_... S20803C9::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C6*)(S20803C9*), ABISELECT(464,236), "S20803C8");
    /*is_ambiguous_... S20803C9::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C6*)(S20803C9*), ABISELECT(352,180), "S20803C8");
    /*is_ambiguous_... S20803C9::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C9*), ABISELECT(592,304), "S20803C8");
    /*is_ambiguous_... S20803C8::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*), ABISELECT(3264,1716), "S20803C8");
    /*is_ambiguous_... S20803C9::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C9*), ABISELECT(3264,1716), "S20803C8");
    /*is_ambiguous_... S20803C9::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C4*)(S20803C9*), ABISELECT(3264,1716), "S20803C8");
    /*is_ambiguous_... S20803C8::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C4*), ABISELECT(3264,1716), "S20803C8");
    /*is_ambiguous_... S20803C10::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C4*)(S20803C10*), ABISELECT(3264,1716), "S20803C8");
    /*is_ambiguous_... S20803C9::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C4*)(S20803C9*), ABISELECT(3376,1772), "S20803C8");
    /*is_ambiguous_... S20803C2::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C2*), ABISELECT(3376,1772), "S20803C8");
    /*is_ambiguous_... S20803C8::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C4*), ABISELECT(3376,1772), "S20803C8");
    /*is_ambiguous_... S20803C10::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C4*)(S20803C10*), ABISELECT(3376,1772), "S20803C8");
    /*is_ambiguous_... S20803C9::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C4*)(S20803C9*), ABISELECT(704,360), "S20803C8");
    check_base_class_offset(lv, (S20803C4*)(S20803C2*), ABISELECT(3856,2012), "S20803C8");
    /*is_ambiguous_... S20803C2::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C2*), ABISELECT(3488,1828), "S20803C8");
    /*is_ambiguous_... S20803C2::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C2*), ABISELECT(3488,1828), "S20803C8");
    check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C6*)(S20803C2*), ABISELECT(3600,1884), "S20803C8");
    check_base_class_offset(lv, (S20803C5*)(S20803C6*)(S20803C2*), ABISELECT(3600,1884), "S20803C8");
    /*is_ambiguous_... S20803C6::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C6*)(S20803C2*), ABISELECT(3712,1940), "S20803C8");
    check_base_class_offset(lv, (S20803C6*)(S20803C2*), ABISELECT(3600,1884), "S20803C8");
    check_base_class_offset(lv, (S20803C2*)(S20803C9*), ABISELECT(3488,1828), "S20803C8");
    check_base_class_offset(lv, (S20803C2*)(S20803C10*), ABISELECT(3488,1828), "S20803C8");
    check_base_class_offset(lv, (S20803C9*), ABISELECT(352,180), "S20803C8");
    /*is_ambiguous_... S20803C10::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C10*), ABISELECT(1072,552), "S20803C8");
    /*is_ambiguous_... S20803C10::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C4*)(S20803C10*), ABISELECT(1184,608), "S20803C8");
    /*is_ambiguous_... S20803C10::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C10*), ABISELECT(1440,744), "S20803C8");
    /*is_ambiguous_... S20803C10::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C10*), ABISELECT(1440,744), "S20803C8");
    check_base_class_offset(lv, (S20803C10*), ABISELECT(1072,552), "S20803C8");
    check_field_offset(lv, s20803c8f0, ABISELECT(3200,1668), "S20803C8.s20803c8f0");
    check_field_offset(lv, s20803c8f1, ABISELECT(3248,1704), "S20803C8.s20803c8f1");
    check_field_offset(lv, s20803c8f2, ABISELECT(3256,1712), "S20803C8.s20803c8f2");
    test_class_info(&lv, &cd_S20803C8);
    dp->~S20803C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20803C8(Test_S20803C8, "S20803C8", ABISELECT(4112,2148));

#else // __cplusplus

extern void _ZN8S20803C8C1Ev();
extern void _ZN8S20803C8D1Ev();
Name_Map name_map_S20803C8[] = {
  NSPAIR(_ZN8S20803C8C1Ev),
  NSPAIR(_ZN8S20803C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C6;
extern VTBL_ENTRY _ZTI8S20803C6[];
extern  VTBL_ENTRY _ZTV8S20803C6[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C6;
extern VTBL_ENTRY _ZTI8S20803C6[];
extern  VTBL_ENTRY _ZTV8S20803C6[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C4;
extern VTBL_ENTRY _ZTI8S20803C4[];
extern  VTBL_ENTRY _ZTV8S20803C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C4[];
extern Class_Descriptor cd_S20803C4;
extern VTBL_ENTRY _ZTI8S20803C4[];
extern  VTBL_ENTRY _ZTV8S20803C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C4[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C6;
extern VTBL_ENTRY _ZTI8S20803C6[];
extern  VTBL_ENTRY _ZTV8S20803C6[];
extern Class_Descriptor cd_S20803C2;
extern VTBL_ENTRY _ZTI8S20803C2[];
extern  VTBL_ENTRY _ZTV8S20803C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C2[];
extern Class_Descriptor cd_S20803C9;
extern VTBL_ENTRY _ZTI8S20803C9[];
extern  VTBL_ENTRY _ZTV8S20803C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C9[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C4;
extern VTBL_ENTRY _ZTI8S20803C4[];
extern  VTBL_ENTRY _ZTV8S20803C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C4[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C10;
extern VTBL_ENTRY _ZTI9S20803C10[];
extern  VTBL_ENTRY _ZTV9S20803C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20803C10[];
static Base_Class bases_S20803C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20803C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20803C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(112,56), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20803C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20803C3,    ABISELECT(240,124), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20803C3,    ABISELECT(352,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(352,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(464,236), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20803C6,    ABISELECT(352,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(592,304), //bcp->offset
    28, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(3264,1716), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(3264,1716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20803C3,    ABISELECT(3376,1772), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20803C4,    ABISELECT(704,360), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20803C4,    ABISELECT(3856,2012), //bcp->offset
    76, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S20803C3,    ABISELECT(3488,1828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(3488,1828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(3600,1884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(3600,1884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(3712,1940), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20803C6,    ABISELECT(3600,1884), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20803C2,    ABISELECT(3488,1828), //bcp->offset
    61, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S20803C9,    ABISELECT(352,180), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20803C3,    ABISELECT(1072,552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20803C4,    ABISELECT(1184,608), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(1440,744), //bcp->offset
    50, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(1440,744), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20803C10,    ABISELECT(1072,552), //bcp->offset
    36, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20803C8[];
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
extern void _ZN8S20803C82v8Ev();
extern void _ZN8S20803C82v9Ev();
extern void _ZN8S20803C83v10Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C42v3Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN9S20803C102v6Ev();
extern void _ZN9S20803C102v7Ev();
extern void _ZN8S20803C42v3Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY vtc_S20803C8[] = {
  ABISELECT(3856,2012),
  ABISELECT(3488,1828),
  ABISELECT(3376,1772),
  ABISELECT(3264,1716),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
  (VTBL_ENTRY)&_ZN8S20803C82v8Ev,
  (VTBL_ENTRY)&_ZN8S20803C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20803C83v10Ev,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(3504,1832),
  ABISELECT(3136,1648),
  ABISELECT(3024,1592),
  ABISELECT(2912,1536),
  ABISELECT(-352,-180),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
  ABISELECT(-464,-236),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(-592,-304),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(2560,1356),
  ABISELECT(2672,1412),
  ABISELECT(-704,-360),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
  ABISELECT(2192,1164),
  ABISELECT(2784,1460),
  ABISELECT(2304,1220),
  ABISELECT(2416,1276),
  ABISELECT(-1072,-552),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN9S20803C102v6Ev,
  (VTBL_ENTRY)&_ZN9S20803C102v7Ev,
  ABISELECT(2080,1108),
  ABISELECT(2192,1164),
  ABISELECT(-1184,-608),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
  ABISELECT(-1440,-744),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  0,
  ABISELECT(-3264,-1716),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  0,
  ABISELECT(-3376,-1772),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(112,56),
  0,
  ABISELECT(-224,-112),
  ABISELECT(368,184),
  ABISELECT(-112,-56),
  ABISELECT(-3488,-1828),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(-3600,-1884),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
  ABISELECT(-3712,-1940),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  0,
  ABISELECT(-592,-296),
  ABISELECT(-480,-240),
  ABISELECT(-3856,-2012),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20803C8[];
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C9__8S20803C8[] = {
  ABISELECT(3504,1832),
  ABISELECT(3136,1648),
  ABISELECT(3024,1592),
  ABISELECT(2912,1536),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C48S20803C9__8S20803C8[] = {
  ABISELECT(2560,1356),
  ABISELECT(2672,1412),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__8S20803C48S20803C9__8S20803C8[] = {
  0,
  ABISELECT(-2672,-1412),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A1__8S20803C48S20803C9__8S20803C8[] = {
  0,
  ABISELECT(-2560,-1356),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A3__8S20803C9__8S20803C8[] = {
  0,
  ABISELECT(-2912,-1536),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__A__8S20803C9__8S20803C8[] = {
  ABISELECT(2560,1356),
  ABISELECT(2672,1412),
  ABISELECT(-352,-180),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__A4__8S20803C9__8S20803C8[] = {
  0,
  ABISELECT(-3024,-1592),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C2__8S20803C9__8S20803C8[] = {
  ABISELECT(112,56),
  0,
  ABISELECT(-224,-112),
  ABISELECT(368,184),
  ABISELECT(-112,-56),
  ABISELECT(-3136,-1648),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__A1__8S20803C9__8S20803C8[] = {
  0,
  ABISELECT(-592,-296),
  ABISELECT(-480,-240),
  ABISELECT(-3504,-1832),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C68S20803C2__A1__8S20803C9__8S20803C8[] = {
  ABISELECT(-3248,-1704),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C68S20803C2__A7__8S20803C9__8S20803C8[] = {
  ABISELECT(-3360,-1760),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
extern void _ZN9S20803C102v6Ev();
extern void _ZN9S20803C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20803C10__8S20803C8[] = {
  ABISELECT(2192,1164),
  ABISELECT(2784,1460),
  ABISELECT(2304,1220),
  ABISELECT(2416,1276),
  0,
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN9S20803C102v6Ev,
  (VTBL_ENTRY)&_ZN9S20803C102v7Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C49S20803C10__A2__8S20803C8[] = {
  ABISELECT(2080,1108),
  ABISELECT(2192,1164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__8S20803C49S20803C10__A2__8S20803C8[] = {
  0,
  ABISELECT(-2192,-1164),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A1__8S20803C49S20803C10__A2__8S20803C8[] = {
  0,
  ABISELECT(-2080,-1108),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C2__9S20803C10__8S20803C8[] = {
  ABISELECT(112,56),
  0,
  ABISELECT(-224,-112),
  ABISELECT(368,184),
  ABISELECT(-112,-56),
  ABISELECT(-2416,-1276),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__9S20803C10__8S20803C8[] = {
  0,
  ABISELECT(-2304,-1220),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__9S20803C10__8S20803C8[] = {
  0,
  ABISELECT(-592,-296),
  ABISELECT(-480,-240),
  ABISELECT(-2784,-1460),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A1__9S20803C10__8S20803C8[] = {
  0,
  ABISELECT(-2192,-1164),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C68S20803C2__9S20803C10__8S20803C8[] = {
  ABISELECT(-2528,-1332),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C68S20803C2__A4__9S20803C10__8S20803C8[] = {
  ABISELECT(-2640,-1388),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__A__9S20803C10__8S20803C8[] = {
  ABISELECT(2080,1108),
  ABISELECT(2192,1164),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C2__8S20803C8[] = {
  ABISELECT(-224,-112),
  ABISELECT(368,184),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__8S20803C2__8S20803C8[] = {
  0,
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__8S20803C2__8S20803C8[] = {
  0,
  ABISELECT(-592,-296),
  ABISELECT(-480,-240),
  ABISELECT(-368,-184),
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A1__8S20803C2__8S20803C8[] = {
  0,
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__A1__8S20803C8[] = {
  ABISELECT(-592,-296),
  ABISELECT(-480,-240),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__8S20803C4__A1__8S20803C8[] = {
  0,
  ABISELECT(480,240),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A1__8S20803C4__A1__8S20803C8[] = {
  0,
  ABISELECT(592,296),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
static  VTT_ENTRY vtt_S20803C8[] = {
  {&(_ZTV8S20803C8[6]),  6,82},
  {&(_tg__ZTV8S20803C9__8S20803C8[6]),  6,8},
  {&(_tg__ZTV8S20803C48S20803C9__8S20803C8[4]),  4,5},
  {&(_tg__ZTV8S20803C3__8S20803C48S20803C9__8S20803C8[3]),  3,4},
  {&(_tg__ZTV8S20803C38S20803C5__A1__8S20803C48S20803C9__8S20803C8[3]),  3,4},
  {&(_tg__ZTV8S20803C38S20803C5__A3__8S20803C9__8S20803C8[3]),  3,4},
  {&(_tg__ZTV8S20803C4__A__8S20803C9__8S20803C8[4]),  4,5},
  {&(_tg__ZTV8S20803C3__A4__8S20803C9__8S20803C8[3]),  3,4},
  {&(_tg__ZTV8S20803C2__8S20803C9__8S20803C8[7]),  7,8},
  {&(_tg__ZTV8S20803C4__A1__8S20803C9__8S20803C8[5]),  5,6},
  {&(_tg__ZTV8S20803C68S20803C2__A1__8S20803C9__8S20803C8[2]),  2,4},
  {&(_tg__ZTV8S20803C38S20803C68S20803C2__A7__8S20803C9__8S20803C8[2]),  2,3},
  {&(_tg__ZTV9S20803C10__8S20803C8[6]),  6,9},
  {&(_tg__ZTV8S20803C49S20803C10__A2__8S20803C8[4]),  4,5},
  {&(_tg__ZTV8S20803C3__8S20803C49S20803C10__A2__8S20803C8[3]),  3,4},
  {&(_tg__ZTV8S20803C38S20803C5__A1__8S20803C49S20803C10__A2__8S20803C8[3]),  3,4},
  {&(_tg__ZTV8S20803C2__9S20803C10__8S20803C8[7]),  7,8},
  {&(_tg__ZTV8S20803C3__9S20803C10__8S20803C8[3]),  3,4},
  {&(_tg__ZTV8S20803C4__9S20803C10__8S20803C8[5]),  5,6},
  {&(_tg__ZTV8S20803C38S20803C5__A1__9S20803C10__8S20803C8[3]),  3,4},
  {&(_tg__ZTV8S20803C68S20803C2__9S20803C10__8S20803C8[2]),  2,4},
  {&(_tg__ZTV8S20803C38S20803C68S20803C2__A4__9S20803C10__8S20803C8[2]),  2,3},
  {&(_tg__ZTV8S20803C4__A__9S20803C10__8S20803C8[4]),  4,5},
  {&(_ZTV8S20803C8[23]),  23,82},
  {&(_ZTV8S20803C8[56]),  56,82},
  {&(_ZTV8S20803C8[35]),  35,82},
  {&(_ZTV8S20803C8[60]),  60,82},
  {&(_ZTV8S20803C8[68]),  68,82},
  {&(_ZTV8S20803C8[81]),  81,82},
  {&(_ZTV8S20803C8[71]),  71,82},
  {&(_ZTV8S20803C8[75]),  75,82},
  {&(_ZTV8S20803C8[42]),  42,82},
  {&(_ZTV8S20803C8[49]),  49,82},
  {&(_tg__ZTV8S20803C2__8S20803C8[5]),  5,6},
  {&(_tg__ZTV8S20803C3__8S20803C2__8S20803C8[3]),  3,4},
  {&(_tg__ZTV8S20803C4__8S20803C2__8S20803C8[5]),  5,6},
  {&(_tg__ZTV8S20803C38S20803C5__A1__8S20803C2__8S20803C8[3]),  3,4},
  {&(_tg__ZTV8S20803C4__A1__8S20803C8[4]),  4,5},
  {&(_tg__ZTV8S20803C3__8S20803C4__A1__8S20803C8[3]),  3,4},
  {&(_tg__ZTV8S20803C38S20803C5__A1__8S20803C4__A1__8S20803C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20803C8[];
extern  VTBL_ENTRY _ZTV8S20803C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C8[];
Class_Descriptor cd_S20803C8 = {  "S20803C8", // class name
  bases_S20803C8, 28,
  &(vtc_S20803C8[0]), // expected_vtbl_contents
  &(vtt_S20803C8[0]), // expected_vtt_contents
  ABISELECT(4112,2148), // object size
  NSPAIRA(_ZTI8S20803C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20803C8),82, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20803C8),40, //virtual table table var
  28, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20803C11  : S20803C5 , virtual S20803C3 , S20803C6 , virtual S20803C4 {
  ::S2489C12_nt s20803c11f0;
  int s20803c11f1;
  char s20803c11f2[3];
  int s20803c11f3;
  virtual void  v11(); // _ZN9S20803C113v11Ev
  virtual void  v12(); // _ZN9S20803C113v12Ev
  virtual void  v13(); // _ZN9S20803C113v13Ev
  ~S20803C11(); // tgen
  S20803C11(); // tgen
};
//SIG(-1 S20803C11) C1{ BC2{ BC3{ v4 FD Fp[3] FL Fc FD Fi}} VBC3 BC4{ BC2 BC3 v5 FD} VBC5{ VBC3 VBC2 v6 Fi FL:5 FD FC2 FC3} v1 v2 v3 FC6{} Fi Fc[3] Fi}


void  S20803C11 ::v11(){vfunc_called(this, "_ZN9S20803C113v11Ev");}
void  S20803C11 ::v12(){vfunc_called(this, "_ZN9S20803C113v12Ev");}
void  S20803C11 ::v13(){vfunc_called(this, "_ZN9S20803C113v13Ev");}
S20803C11 ::~S20803C11(){ note_dtor("S20803C11", this);} // tgen
S20803C11 ::S20803C11(){ note_ctor("S20803C11", this);} // tgen

static void Test_S20803C11()
{
  extern Class_Descriptor cd_S20803C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,112)];
    init_test(&cd_S20803C11, buf);
    S20803C11 *dp, &lv = *(dp=new (buf) S20803C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,444), "sizeof(S20803C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20803C11)");
    /*is_ambiguous_... S20803C11::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*), 0, "S20803C11");
    /*is_ambiguous_... S20803C11::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C5*), 0, "S20803C11");
    /*is_ambiguous_... S20803C11::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*), ABISELECT(368,196), "S20803C11");
    /*is_ambiguous_... S20803C4::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C4*), ABISELECT(368,196), "S20803C11");
    check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C6*), ABISELECT(112,56), "S20803C11");
    check_base_class_offset(lv, (S20803C5*)(S20803C6*), ABISELECT(112,56), "S20803C11");
    /*is_ambiguous_... S20803C6::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C6*), ABISELECT(224,112), "S20803C11");
    check_base_class_offset(lv, (S20803C6*), ABISELECT(112,56), "S20803C11");
    /*is_ambiguous_... S20803C11::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*), ABISELECT(736,388), "S20803C11");
    check_base_class_offset(lv, (S20803C5*)(S20803C4*), ABISELECT(736,388), "S20803C11");
    check_base_class_offset(lv, (S20803C4*), ABISELECT(480,252), "S20803C11");
    check_field_offset(lv, s20803c11f0, ABISELECT(352,180), "S20803C11.s20803c11f0");
    check_field_offset(lv, s20803c11f1, ABISELECT(356,184), "S20803C11.s20803c11f1");
    check_field_offset(lv, s20803c11f2, ABISELECT(360,188), "S20803C11.s20803c11f2");
    check_field_offset(lv, s20803c11f3, ABISELECT(364,192), "S20803C11.s20803c11f3");
    test_class_info(&lv, &cd_S20803C11);
    dp->~S20803C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20803C11(Test_S20803C11, "S20803C11", ABISELECT(848,444));

#else // __cplusplus

extern void _ZN9S20803C11C1Ev();
extern void _ZN9S20803C11D1Ev();
Name_Map name_map_S20803C11[] = {
  NSPAIR(_ZN9S20803C11C1Ev),
  NSPAIR(_ZN9S20803C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C6;
extern VTBL_ENTRY _ZTI8S20803C6[];
extern  VTBL_ENTRY _ZTV8S20803C6[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C4;
extern VTBL_ENTRY _ZTI8S20803C4[];
extern  VTBL_ENTRY _ZTV8S20803C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C4[];
static Base_Class bases_S20803C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20803C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20803C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20803C3,    ABISELECT(368,196), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20803C3,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(224,112), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20803C6,    ABISELECT(112,56), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20803C3,    ABISELECT(736,388), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(736,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20803C4,    ABISELECT(480,252), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20803C11[];
extern void _ZN8S20803C32v2Ev();
extern void _ZN9S20803C113v11Ev();
extern void _ZN9S20803C113v12Ev();
extern void _ZN9S20803C113v13Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C42v3Ev();
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY vtc_S20803C11[] = {
  ABISELECT(736,388),
  ABISELECT(480,252),
  ABISELECT(368,196),
  0,
  (VTBL_ENTRY)&(_ZTI9S20803C11[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN9S20803C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20803C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20803C113v13Ev,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI9S20803C11[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI9S20803C11[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  0,
  ABISELECT(-368,-196),
  (VTBL_ENTRY)&(_ZTI9S20803C11[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(-480,-252),
  (VTBL_ENTRY)&(_ZTI9S20803C11[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
  0,
  ABISELECT(-736,-388),
  (VTBL_ENTRY)&(_ZTI9S20803C11[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern VTBL_ENTRY _ZTV9S20803C11[];
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__9S20803C11[] = {
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__8S20803C4__9S20803C11[] = {
  0,
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A1__8S20803C4__9S20803C11[] = {
  0,
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
static  VTT_ENTRY vtt_S20803C11[] = {
  {&(_ZTV9S20803C11[5]),  5,30},
  {&(_ZTV9S20803C11[19]),  19,30},
  {&(_ZTV9S20803C11[25]),  25,30},
  {&(_ZTV9S20803C11[29]),  29,30},
  {&(_tg__ZTV8S20803C4__9S20803C11[4]),  4,5},
  {&(_tg__ZTV8S20803C3__8S20803C4__9S20803C11[3]),  3,4},
  {&(_tg__ZTV8S20803C38S20803C5__A1__8S20803C4__9S20803C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20803C11[];
extern  VTBL_ENTRY _ZTV9S20803C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20803C11[];
Class_Descriptor cd_S20803C11 = {  "S20803C11", // class name
  bases_S20803C11, 10,
  &(vtc_S20803C11[0]), // expected_vtbl_contents
  &(vtt_S20803C11[0]), // expected_vtt_contents
  ABISELECT(848,444), // object size
  NSPAIRA(_ZTI9S20803C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20803C11),30, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20803C11),7, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20803C1  : virtual S20803C2 , S20803C7 , virtual S20803C8 , virtual S20803C9 , S20803C11 {
  char s20803c1f0;
  virtual void  v1(); // _ZN8S20803C12v1Ev
  ~S20803C1(); // tgen
  S20803C1(); // tgen
};
//SIG(1 S20803C1) C1{ VBC2{ VBC3{ v2 FD Fp[3] FL Fc FD Fi} VBC4{ VBC3 VBC5{ BC3} v3 Fi FL:5 FD FC5 FC3} BC5 BC6{ BC5 BC3 v4 FD} Fp} BC7{ v5 Fi FL} VBC8{ BC6 BC3 BC9{ BC6 BC3 VBC5 BC4 VBC2 FC5} BC10{ VBC2 BC3 BC4 BC5 v6 v7 Fi Fp FC9 Fp Fs:4 Fc:1 FD[4]} v8 v9 v10 FD[3] FL Fc} VBC9 BC11{ BC5 VBC3 BC6 VBC4 v11 v12 v13 FC12{} Fi Fc[3] Fi} v1 Fc}


void  S20803C1 ::v1(){vfunc_called(this, "_ZN8S20803C12v1Ev");}
S20803C1 ::~S20803C1(){ note_dtor("S20803C1", this);} // tgen
S20803C1 ::S20803C1(){ note_ctor("S20803C1", this);} // tgen

static void Test_S20803C1()
{
  extern Class_Descriptor cd_S20803C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(329,685)];
    init_test(&cd_S20803C1, buf);
    S20803C1 *dp, &lv = *(dp=new (buf) S20803C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5248,2736), "sizeof(S20803C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20803C1)");
    /*is_ambiguous_... S20803C2::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C2*), ABISELECT(784,400), "S20803C1");
    /*is_ambiguous_... S20803C1::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C4*), ABISELECT(784,400), "S20803C1");
    /*is_ambiguous_... S20803C9::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C4*)(S20803C9*)(S20803C8*), ABISELECT(784,400), "S20803C1");
    /*is_ambiguous_... S20803C10::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C4*)(S20803C10*)(S20803C8*), ABISELECT(784,400), "S20803C1");
    /*is_ambiguous_... S20803C1::S20803C9 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C4*)(S20803C9*), ABISELECT(784,400), "S20803C1");
    /*is_ambiguous_... S20803C11::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C11*), ABISELECT(784,400), "S20803C1");
    /*is_ambiguous_... S20803C1::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*), ABISELECT(1152,592), "S20803C1");
    /*is_ambiguous_... S20803C1::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C4*), ABISELECT(1152,592), "S20803C1");
    /*is_ambiguous_... S20803C9::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C9*)(S20803C8*), ABISELECT(1152,592), "S20803C1");
    /*is_ambiguous_... S20803C9::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C4*)(S20803C9*)(S20803C8*), ABISELECT(1152,592), "S20803C1");
    /*is_ambiguous_... S20803C10::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C4*)(S20803C10*)(S20803C8*), ABISELECT(1152,592), "S20803C1");
    /*is_ambiguous_... S20803C1::S20803C9 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C9*), ABISELECT(1152,592), "S20803C1");
    /*is_ambiguous_... S20803C1::S20803C9 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C4*)(S20803C9*), ABISELECT(1152,592), "S20803C1");
    check_base_class_offset(lv, (S20803C4*)(S20803C2*), ABISELECT(896,456), "S20803C1");
    check_base_class_offset(lv, (S20803C4*)(S20803C11*), ABISELECT(896,456), "S20803C1");
    /*is_ambiguous_... S20803C2::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C2*), ABISELECT(416,216), "S20803C1");
    /*is_ambiguous_... S20803C2::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C2*), ABISELECT(416,216), "S20803C1");
    check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C6*)(S20803C2*), ABISELECT(528,272), "S20803C1");
    check_base_class_offset(lv, (S20803C5*)(S20803C6*)(S20803C2*), ABISELECT(528,272), "S20803C1");
    /*is_ambiguous_... S20803C6::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C6*)(S20803C2*), ABISELECT(640,328), "S20803C1");
    check_base_class_offset(lv, (S20803C6*)(S20803C2*), ABISELECT(528,272), "S20803C1");
    check_base_class_offset(lv, (S20803C2*), ABISELECT(416,216), "S20803C1");
    check_base_class_offset(lv, (S20803C2*)(S20803C9*)(S20803C8*), ABISELECT(416,216), "S20803C1");
    check_base_class_offset(lv, (S20803C2*)(S20803C10*)(S20803C8*), ABISELECT(416,216), "S20803C1");
    /*is_ambiguous_... S20803C1::S20803C9 */ AMB_check_base_class_offset(lv, (S20803C2*)(S20803C9*), ABISELECT(416,216), "S20803C1");
    check_base_class_offset(lv, (S20803C7*), 0, "S20803C1");
    /*is_ambiguous_... S20803C8::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C6*)(S20803C8*), ABISELECT(1264,648), "S20803C1");
    /*is_ambiguous_... S20803C8::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C6*)(S20803C8*), ABISELECT(1264,648), "S20803C1");
    /*is_ambiguous_... S20803C8::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C6*)(S20803C8*), ABISELECT(1376,704), "S20803C1");
    /*is_ambiguous_... S20803C8::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C6*)(S20803C8*), ABISELECT(1264,648), "S20803C1");
    /*is_ambiguous_... S20803C8::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C8*), ABISELECT(1504,772), "S20803C1");
    /*is_ambiguous_... S20803C9::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C6*)(S20803C9*)(S20803C8*), ABISELECT(1616,828), "S20803C1");
    /*is_ambiguous_... S20803C9::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C6*)(S20803C9*)(S20803C8*), ABISELECT(1616,828), "S20803C1");
    /*is_ambiguous_... S20803C9::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C6*)(S20803C9*)(S20803C8*), ABISELECT(1728,884), "S20803C1");
    /*is_ambiguous_... S20803C9::S20803C6 */ AMB_check_base_class_offset(lv, (S20803C6*)(S20803C9*)(S20803C8*), ABISELECT(1616,828), "S20803C1");
    /*is_ambiguous_... S20803C9::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C9*)(S20803C8*), ABISELECT(1856,952), "S20803C1");
    /*is_ambiguous_... S20803C9::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C4*)(S20803C9*)(S20803C8*), ABISELECT(1968,1008), "S20803C1");
    check_base_class_offset(lv, (S20803C9*)(S20803C8*), ABISELECT(1616,828), "S20803C1");
    /*is_ambiguous_... S20803C10::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C10*)(S20803C8*), ABISELECT(2336,1200), "S20803C1");
    /*is_ambiguous_... S20803C10::S20803C4 */ AMB_check_base_class_offset(lv, (S20803C4*)(S20803C10*)(S20803C8*), ABISELECT(2448,1256), "S20803C1");
    /*is_ambiguous_... S20803C10::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C10*)(S20803C8*), ABISELECT(2704,1392), "S20803C1");
    /*is_ambiguous_... S20803C10::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C10*)(S20803C8*), ABISELECT(2704,1392), "S20803C1");
    check_base_class_offset(lv, (S20803C10*)(S20803C8*), ABISELECT(2336,1200), "S20803C1");
    check_base_class_offset(lv, (S20803C8*), ABISELECT(1264,648), "S20803C1");
    /*is_ambiguous_... S20803C1::S20803C9 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C6*)(S20803C9*), ABISELECT(4528,2364), "S20803C1");
    /*is_ambiguous_... S20803C1::S20803C9 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C6*)(S20803C9*), ABISELECT(4528,2364), "S20803C1");
    /*is_ambiguous_... S20803C1::S20803C9 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C6*)(S20803C9*), ABISELECT(4640,2420), "S20803C1");
    /*is_ambiguous_... S20803C1::S20803C9 */ AMB_check_base_class_offset(lv, (S20803C6*)(S20803C9*), ABISELECT(4528,2364), "S20803C1");
    /*is_ambiguous_... S20803C1::S20803C9 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C9*), ABISELECT(4768,2488), "S20803C1");
    /*is_ambiguous_... S20803C1::S20803C9 */ AMB_check_base_class_offset(lv, (S20803C4*)(S20803C9*), ABISELECT(4880,2544), "S20803C1");
    /*is_ambiguous_... S20803C1::S20803C9 */ AMB_check_base_class_offset(lv, (S20803C9*), ABISELECT(4528,2364), "S20803C1");
    /*is_ambiguous_... S20803C11::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C11*), ABISELECT(32,16), "S20803C1");
    /*is_ambiguous_... S20803C11::S20803C5 */ AMB_check_base_class_offset(lv, (S20803C5*)(S20803C11*), ABISELECT(32,16), "S20803C1");
    check_base_class_offset(lv, (S20803C3*)(S20803C5*)(S20803C6*)(S20803C11*), ABISELECT(144,72), "S20803C1");
    check_base_class_offset(lv, (S20803C5*)(S20803C6*)(S20803C11*), ABISELECT(144,72), "S20803C1");
    /*is_ambiguous_... S20803C6::S20803C3 */ AMB_check_base_class_offset(lv, (S20803C3*)(S20803C6*)(S20803C11*), ABISELECT(256,128), "S20803C1");
    check_base_class_offset(lv, (S20803C6*)(S20803C11*), ABISELECT(144,72), "S20803C1");
    check_base_class_offset(lv, (S20803C11*), ABISELECT(32,16), "S20803C1");
    check_field_offset(lv, s20803c1f0, ABISELECT(400,212), "S20803C1.s20803c1f0");
    test_class_info(&lv, &cd_S20803C1);
    dp->~S20803C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20803C1(Test_S20803C1, "S20803C1", ABISELECT(5248,2736));

#else // __cplusplus

extern void _ZN8S20803C1C1Ev();
extern void _ZN8S20803C1D1Ev();
Name_Map name_map_S20803C1[] = {
  NSPAIR(_ZN8S20803C1C1Ev),
  NSPAIR(_ZN8S20803C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C4;
extern VTBL_ENTRY _ZTI8S20803C4[];
extern  VTBL_ENTRY _ZTV8S20803C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C4[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C6;
extern VTBL_ENTRY _ZTI8S20803C6[];
extern  VTBL_ENTRY _ZTV8S20803C6[];
extern Class_Descriptor cd_S20803C2;
extern VTBL_ENTRY _ZTI8S20803C2[];
extern  VTBL_ENTRY _ZTV8S20803C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C2[];
extern Class_Descriptor cd_S20803C7;
extern VTBL_ENTRY _ZTI8S20803C7[];
extern  VTBL_ENTRY _ZTV8S20803C7[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C6;
extern VTBL_ENTRY _ZTI8S20803C6[];
extern  VTBL_ENTRY _ZTV8S20803C6[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C6;
extern VTBL_ENTRY _ZTI8S20803C6[];
extern  VTBL_ENTRY _ZTV8S20803C6[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C4;
extern VTBL_ENTRY _ZTI8S20803C4[];
extern  VTBL_ENTRY _ZTV8S20803C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C4[];
extern Class_Descriptor cd_S20803C9;
extern VTBL_ENTRY _ZTI8S20803C9[];
extern  VTBL_ENTRY _ZTV8S20803C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C9[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C4;
extern VTBL_ENTRY _ZTI8S20803C4[];
extern  VTBL_ENTRY _ZTV8S20803C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C4[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C10;
extern VTBL_ENTRY _ZTI9S20803C10[];
extern  VTBL_ENTRY _ZTV9S20803C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20803C10[];
extern Class_Descriptor cd_S20803C8;
extern VTBL_ENTRY _ZTI8S20803C8[];
extern  VTBL_ENTRY _ZTV8S20803C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C8[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C6;
extern VTBL_ENTRY _ZTI8S20803C6[];
extern  VTBL_ENTRY _ZTV8S20803C6[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C4;
extern VTBL_ENTRY _ZTI8S20803C4[];
extern  VTBL_ENTRY _ZTV8S20803C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C4[];
extern Class_Descriptor cd_S20803C9;
extern VTBL_ENTRY _ZTI8S20803C9[];
extern  VTBL_ENTRY _ZTV8S20803C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C9[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C5;
extern VTBL_ENTRY _ZTI8S20803C5[];
extern  VTBL_ENTRY _ZTV8S20803C5[];
extern Class_Descriptor cd_S20803C3;
extern VTBL_ENTRY _ZTI8S20803C3[];
extern  VTBL_ENTRY _ZTV8S20803C3[];
extern Class_Descriptor cd_S20803C6;
extern VTBL_ENTRY _ZTI8S20803C6[];
extern  VTBL_ENTRY _ZTV8S20803C6[];
extern Class_Descriptor cd_S20803C11;
extern VTBL_ENTRY _ZTI9S20803C11[];
extern  VTBL_ENTRY _ZTV9S20803C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20803C11[];
static Base_Class bases_S20803C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20803C3,    ABISELECT(784,400), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20803C3,    ABISELECT(1152,592), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(1152,592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20803C4,    ABISELECT(896,456), //bcp->offset
    45, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20803C3,    ABISELECT(416,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(416,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(528,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(528,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(640,328), //bcp->offset
    38, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20803C6,    ABISELECT(528,272), //bcp->offset
    34, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20803C2,    ABISELECT(416,216), //bcp->offset
    26, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20803C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20803C3,    ABISELECT(1264,648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(1264,648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(1376,704), //bcp->offset
    74, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20803C6,    ABISELECT(1264,648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(1504,772), //bcp->offset
    77, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(1616,828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(1616,828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(1728,884), //bcp->offset
    88, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20803C6,    ABISELECT(1616,828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(1856,952), //bcp->offset
    91, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20803C4,    ABISELECT(1968,1008), //bcp->offset
    94, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20803C9,    ABISELECT(1616,828), //bcp->offset
    80, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(2336,1200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20803C4,    ABISELECT(2448,1256), //bcp->offset
    108, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(2704,1392), //bcp->offset
    113, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(2704,1392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20803C10,    ABISELECT(2336,1200), //bcp->offset
    99, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20803C8,    ABISELECT(1264,648), //bcp->offset
    55, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20803C3,    ABISELECT(4528,2364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(4528,2364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(4640,2420), //bcp->offset
    127, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S20803C6,    ABISELECT(4528,2364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(4768,2488), //bcp->offset
    130, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20803C4,    ABISELECT(4880,2544), //bcp->offset
    133, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20803C9,    ABISELECT(4528,2364), //bcp->offset
    116, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20803C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(144,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S20803C5,    ABISELECT(144,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S20803C3,    ABISELECT(256,128), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S20803C6,    ABISELECT(144,72), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S20803C11,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20803C1[];
extern void _ZN8S20803C72v5Ev();
extern void _ZN8S20803C12v1Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN9S20803C113v11Ev();
extern void _ZN9S20803C113v12Ev();
extern void _ZN9S20803C113v13Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C42v3Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
extern void _ZN8S20803C82v8Ev();
extern void _ZN8S20803C82v9Ev();
extern void _ZN8S20803C83v10Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C42v3Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN9S20803C102v6Ev();
extern void _ZN9S20803C102v7Ev();
extern void _ZN8S20803C42v3Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY vtc_S20803C1[] = {
  ABISELECT(4528,2364),
  ABISELECT(1264,648),
  ABISELECT(1152,592),
  ABISELECT(896,456),
  ABISELECT(784,400),
  ABISELECT(416,216),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20803C12v1Ev,
  ABISELECT(1120,576),
  ABISELECT(864,440),
  ABISELECT(752,384),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN9S20803C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20803C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20803C113v13Ev,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
  ABISELECT(-256,-128),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(112,56),
  0,
  ABISELECT(736,376),
  ABISELECT(480,240),
  ABISELECT(368,184),
  ABISELECT(-416,-216),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(-528,-272),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
  ABISELECT(-640,-328),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  0,
  ABISELECT(-784,-400),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(-896,-456),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
  0,
  ABISELECT(-1152,-592),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(1072,552),
  ABISELECT(1072,552),
  ABISELECT(704,360),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-192),
  ABISELECT(-848,-432),
  ABISELECT(-480,-248),
  ABISELECT(-112,-56),
  ABISELECT(-1264,-648),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
  (VTBL_ENTRY)&_ZN8S20803C82v8Ev,
  (VTBL_ENTRY)&_ZN8S20803C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20803C83v10Ev,
  ABISELECT(-1376,-704),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(-1504,-772),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(-720,-372),
  ABISELECT(-1200,-612),
  ABISELECT(-832,-428),
  ABISELECT(-464,-236),
  ABISELECT(-1616,-828),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
  ABISELECT(-1728,-884),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(-1856,-952),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(-816,-416),
  ABISELECT(-1184,-608),
  ABISELECT(-1968,-1008),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
  ABISELECT(-1184,-608),
  ABISELECT(-1440,-744),
  ABISELECT(-1552,-800),
  ABISELECT(-1920,-984),
  ABISELECT(-2336,-1200),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN9S20803C102v6Ev,
  (VTBL_ENTRY)&_ZN9S20803C102v7Ev,
  ABISELECT(-1296,-664),
  ABISELECT(-1664,-856),
  ABISELECT(-2448,-1256),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
  ABISELECT(-2704,-1392),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(352,180),
  0,
  0,
  ABISELECT(-3632,-1908),
  ABISELECT(-4112,-2148),
  ABISELECT(-3744,-1964),
  ABISELECT(-3376,-1772),
  ABISELECT(-4528,-2364),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
  ABISELECT(-4640,-2420),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(-4768,-2488),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  ABISELECT(-3728,-1952),
  ABISELECT(-4096,-2144),
  ABISELECT(-4880,-2544),
  (VTBL_ENTRY)&(_ZTI8S20803C1[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20803C1[];
extern void _ZN8S20803C32v2Ev();
extern void _ZN9S20803C113v11Ev();
extern void _ZN9S20803C113v12Ev();
extern void _ZN9S20803C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20803C11__8S20803C1[] = {
  ABISELECT(1120,576),
  ABISELECT(864,440),
  ABISELECT(752,384),
  0,
  (VTBL_ENTRY)&(_ZTI9S20803C11[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN9S20803C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20803C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20803C113v13Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__A1__9S20803C11__8S20803C1[] = {
  0,
  ABISELECT(-752,-384),
  (VTBL_ENTRY)&(_ZTI9S20803C11[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__9S20803C11__8S20803C1[] = {
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(-864,-440),
  (VTBL_ENTRY)&(_ZTI9S20803C11[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A4__9S20803C11__8S20803C1[] = {
  0,
  ABISELECT(-1120,-576),
  (VTBL_ENTRY)&(_ZTI9S20803C11[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C2__8S20803C1[] = {
  ABISELECT(736,376),
  ABISELECT(480,240),
  ABISELECT(368,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__8S20803C2__8S20803C1[] = {
  0,
  ABISELECT(-368,-184),
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__8S20803C2__8S20803C1[] = {
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(-480,-240),
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A1__8S20803C2__8S20803C1[] = {
  0,
  ABISELECT(-736,-376),
  (VTBL_ENTRY)&(_ZTI8S20803C2[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__8S20803C1[] = {
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__8S20803C4__8S20803C1[] = {
  0,
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A1__8S20803C4__8S20803C1[] = {
  0,
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
extern void _ZN8S20803C82v8Ev();
extern void _ZN8S20803C82v9Ev();
extern void _ZN8S20803C83v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C8__8S20803C1[] = {
  ABISELECT(-368,-192),
  ABISELECT(-848,-432),
  ABISELECT(-480,-248),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
  (VTBL_ENTRY)&_ZN8S20803C82v8Ev,
  (VTBL_ENTRY)&_ZN8S20803C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20803C83v10Ev,
};
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C98S20803C8__8S20803C1[] = {
  ABISELECT(-720,-372),
  ABISELECT(-1200,-612),
  ABISELECT(-832,-428),
  ABISELECT(-464,-236),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C48S20803C98S20803C8__A1__8S20803C1[] = {
  ABISELECT(-816,-416),
  ABISELECT(-1184,-608),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__8S20803C48S20803C98S20803C8__A1__8S20803C1[] = {
  0,
  ABISELECT(1184,608),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A1__8S20803C48S20803C98S20803C8__A1__8S20803C1[] = {
  0,
  ABISELECT(816,416),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A3__8S20803C98S20803C8__8S20803C1[] = {
  0,
  ABISELECT(464,236),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__A__8S20803C98S20803C8__8S20803C1[] = {
  ABISELECT(-816,-416),
  ABISELECT(-1184,-608),
  ABISELECT(-352,-180),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__A4__8S20803C98S20803C8__8S20803C1[] = {
  0,
  ABISELECT(832,428),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C2__8S20803C98S20803C8__8S20803C1[] = {
  ABISELECT(112,56),
  0,
  ABISELECT(736,376),
  ABISELECT(480,240),
  ABISELECT(368,184),
  ABISELECT(1200,612),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__A1__8S20803C98S20803C8__8S20803C1[] = {
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(720,372),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C68S20803C2__A1__8S20803C98S20803C8__8S20803C1[] = {
  ABISELECT(1088,556),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C68S20803C2__A7__8S20803C98S20803C8__8S20803C1[] = {
  ABISELECT(976,500),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
extern void _ZN9S20803C102v6Ev();
extern void _ZN9S20803C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20803C108S20803C8__8S20803C1[] = {
  ABISELECT(-1184,-608),
  ABISELECT(-1440,-744),
  ABISELECT(-1552,-800),
  ABISELECT(-1920,-984),
  0,
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN9S20803C102v6Ev,
  (VTBL_ENTRY)&_ZN9S20803C102v7Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C49S20803C108S20803C8__A2__8S20803C1[] = {
  ABISELECT(-1296,-664),
  ABISELECT(-1664,-856),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__8S20803C49S20803C108S20803C8__A2__8S20803C1[] = {
  0,
  ABISELECT(1664,856),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A1__8S20803C49S20803C108S20803C8__A2__8S20803C1[] = {
  0,
  ABISELECT(1296,664),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C2__9S20803C108S20803C8__8S20803C1[] = {
  ABISELECT(112,56),
  0,
  ABISELECT(736,376),
  ABISELECT(480,240),
  ABISELECT(368,184),
  ABISELECT(1920,984),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__9S20803C108S20803C8__8S20803C1[] = {
  0,
  ABISELECT(1552,800),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__9S20803C108S20803C8__8S20803C1[] = {
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(1440,744),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A1__9S20803C108S20803C8__8S20803C1[] = {
  0,
  ABISELECT(1184,608),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C68S20803C2__9S20803C108S20803C8__8S20803C1[] = {
  ABISELECT(1808,928),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C68S20803C2__A4__9S20803C108S20803C8__8S20803C1[] = {
  ABISELECT(1696,872),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__A__9S20803C108S20803C8__8S20803C1[] = {
  ABISELECT(-1296,-664),
  ABISELECT(-1664,-856),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI9S20803C10[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C9__8S20803C8__8S20803C1[] = {
  ABISELECT(-720,-372),
  ABISELECT(-1200,-612),
  ABISELECT(-832,-428),
  ABISELECT(-464,-236),
  ABISELECT(-352,-180),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A6__8S20803C8__8S20803C1[] = {
  0,
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C48S20803C9__8S20803C8__8S20803C1[] = {
  ABISELECT(-816,-416),
  ABISELECT(-1184,-608),
  ABISELECT(-704,-360),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__A7__8S20803C8__8S20803C1[] = {
  0,
  ABISELECT(480,248),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C2__8S20803C8__8S20803C1[] = {
  ABISELECT(112,56),
  0,
  ABISELECT(736,376),
  ABISELECT(480,240),
  ABISELECT(368,184),
  ABISELECT(848,432),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__A1__8S20803C8__8S20803C1[] = {
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(368,192),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C68S20803C2__A2__8S20803C8__8S20803C1[] = {
  ABISELECT(736,376),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C68S20803C2__A10__8S20803C8__8S20803C1[] = {
  ABISELECT(624,320),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
extern void _ZN9S20803C102v6Ev();
extern void _ZN9S20803C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20803C10__8S20803C8__8S20803C1[] = {
  ABISELECT(-1184,-608),
  ABISELECT(-1440,-744),
  ABISELECT(-1552,-800),
  ABISELECT(-1920,-984),
  ABISELECT(-1072,-552),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN9S20803C102v6Ev,
  (VTBL_ENTRY)&_ZN9S20803C102v7Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C49S20803C10__A2__8S20803C8__8S20803C1[] = {
  ABISELECT(-1296,-664),
  ABISELECT(-1664,-856),
  ABISELECT(-1184,-608),
  (VTBL_ENTRY)&(_ZTI8S20803C8[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C9__A1__8S20803C1[] = {
  ABISELECT(-3632,-1908),
  ABISELECT(-4112,-2148),
  ABISELECT(-3744,-1964),
  ABISELECT(-3376,-1772),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C48S20803C9__A3__8S20803C1[] = {
  ABISELECT(-3728,-1952),
  ABISELECT(-4096,-2144),
  0,
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__8S20803C48S20803C9__A3__8S20803C1[] = {
  0,
  ABISELECT(4096,2144),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A1__8S20803C48S20803C9__A3__8S20803C1[] = {
  0,
  ABISELECT(3728,1952),
  (VTBL_ENTRY)&(_ZTI8S20803C4[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C5__A3__8S20803C9__A1__8S20803C1[] = {
  0,
  ABISELECT(3376,1772),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__A__8S20803C9__A1__8S20803C1[] = {
  ABISELECT(-3728,-1952),
  ABISELECT(-4096,-2144),
  ABISELECT(-352,-180),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C3__A4__8S20803C9__A1__8S20803C1[] = {
  0,
  ABISELECT(3744,1964),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C2__8S20803C9__A1__8S20803C1[] = {
  ABISELECT(112,56),
  0,
  ABISELECT(736,376),
  ABISELECT(480,240),
  ABISELECT(368,184),
  ABISELECT(4112,2148),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
extern void _ZN8S20803C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C4__A1__8S20803C9__A1__8S20803C1[] = {
  0,
  ABISELECT(256,136),
  ABISELECT(-112,-56),
  ABISELECT(3632,1908),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C42v3Ev,
};
extern void _ZN8S20803C32v2Ev();
extern void _ZN8S20803C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C68S20803C2__A1__8S20803C9__A1__8S20803C1[] = {
  ABISELECT(4000,2092),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20803C62v4Ev,
};
extern void _ZN8S20803C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20803C38S20803C68S20803C2__A7__8S20803C9__A1__8S20803C1[] = {
  ABISELECT(3888,2036),
  (VTBL_ENTRY)&(_ZTI8S20803C9[0]),
  (VTBL_ENTRY)&_ZN8S20803C32v2Ev,
};
static  VTT_ENTRY vtt_S20803C1[] = {
  {&(_ZTV8S20803C1[8]),  8,138},
  {&(_tg__ZTV9S20803C11__8S20803C1[5]),  5,9},
  {&(_tg__ZTV8S20803C3__A1__9S20803C11__8S20803C1[3]),  3,4},
  {&(_tg__ZTV8S20803C4__9S20803C11__8S20803C1[5]),  5,6},
  {&(_tg__ZTV8S20803C38S20803C5__A4__9S20803C11__8S20803C1[3]),  3,4},
  {&(_ZTV8S20803C1[33]),  33,138},
  {&(_ZTV8S20803C1[44]),  44,138},
  {&(_ZTV8S20803C1[50]),  50,138},
  {&(_ZTV8S20803C1[54]),  54,138},
  {&(_ZTV8S20803C1[36]),  36,138},
  {&(_ZTV8S20803C1[40]),  40,138},
  {&(_ZTV8S20803C1[69]),  69,138},
  {&(_ZTV8S20803C1[76]),  76,138},
  {&(_ZTV8S20803C1[79]),  79,138},
  {&(_ZTV8S20803C1[86]),  86,138},
  {&(_ZTV8S20803C1[90]),  90,138},
  {&(_ZTV8S20803C1[93]),  93,138},
  {&(_ZTV8S20803C1[98]),  98,138},
  {&(_ZTV8S20803C1[105]),  105,138},
  {&(_ZTV8S20803C1[112]),  112,138},
  {&(_ZTV8S20803C1[115]),  115,138},
  {&(_ZTV8S20803C1[125]),  125,138},
  {&(_ZTV8S20803C1[129]),  129,138},
  {&(_ZTV8S20803C1[132]),  132,138},
  {&(_ZTV8S20803C1[137]),  137,138},
  {&(_ZTV8S20803C1[15]),  15,138},
  {&(_tg__ZTV8S20803C2__8S20803C1[5]),  5,6},
  {&(_tg__ZTV8S20803C3__8S20803C2__8S20803C1[3]),  3,4},
  {&(_tg__ZTV8S20803C4__8S20803C2__8S20803C1[5]),  5,6},
  {&(_tg__ZTV8S20803C38S20803C5__A1__8S20803C2__8S20803C1[3]),  3,4},
  {&(_tg__ZTV8S20803C4__8S20803C1[4]),  4,5},
  {&(_tg__ZTV8S20803C3__8S20803C4__8S20803C1[3]),  3,4},
  {&(_tg__ZTV8S20803C38S20803C5__A1__8S20803C4__8S20803C1[3]),  3,4},
  {&(_tg__ZTV8S20803C8__8S20803C1[6]),  6,11},
  {&(_tg__ZTV8S20803C98S20803C8__8S20803C1[6]),  6,8},
  {&(_tg__ZTV8S20803C48S20803C98S20803C8__A1__8S20803C1[4]),  4,5},
  {&(_tg__ZTV8S20803C3__8S20803C48S20803C98S20803C8__A1__8S20803C1[3]),  3,4},
  {&(_tg__ZTV8S20803C38S20803C5__A1__8S20803C48S20803C98S20803C8__A1__8S20803C1[3]),  3,4},
  {&(_tg__ZTV8S20803C38S20803C5__A3__8S20803C98S20803C8__8S20803C1[3]),  3,4},
  {&(_tg__ZTV8S20803C4__A__8S20803C98S20803C8__8S20803C1[4]),  4,5},
  {&(_tg__ZTV8S20803C3__A4__8S20803C98S20803C8__8S20803C1[3]),  3,4},
  {&(_tg__ZTV8S20803C2__8S20803C98S20803C8__8S20803C1[7]),  7,8},
  {&(_tg__ZTV8S20803C4__A1__8S20803C98S20803C8__8S20803C1[5]),  5,6},
  {&(_tg__ZTV8S20803C68S20803C2__A1__8S20803C98S20803C8__8S20803C1[2]),  2,4},
  {&(_tg__ZTV8S20803C38S20803C68S20803C2__A7__8S20803C98S20803C8__8S20803C1[2]),  2,3},
  {&(_tg__ZTV9S20803C108S20803C8__8S20803C1[6]),  6,9},
  {&(_tg__ZTV8S20803C49S20803C108S20803C8__A2__8S20803C1[4]),  4,5},
  {&(_tg__ZTV8S20803C3__8S20803C49S20803C108S20803C8__A2__8S20803C1[3]),  3,4},
  {&(_tg__ZTV8S20803C38S20803C5__A1__8S20803C49S20803C108S20803C8__A2__8S20803C1[3]),  3,4},
  {&(_tg__ZTV8S20803C2__9S20803C108S20803C8__8S20803C1[7]),  7,8},
  {&(_tg__ZTV8S20803C3__9S20803C108S20803C8__8S20803C1[3]),  3,4},
  {&(_tg__ZTV8S20803C4__9S20803C108S20803C8__8S20803C1[5]),  5,6},
  {&(_tg__ZTV8S20803C38S20803C5__A1__9S20803C108S20803C8__8S20803C1[3]),  3,4},
  {&(_tg__ZTV8S20803C68S20803C2__9S20803C108S20803C8__8S20803C1[2]),  2,4},
  {&(_tg__ZTV8S20803C38S20803C68S20803C2__A4__9S20803C108S20803C8__8S20803C1[2]),  2,3},
  {&(_tg__ZTV8S20803C4__A__9S20803C108S20803C8__8S20803C1[4]),  4,5},
  {&(_tg__ZTV8S20803C9__8S20803C8__8S20803C1[6]),  6,8},
  {&(_tg__ZTV8S20803C38S20803C5__A6__8S20803C8__8S20803C1[3]),  3,4},
  {&(_tg__ZTV8S20803C48S20803C9__8S20803C8__8S20803C1[4]),  4,5},
  {&(_tg__ZTV8S20803C3__A7__8S20803C8__8S20803C1[3]),  3,4},
  {&(_tg__ZTV8S20803C2__8S20803C8__8S20803C1[7]),  7,8},
  {&(_tg__ZTV8S20803C4__A1__8S20803C8__8S20803C1[5]),  5,6},
  {&(_tg__ZTV8S20803C68S20803C2__A2__8S20803C8__8S20803C1[2]),  2,4},
  {&(_tg__ZTV8S20803C38S20803C68S20803C2__A10__8S20803C8__8S20803C1[2]),  2,3},
  {&(_tg__ZTV9S20803C10__8S20803C8__8S20803C1[6]),  6,9},
  {&(_tg__ZTV8S20803C49S20803C10__A2__8S20803C8__8S20803C1[4]),  4,5},
  {&(_tg__ZTV8S20803C9__A1__8S20803C1[6]),  6,8},
  {&(_tg__ZTV8S20803C48S20803C9__A3__8S20803C1[4]),  4,5},
  {&(_tg__ZTV8S20803C3__8S20803C48S20803C9__A3__8S20803C1[3]),  3,4},
  {&(_tg__ZTV8S20803C38S20803C5__A1__8S20803C48S20803C9__A3__8S20803C1[3]),  3,4},
  {&(_tg__ZTV8S20803C38S20803C5__A3__8S20803C9__A1__8S20803C1[3]),  3,4},
  {&(_tg__ZTV8S20803C4__A__8S20803C9__A1__8S20803C1[4]),  4,5},
  {&(_tg__ZTV8S20803C3__A4__8S20803C9__A1__8S20803C1[3]),  3,4},
  {&(_tg__ZTV8S20803C2__8S20803C9__A1__8S20803C1[7]),  7,8},
  {&(_tg__ZTV8S20803C4__A1__8S20803C9__A1__8S20803C1[5]),  5,6},
  {&(_tg__ZTV8S20803C68S20803C2__A1__8S20803C9__A1__8S20803C1[2]),  2,4},
  {&(_tg__ZTV8S20803C38S20803C68S20803C2__A7__8S20803C9__A1__8S20803C1[2]),  2,3},
};
extern VTBL_ENTRY _ZTI8S20803C1[];
extern  VTBL_ENTRY _ZTV8S20803C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20803C1[];
Class_Descriptor cd_S20803C1 = {  "S20803C1", // class name
  bases_S20803C1, 44,
  &(vtc_S20803C1[0]), // expected_vtbl_contents
  &(vtt_S20803C1[0]), // expected_vtt_contents
  ABISELECT(5248,2736), // object size
  NSPAIRA(_ZTI8S20803C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20803C1),138, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20803C1),77, //virtual table table var
  44, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6396C2  {
  void *s6396c2f0[2];
  int s6396c2f1[2];
  void *s6396c2f2[15];
  int s6396c2f3;
  ::S20113C11 s6396c2f4;
  virtual void  v1(); // _ZN7S6396C22v1Ev
  virtual void  v2(); // _ZN7S6396C22v2Ev
  ~S6396C2(); // tgen
  S6396C2(); // tgen
};
//SIG(-1 S6396C2) C1{ v1 v2 Fp[2] Fi[2] Fp[15] Fi FC2{ VBC3{ BC4{ v4} Fc[5] FC5{ VBC4 v6 v7 v8 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC5 FC4 Fc Fi Fs[5] Fi[8] FL Fc:8} v3 Fp FL Fp[6] FC4 FC7{ BC4 v5 Fc FL Fi[3] FC3} Fp Fi}}


void  S6396C2 ::v1(){vfunc_called(this, "_ZN7S6396C22v1Ev");}
void  S6396C2 ::v2(){vfunc_called(this, "_ZN7S6396C22v2Ev");}
S6396C2 ::~S6396C2(){ note_dtor("S6396C2", this);} // tgen
S6396C2 ::S6396C2(){ note_ctor("S6396C2", this);} // tgen

static void Test_S6396C2()
{
  extern Class_Descriptor cd_S6396C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(114,134)];
    init_test(&cd_S6396C2, buf);
    S6396C2 *dp, &lv = *(dp=new (buf) S6396C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(904,532), "sizeof(S6396C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6396C2)");
    check_field_offset(lv, s6396c2f0, ABISELECT(8,4), "S6396C2.s6396c2f0");
    check_field_offset(lv, s6396c2f1, ABISELECT(24,12), "S6396C2.s6396c2f1");
    check_field_offset(lv, s6396c2f2, ABISELECT(32,20), "S6396C2.s6396c2f2");
    check_field_offset(lv, s6396c2f3, ABISELECT(152,80), "S6396C2.s6396c2f3");
    check_field_offset(lv, s6396c2f4, ABISELECT(160,84), "S6396C2.s6396c2f4");
    test_class_info(&lv, &cd_S6396C2);
    dp->~S6396C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6396C2(Test_S6396C2, "S6396C2", ABISELECT(904,532));

#else // __cplusplus

extern void _ZN7S6396C2C1Ev();
extern void _ZN7S6396C2D1Ev();
Name_Map name_map_S6396C2[] = {
  NSPAIR(_ZN7S6396C2C1Ev),
  NSPAIR(_ZN7S6396C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6396C2[];
extern void _ZN7S6396C22v1Ev();
extern void _ZN7S6396C22v2Ev();
static  VTBL_ENTRY vtc_S6396C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6396C2[0]),
  (VTBL_ENTRY)&_ZN7S6396C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6396C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S6396C2[];
extern  VTBL_ENTRY _ZTV7S6396C2[];
Class_Descriptor cd_S6396C2 = {  "S6396C2", // class name
  0,0,//no base classes
  &(vtc_S6396C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(904,532), // object size
  NSPAIRA(_ZTI7S6396C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6396C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6396C10  {
  ::S2489C12_nt s6396c10f0;
  int s6396c10f1:3;
  void *s6396c10f2;
  int s6396c10f3;
  virtual void  v3(); // _ZN8S6396C102v3Ev
  ~S6396C10(); // tgen
  S6396C10(); // tgen
};
//SIG(-1 S6396C10) C1{ v1 FC2{} Fi:3 Fp Fi}


void  S6396C10 ::v3(){vfunc_called(this, "_ZN8S6396C102v3Ev");}
S6396C10 ::~S6396C10(){ note_dtor("S6396C10", this);} // tgen
S6396C10 ::S6396C10(){ note_ctor("S6396C10", this);} // tgen

static void Test_S6396C10()
{
  extern Class_Descriptor cd_S6396C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S6396C10, buf);
    S6396C10 *dp, &lv = *(dp=new (buf) S6396C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S6396C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6396C10)");
    check_field_offset(lv, s6396c10f0, ABISELECT(8,4), "S6396C10.s6396c10f0");
    set_bf_and_test(lv, s6396c10f1, ABISELECT(9,5), 0, 3, 1, "S6396C10");
    set_bf_and_test(lv, s6396c10f1, ABISELECT(9,5), 0, 3, hide_sll(1LL<<2), "S6396C10");
    check_field_offset(lv, s6396c10f2, ABISELECT(16,8), "S6396C10.s6396c10f2");
    check_field_offset(lv, s6396c10f3, ABISELECT(24,12), "S6396C10.s6396c10f3");
    test_class_info(&lv, &cd_S6396C10);
    dp->~S6396C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6396C10(Test_S6396C10, "S6396C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S6396C10C1Ev();
extern void _ZN8S6396C10D1Ev();
Name_Map name_map_S6396C10[] = {
  NSPAIR(_ZN8S6396C10C1Ev),
  NSPAIR(_ZN8S6396C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S6396C10[];
extern void _ZN8S6396C102v3Ev();
static  VTBL_ENTRY vtc_S6396C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6396C10[0]),
  (VTBL_ENTRY)&_ZN8S6396C102v3Ev,
};
extern VTBL_ENTRY _ZTI8S6396C10[];
extern  VTBL_ENTRY _ZTV8S6396C10[];
Class_Descriptor cd_S6396C10 = {  "S6396C10", // class name
  0,0,//no base classes
  &(vtc_S6396C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S6396C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S6396C10),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6396C5  {
  virtual void  v4(); // _ZN7S6396C52v4Ev
  ~S6396C5(); // tgen
  S6396C5(); // tgen
};
//SIG(-1 S6396C5) C1{ v1}


void  S6396C5 ::v4(){vfunc_called(this, "_ZN7S6396C52v4Ev");}
S6396C5 ::~S6396C5(){ note_dtor("S6396C5", this);} // tgen
S6396C5 ::S6396C5(){ note_ctor("S6396C5", this);} // tgen

static void Test_S6396C5()
{
  extern Class_Descriptor cd_S6396C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6396C5, buf);
    S6396C5 *dp, &lv = *(dp=new (buf) S6396C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6396C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6396C5)");
    test_class_info(&lv, &cd_S6396C5);
    dp->~S6396C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6396C5(Test_S6396C5, "S6396C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6396C5C1Ev();
extern void _ZN7S6396C5D1Ev();
Name_Map name_map_S6396C5[] = {
  NSPAIR(_ZN7S6396C5C1Ev),
  NSPAIR(_ZN7S6396C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6396C5[];
extern void _ZN7S6396C52v4Ev();
static  VTBL_ENTRY vtc_S6396C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6396C5[0]),
  (VTBL_ENTRY)&_ZN7S6396C52v4Ev,
};
extern VTBL_ENTRY _ZTI7S6396C5[];
extern  VTBL_ENTRY _ZTV7S6396C5[];
Class_Descriptor cd_S6396C5 = {  "S6396C5", // class name
  0,0,//no base classes
  &(vtc_S6396C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6396C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6396C5),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6396C4  : S6396C5 {
  char s6396c4f0[5];
  ::S20113C7 s6396c4f1[2];
  int s6396c4f2;
  void *s6396c4f3[7];
  ::S20113C7 s6396c4f4;
  ::S6396C5 s6396c4f5;
  char s6396c4f6;
  int s6396c4f7;
  short s6396c4f8[5];
  int s6396c4f9[8];
  __tsi64 s6396c4f10;
  char s6396c4f11:8;
  ~S6396C4(); // tgen
  S6396C4(); // tgen
};
//SIG(-1 S6396C4) C1{ BC2{ v1} Fc[5] FC3{ VBC4{ v5} v2 v3 v4 Fp[3] FC5{} Fp}[2] Fi Fp[7] FC3 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}


S6396C4 ::~S6396C4(){ note_dtor("S6396C4", this);} // tgen
S6396C4 ::S6396C4(){ note_ctor("S6396C4", this);} // tgen

static void Test_S6396C4()
{
  extern Class_Descriptor cd_S6396C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,47)];
    init_test(&cd_S6396C4, buf);
    S6396C4 *dp, &lv = *(dp=new (buf) S6396C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,184), "sizeof(S6396C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6396C4)");
    check_base_class_offset(lv, (S6396C5*), 0, "S6396C4");
    check_field_offset(lv, s6396c4f0, ABISELECT(8,4), "S6396C4.s6396c4f0");
    check_field_offset(lv, s6396c4f1, ABISELECT(16,12), "S6396C4.s6396c4f1");
    check_field_offset(lv, s6396c4f2, ABISELECT(112,60), "S6396C4.s6396c4f2");
    check_field_offset(lv, s6396c4f3, ABISELECT(120,64), "S6396C4.s6396c4f3");
    check_field_offset(lv, s6396c4f4, ABISELECT(176,92), "S6396C4.s6396c4f4");
    check_field_offset(lv, s6396c4f5, ABISELECT(224,116), "S6396C4.s6396c4f5");
    check_field_offset(lv, s6396c4f6, ABISELECT(232,120), "S6396C4.s6396c4f6");
    check_field_offset(lv, s6396c4f7, ABISELECT(236,124), "S6396C4.s6396c4f7");
    check_field_offset(lv, s6396c4f8, ABISELECT(240,128), "S6396C4.s6396c4f8");
    check_field_offset(lv, s6396c4f9, ABISELECT(252,140), "S6396C4.s6396c4f9");
    check_field_offset(lv, s6396c4f10, ABISELECT(288,172), "S6396C4.s6396c4f10");
    set_bf_and_test(lv, s6396c4f11, ABISELECT(296,180), 0, 8, 1, "S6396C4");
    set_bf_and_test(lv, s6396c4f11, ABISELECT(296,180), 0, 8, hide_sll(1LL<<7), "S6396C4");
    test_class_info(&lv, &cd_S6396C4);
    dp->~S6396C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6396C4(Test_S6396C4, "S6396C4", ABISELECT(304,184));

#else // __cplusplus

extern void _ZN7S6396C4C1Ev();
extern void _ZN7S6396C4D1Ev();
Name_Map name_map_S6396C4[] = {
  NSPAIR(_ZN7S6396C4C1Ev),
  NSPAIR(_ZN7S6396C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6396C5;
extern VTBL_ENTRY _ZTI7S6396C5[];
extern  VTBL_ENTRY _ZTV7S6396C5[];
static Base_Class bases_S6396C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6396C5,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6396C4[];
extern void _ZN7S6396C52v4Ev();
static  VTBL_ENTRY vtc_S6396C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6396C4[0]),
  (VTBL_ENTRY)&_ZN7S6396C52v4Ev,
};
extern VTBL_ENTRY _ZTI7S6396C4[];
extern  VTBL_ENTRY _ZTV7S6396C4[];
Class_Descriptor cd_S6396C4 = {  "S6396C4", // class name
  bases_S6396C4, 1,
  &(vtc_S6396C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,184), // object size
  NSPAIRA(_ZTI7S6396C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6396C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6396C8  : S6396C5 {
  char s6396c8f0;
  __tsi64 s6396c8f1;
  int s6396c8f2[3];
  ::S6396C4 s6396c8f3;
  virtual void  v5(); // _ZN7S6396C82v5Ev
  ~S6396C8(); // tgen
  S6396C8(); // tgen
};
//SIG(-1 S6396C8) C1{ BC2{ v2} v1 Fc FL Fi[3] FC3{ BC2 Fc[5] FC4{ VBC5{ v6} v3 v4 v5 Fp[3] FC6{} Fp}[2] Fi Fp[7] FC4 FC2 Fc Fi Fs[5] Fi[8] FL Fc:8}}


void  S6396C8 ::v5(){vfunc_called(this, "_ZN7S6396C82v5Ev");}
S6396C8 ::~S6396C8(){ note_dtor("S6396C8", this);} // tgen
S6396C8 ::S6396C8(){ note_ctor("S6396C8", this);} // tgen

static void Test_S6396C8()
{
  extern Class_Descriptor cd_S6396C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,54)];
    init_test(&cd_S6396C8, buf);
    S6396C8 *dp, &lv = *(dp=new (buf) S6396C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,212), "sizeof(S6396C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6396C8)");
    check_base_class_offset(lv, (S6396C5*), 0, "S6396C8");
    check_field_offset(lv, s6396c8f0, ABISELECT(8,4), "S6396C8.s6396c8f0");
    check_field_offset(lv, s6396c8f1, ABISELECT(16,8), "S6396C8.s6396c8f1");
    check_field_offset(lv, s6396c8f2, ABISELECT(24,16), "S6396C8.s6396c8f2");
    check_field_offset(lv, s6396c8f3, ABISELECT(40,28), "S6396C8.s6396c8f3");
    test_class_info(&lv, &cd_S6396C8);
    dp->~S6396C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6396C8(Test_S6396C8, "S6396C8", ABISELECT(344,212));

#else // __cplusplus

extern void _ZN7S6396C8C1Ev();
extern void _ZN7S6396C8D1Ev();
Name_Map name_map_S6396C8[] = {
  NSPAIR(_ZN7S6396C8C1Ev),
  NSPAIR(_ZN7S6396C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6396C5;
extern VTBL_ENTRY _ZTI7S6396C5[];
extern  VTBL_ENTRY _ZTV7S6396C5[];
static Base_Class bases_S6396C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6396C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6396C8[];
extern void _ZN7S6396C52v4Ev();
extern void _ZN7S6396C82v5Ev();
static  VTBL_ENTRY vtc_S6396C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6396C8[0]),
  (VTBL_ENTRY)&_ZN7S6396C52v4Ev,
  (VTBL_ENTRY)&_ZN7S6396C82v5Ev,
};
extern VTBL_ENTRY _ZTI7S6396C8[];
extern  VTBL_ENTRY _ZTV7S6396C8[];
Class_Descriptor cd_S6396C8 = {  "S6396C8", // class name
  bases_S6396C8, 1,
  &(vtc_S6396C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,212), // object size
  NSPAIRA(_ZTI7S6396C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6396C8),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6396C9  : virtual S6396C10 , S6396C2 , virtual S6396C8 {
  int s6396c9f0;
  short s6396c9f1;
  __tsi64 s6396c9f2[7];
  char s6396c9f3[5];
  void *s6396c9f4;
  virtual  ~S6396C9(); // _ZN7S6396C9D2Ev
  virtual void  v6(); // _ZN7S6396C92v6Ev
  virtual void  v7(); // _ZN7S6396C92v7Ev
  virtual void  v8(); // _ZN7S6396C92v8Ev
  S6396C9(); // tgen
};
//SIG(-1 S6396C9) C1{ VBC2{ v4 FC3{} Fi:3 Fp Fi} BC4{ v5 v6 Fp[2] Fi[2] Fp[15] Fi FC5{ VBC6{ BC7{ v10} Fc[5] FC8{ VBC7 v12 v13 v14 Fp[3] FC3 Fp}[2] Fi Fp[7] FC8 FC7 Fc Fi Fs[5] Fi[8] FL Fc:8} v9 Fp FL Fp[6] FC7 FC9{ BC7 v11 Fc FL Fi[3] FC6} Fp Fi}} VBC10{ BC11{ v7} v8 Fc FL Fi[3] FC12{ BC11 Fc[5] FC8[2] Fi Fp[7] FC8 FC11 Fc Fi Fs[5] Fi[8] FL Fc:8}} vd v1 v2 v3 Fi Fs FL[7] Fc[5] Fp}


 S6396C9 ::~S6396C9(){ note_dtor("S6396C9", this);}
void  S6396C9 ::v6(){vfunc_called(this, "_ZN7S6396C92v6Ev");}
void  S6396C9 ::v7(){vfunc_called(this, "_ZN7S6396C92v7Ev");}
void  S6396C9 ::v8(){vfunc_called(this, "_ZN7S6396C92v8Ev");}
S6396C9 ::S6396C9(){ note_ctor("S6396C9", this);} // tgen

static void Test_S6396C9()
{
  extern Class_Descriptor cd_S6396C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(171,210)];
    init_test(&cd_S6396C9, buf);
    S6396C9 *dp, &lv = *(dp=new (buf) S6396C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1360,836), "sizeof(S6396C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6396C9)");
    check_base_class_offset(lv, (S6396C10*), ABISELECT(984,608), "S6396C9");
    check_base_class_offset(lv, (S6396C2*), 0, "S6396C9");
    check_base_class_offset(lv, (S6396C5*)(S6396C8*), ABISELECT(1016,624), "S6396C9");
    check_base_class_offset(lv, (S6396C8*), ABISELECT(1016,624), "S6396C9");
    check_field_offset(lv, s6396c9f0, ABISELECT(904,532), "S6396C9.s6396c9f0");
    check_field_offset(lv, s6396c9f1, ABISELECT(908,536), "S6396C9.s6396c9f1");
    check_field_offset(lv, s6396c9f2, ABISELECT(912,540), "S6396C9.s6396c9f2");
    check_field_offset(lv, s6396c9f3, ABISELECT(968,596), "S6396C9.s6396c9f3");
    check_field_offset(lv, s6396c9f4, ABISELECT(976,604), "S6396C9.s6396c9f4");
    test_class_info(&lv, &cd_S6396C9);
    dp->~S6396C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6396C9(Test_S6396C9, "S6396C9", ABISELECT(1360,836));

#else // __cplusplus

extern void _ZN7S6396C9C1Ev();
extern void _ZN7S6396C9D2Ev();
Name_Map name_map_S6396C9[] = {
  NSPAIR(_ZN7S6396C9C1Ev),
  NSPAIR(_ZN7S6396C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6396C10;
extern VTBL_ENTRY _ZTI8S6396C10[];
extern  VTBL_ENTRY _ZTV8S6396C10[];
extern Class_Descriptor cd_S6396C2;
extern VTBL_ENTRY _ZTI7S6396C2[];
extern  VTBL_ENTRY _ZTV7S6396C2[];
extern Class_Descriptor cd_S6396C5;
extern VTBL_ENTRY _ZTI7S6396C5[];
extern  VTBL_ENTRY _ZTV7S6396C5[];
extern Class_Descriptor cd_S6396C8;
extern VTBL_ENTRY _ZTI7S6396C8[];
extern  VTBL_ENTRY _ZTV7S6396C8[];
static Base_Class bases_S6396C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6396C10,    ABISELECT(984,608), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6396C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6396C5,    ABISELECT(1016,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6396C8,    ABISELECT(1016,624), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6396C9[];
extern void _ZN7S6396C22v1Ev();
extern void _ZN7S6396C22v2Ev();
extern void _ZN7S6396C9D1Ev();
extern void _ZN7S6396C9D0Ev();
extern void _ZN7S6396C92v6Ev();
extern void _ZN7S6396C92v7Ev();
extern void _ZN7S6396C92v8Ev();
extern void _ZN8S6396C102v3Ev();
extern void _ZN7S6396C52v4Ev();
extern void _ZN7S6396C82v5Ev();
static  VTBL_ENTRY vtc_S6396C9[] = {
  ABISELECT(1016,624),
  ABISELECT(984,608),
  0,
  (VTBL_ENTRY)&(_ZTI7S6396C9[0]),
  (VTBL_ENTRY)&_ZN7S6396C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6396C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6396C9D1Ev,
  (VTBL_ENTRY)&_ZN7S6396C9D0Ev,
  (VTBL_ENTRY)&_ZN7S6396C92v6Ev,
  (VTBL_ENTRY)&_ZN7S6396C92v7Ev,
  (VTBL_ENTRY)&_ZN7S6396C92v8Ev,
  0,
  ABISELECT(-984,-608),
  (VTBL_ENTRY)&(_ZTI7S6396C9[0]),
  (VTBL_ENTRY)&_ZN8S6396C102v3Ev,
  0,
  0,
  ABISELECT(-1016,-624),
  (VTBL_ENTRY)&(_ZTI7S6396C9[0]),
  (VTBL_ENTRY)&_ZN7S6396C52v4Ev,
  (VTBL_ENTRY)&_ZN7S6396C82v5Ev,
};
extern VTBL_ENTRY _ZTV7S6396C9[];
static  VTT_ENTRY vtt_S6396C9[] = {
  {&(_ZTV7S6396C9[4]),  4,21},
  {&(_ZTV7S6396C9[14]),  14,21},
  {&(_ZTV7S6396C9[19]),  19,21},
};
extern VTBL_ENTRY _ZTI7S6396C9[];
extern  VTBL_ENTRY _ZTV7S6396C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6396C9[];
Class_Descriptor cd_S6396C9 = {  "S6396C9", // class name
  bases_S6396C9, 4,
  &(vtc_S6396C9[0]), // expected_vtbl_contents
  &(vtt_S6396C9[0]), // expected_vtt_contents
  ABISELECT(1360,836), // object size
  NSPAIRA(_ZTI7S6396C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6396C9),21, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6396C9),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6396C1  : S6396C2 , virtual S6396C9 , virtual S6396C4 {
  void *s6396c1f0[2];
  char s6396c1f1;
  __tsi64 s6396c1f2;
  unsigned int s6396c1f3:1;
  __tsi64 s6396c1f4;
  int s6396c1f5:32;
  virtual  ~S6396C1(); // _ZN7S6396C1D2Ev
  S6396C1(); // tgen
};
//SIG(1 S6396C1) C1{ BC2{ v1 v2 Fp[2] Fi[2] Fp[15] Fi FC3{ VBC4{ BC5{ v10} Fc[5] FC6{ VBC5 v12 v13 v14 Fp[3] FC7{} Fp}[2] Fi Fp[7] FC6 FC5 Fc Fi Fs[5] Fi[8] FL Fc:8} v9 Fp FL Fp[6] FC5 FC8{ BC5 v11 Fc FL Fi[3] FC4} Fp Fi}} VBC9{ VBC10{ v3 FC7 Fi:3 Fp Fi} BC2 VBC11{ BC12{ v4} v5 Fc FL Fi[3] FC13{ BC12 Fc[5] FC6[2] Fi Fp[7] FC6 FC12 Fc Fi Fs[5] Fi[8] FL Fc:8}} vd v6 v7 v8 Fi Fs FL[7] Fc[5] Fp} VBC13 vd Fp[2] Fc FL Fi:1 FL Fi:32}


 S6396C1 ::~S6396C1(){ note_dtor("S6396C1", this);}
S6396C1 ::S6396C1(){ note_ctor("S6396C1", this);} // tgen

static void Test_S6396C1()
{
  extern Class_Descriptor cd_S6396C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(329,398)];
    init_test(&cd_S6396C1, buf);
    S6396C1 *dp, &lv = *(dp=new (buf) S6396C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2624,1588), "sizeof(S6396C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6396C1)");
    /*is_ambiguous_... S6396C1::S6396C2 */ AMB_check_base_class_offset(lv, (S6396C2*), 0, "S6396C1");
    check_base_class_offset(lv, (S6396C10*)(S6396C9*), ABISELECT(1944,1176), "S6396C1");
    check_base_class_offset(lv, (S6396C2*)(S6396C9*), ABISELECT(960,568), "S6396C1");
    check_base_class_offset(lv, (S6396C5*)(S6396C8*), ABISELECT(1976,1192), "S6396C1");
    check_base_class_offset(lv, (S6396C8*)(S6396C9*), ABISELECT(1976,1192), "S6396C1");
    check_base_class_offset(lv, (S6396C9*), ABISELECT(960,568), "S6396C1");
    check_base_class_offset(lv, (S6396C5*)(S6396C4*), ABISELECT(2320,1404), "S6396C1");
    check_base_class_offset(lv, (S6396C4*), ABISELECT(2320,1404), "S6396C1");
    check_field_offset(lv, s6396c1f0, ABISELECT(904,532), "S6396C1.s6396c1f0");
    check_field_offset(lv, s6396c1f1, ABISELECT(920,540), "S6396C1.s6396c1f1");
    check_field_offset(lv, s6396c1f2, ABISELECT(928,544), "S6396C1.s6396c1f2");
    set_bf_and_test(lv, s6396c1f3, ABISELECT(936,552), 0, 1, 1, "S6396C1");
    check_field_offset(lv, s6396c1f4, ABISELECT(944,556), "S6396C1.s6396c1f4");
    set_bf_and_test(lv, s6396c1f5, ABISELECT(952,564), 0, 32, 1, "S6396C1");
    set_bf_and_test(lv, s6396c1f5, ABISELECT(952,564), 0, 32, hide_sll(1LL<<31), "S6396C1");
    test_class_info(&lv, &cd_S6396C1);
    dp->~S6396C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6396C1(Test_S6396C1, "S6396C1", ABISELECT(2624,1588));

#else // __cplusplus

extern void _ZN7S6396C1C1Ev();
extern void _ZN7S6396C1D2Ev();
Name_Map name_map_S6396C1[] = {
  NSPAIR(_ZN7S6396C1C1Ev),
  NSPAIR(_ZN7S6396C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6396C2;
extern VTBL_ENTRY _ZTI7S6396C2[];
extern  VTBL_ENTRY _ZTV7S6396C2[];
extern Class_Descriptor cd_S6396C10;
extern VTBL_ENTRY _ZTI8S6396C10[];
extern  VTBL_ENTRY _ZTV8S6396C10[];
extern Class_Descriptor cd_S6396C2;
extern VTBL_ENTRY _ZTI7S6396C2[];
extern  VTBL_ENTRY _ZTV7S6396C2[];
extern Class_Descriptor cd_S6396C5;
extern VTBL_ENTRY _ZTI7S6396C5[];
extern  VTBL_ENTRY _ZTV7S6396C5[];
extern Class_Descriptor cd_S6396C8;
extern VTBL_ENTRY _ZTI7S6396C8[];
extern  VTBL_ENTRY _ZTV7S6396C8[];
extern Class_Descriptor cd_S6396C9;
extern VTBL_ENTRY _ZTI7S6396C9[];
extern  VTBL_ENTRY _ZTV7S6396C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6396C9[];
extern Class_Descriptor cd_S6396C5;
extern VTBL_ENTRY _ZTI7S6396C5[];
extern  VTBL_ENTRY _ZTV7S6396C5[];
extern Class_Descriptor cd_S6396C4;
extern VTBL_ENTRY _ZTI7S6396C4[];
extern  VTBL_ENTRY _ZTV7S6396C4[];
static Base_Class bases_S6396C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6396C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6396C10,    ABISELECT(1944,1176), //bcp->offset
    27, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6396C2,    ABISELECT(960,568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6396C5,    ABISELECT(1976,1192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6396C8,    ABISELECT(1976,1192), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6396C9,    ABISELECT(960,568), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6396C5,    ABISELECT(2320,1404), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6396C4,    ABISELECT(2320,1404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6396C1[];
extern void _ZN7S6396C22v1Ev();
extern void _ZN7S6396C22v2Ev();
extern void _ZN7S6396C1D1Ev();
extern void _ZN7S6396C1D0Ev();
extern void _ZN7S6396C22v1Ev();
extern void _ZN7S6396C22v2Ev();
extern void ABISELECT(_ZTv0_n56_N7S6396C1D1Ev,_ZTv0_n28_N7S6396C1D1Ev)();
extern void ABISELECT(_ZThn960_N7S6396C1D1Ev,_ZThn568_N7S6396C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S6396C1D0Ev,_ZTv0_n28_N7S6396C1D0Ev)();
extern void ABISELECT(_ZThn960_N7S6396C1D0Ev,_ZThn568_N7S6396C1D0Ev)() __attribute__((weak));
extern void _ZN7S6396C92v6Ev();
extern void _ZN7S6396C92v7Ev();
extern void _ZN7S6396C92v8Ev();
extern void _ZN8S6396C102v3Ev();
extern void _ZN7S6396C52v4Ev();
extern void _ZN7S6396C82v5Ev();
extern void _ZN7S6396C52v4Ev();
static  VTBL_ENTRY vtc_S6396C1[] = {
  ABISELECT(2320,1404),
  ABISELECT(1976,1192),
  ABISELECT(1944,1176),
  ABISELECT(960,568),
  0,
  (VTBL_ENTRY)&(_ZTI7S6396C1[0]),
  (VTBL_ENTRY)&_ZN7S6396C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6396C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6396C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6396C1D0Ev,
  0,
  0,
  0,
  ABISELECT(-960,-568),
  0,
  0,
  ABISELECT(1016,624),
  ABISELECT(984,608),
  ABISELECT(-960,-568),
  (VTBL_ENTRY)&(_ZTI7S6396C1[0]),
  (VTBL_ENTRY)&_ZN7S6396C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6396C22v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S6396C1D1Ev,_ZTv0_n28_N7S6396C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S6396C1D0Ev,_ZTv0_n28_N7S6396C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6396C92v6Ev,
  (VTBL_ENTRY)&_ZN7S6396C92v7Ev,
  (VTBL_ENTRY)&_ZN7S6396C92v8Ev,
  0,
  ABISELECT(-1944,-1176),
  (VTBL_ENTRY)&(_ZTI7S6396C1[0]),
  (VTBL_ENTRY)&_ZN8S6396C102v3Ev,
  0,
  0,
  ABISELECT(-1976,-1192),
  (VTBL_ENTRY)&(_ZTI7S6396C1[0]),
  (VTBL_ENTRY)&_ZN7S6396C52v4Ev,
  (VTBL_ENTRY)&_ZN7S6396C82v5Ev,
  0,
  ABISELECT(-2320,-1404),
  (VTBL_ENTRY)&(_ZTI7S6396C1[0]),
  (VTBL_ENTRY)&_ZN7S6396C52v4Ev,
};
extern VTBL_ENTRY _ZTV7S6396C1[];
extern void _ZN7S6396C22v1Ev();
extern void _ZN7S6396C22v2Ev();
extern void _ZN7S6396C9D1Ev();
extern void _ZN7S6396C9D0Ev();
extern void _ZN7S6396C92v6Ev();
extern void _ZN7S6396C92v7Ev();
extern void _ZN7S6396C92v8Ev();
static  VTBL_ENTRY _tg__ZTV7S6396C9__7S6396C1[] = {
  ABISELECT(1016,624),
  ABISELECT(984,608),
  0,
  (VTBL_ENTRY)&(_ZTI7S6396C9[0]),
  (VTBL_ENTRY)&_ZN7S6396C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6396C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6396C9D1Ev,
  (VTBL_ENTRY)&_ZN7S6396C9D0Ev,
  (VTBL_ENTRY)&_ZN7S6396C92v6Ev,
  (VTBL_ENTRY)&_ZN7S6396C92v7Ev,
  (VTBL_ENTRY)&_ZN7S6396C92v8Ev,
};
extern void _ZN8S6396C102v3Ev();
static  VTBL_ENTRY _tg__ZTV8S6396C10__7S6396C9__7S6396C1[] = {
  0,
  ABISELECT(-984,-608),
  (VTBL_ENTRY)&(_ZTI7S6396C9[0]),
  (VTBL_ENTRY)&_ZN8S6396C102v3Ev,
};
extern void _ZN7S6396C52v4Ev();
extern void _ZN7S6396C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6396C8__7S6396C9__7S6396C1[] = {
  0,
  0,
  ABISELECT(-1016,-624),
  (VTBL_ENTRY)&(_ZTI7S6396C9[0]),
  (VTBL_ENTRY)&_ZN7S6396C52v4Ev,
  (VTBL_ENTRY)&_ZN7S6396C82v5Ev,
};
static  VTT_ENTRY vtt_S6396C1[] = {
  {&(_ZTV7S6396C1[6]),  6,41},
  {&(_ZTV7S6396C1[20]),  20,41},
  {&(_ZTV7S6396C1[30]),  30,41},
  {&(_ZTV7S6396C1[35]),  35,41},
  {&(_ZTV7S6396C1[40]),  40,41},
  {&(_tg__ZTV7S6396C9__7S6396C1[4]),  4,11},
  {&(_tg__ZTV8S6396C10__7S6396C9__7S6396C1[3]),  3,4},
  {&(_tg__ZTV7S6396C8__7S6396C9__7S6396C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S6396C1[];
extern  VTBL_ENTRY _ZTV7S6396C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6396C1[];
static VTBL_ENTRY alt_thunk_names79[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S6396C1D0Ev,_ZTv0_n28_N7S6396C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn960_N7S6396C1D0Ev,_ZThn568_N7S6396C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S6396C1D1Ev,_ZTv0_n28_N7S6396C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn960_N7S6396C1D1Ev,_ZThn568_N7S6396C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6396C1 = {  "S6396C1", // class name
  bases_S6396C1, 8,
  &(vtc_S6396C1[0]), // expected_vtbl_contents
  &(vtt_S6396C1[0]), // expected_vtt_contents
  ABISELECT(2624,1588), // object size
  NSPAIRA(_ZTI7S6396C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6396C1),41, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6396C1),8, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names79,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7773C4_nt  {
  virtual void  v1(); // _ZN10S7773C4_nt2v1Ev
  virtual void  v2(); // _ZN10S7773C4_nt2v2Ev
  virtual void  v3(); // _ZN10S7773C4_nt2v3Ev
  virtual void  v4(); // _ZN10S7773C4_nt2v4Ev
  ~S7773C4_nt(); // tgen
  S7773C4_nt(); // tgen
};
//SIG(-1 S7773C4_nt) C1{ v1 v2 v3 v4}


void  S7773C4_nt ::v1(){vfunc_called(this, "_ZN10S7773C4_nt2v1Ev");}
void  S7773C4_nt ::v2(){vfunc_called(this, "_ZN10S7773C4_nt2v2Ev");}
void  S7773C4_nt ::v3(){vfunc_called(this, "_ZN10S7773C4_nt2v3Ev");}
void  S7773C4_nt ::v4(){vfunc_called(this, "_ZN10S7773C4_nt2v4Ev");}
S7773C4_nt ::~S7773C4_nt(){ note_dtor("S7773C4_nt", this);} // tgen
S7773C4_nt ::S7773C4_nt(){ note_ctor("S7773C4_nt", this);} // tgen

//skip512 S7773C4_nt

#else // __cplusplus

extern void _ZN10S7773C4_ntC1Ev();
extern void _ZN10S7773C4_ntD1Ev();
Name_Map name_map_S7773C4_nt[] = {
  NSPAIR(_ZN10S7773C4_ntC1Ev),
  NSPAIR(_ZN10S7773C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
static  VTBL_ENTRY vtc_S7773C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7773C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
VTBL_ENTRY *P__ZTI10S7773C4_nt = _ZTI10S7773C4_nt; 
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
Class_Descriptor cd_S7773C4_nt = {  "S7773C4_nt", // class name
  0,0,//no base classes
  &(vtc_S7773C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7773C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7773C4_nt),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7773C5  : S7773C4_nt {
  char s7773c5f0;
  virtual void  v5(); // _ZN7S7773C52v5Ev
  virtual void  v6(); // _ZN7S7773C52v6Ev
  ~S7773C5(); // tgen
  S7773C5(); // tgen
};
//SIG(-1 S7773C5) C1{ BC2{ v3 v4 v5 v6} v1 v2 Fc}


void  S7773C5 ::v5(){vfunc_called(this, "_ZN7S7773C52v5Ev");}
void  S7773C5 ::v6(){vfunc_called(this, "_ZN7S7773C52v6Ev");}
S7773C5 ::~S7773C5(){ note_dtor("S7773C5", this);} // tgen
S7773C5 ::S7773C5(){ note_ctor("S7773C5", this);} // tgen

static void Test_S7773C5()
{
  extern Class_Descriptor cd_S7773C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7773C5, buf);
    S7773C5 *dp, &lv = *(dp=new (buf) S7773C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7773C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7773C5)");
    check_base_class_offset(lv, (S7773C4_nt*), 0, "S7773C5");
    check_field_offset(lv, s7773c5f0, ABISELECT(8,4), "S7773C5.s7773c5f0");
    test_class_info(&lv, &cd_S7773C5);
    dp->~S7773C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7773C5(Test_S7773C5, "S7773C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7773C5C1Ev();
extern void _ZN7S7773C5D1Ev();
Name_Map name_map_S7773C5[] = {
  NSPAIR(_ZN7S7773C5C1Ev),
  NSPAIR(_ZN7S7773C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
static Base_Class bases_S7773C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7773C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7773C5[];
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY vtc_S7773C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C5[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern VTBL_ENTRY _ZTI7S7773C5[];
extern  VTBL_ENTRY _ZTV7S7773C5[];
Class_Descriptor cd_S7773C5 = {  "S7773C5", // class name
  bases_S7773C5, 1,
  &(vtc_S7773C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7773C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7773C5),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7773C6  : S7773C4_nt , virtual S7773C5 {
  int s7773c6f0;
  ::S7773C5 s7773c6f1[4];
  void *s7773c6f2;
  virtual  ~S7773C6(); // _ZN7S7773C6D2Ev
  virtual void  v7(); // _ZN7S7773C62v7Ev
  virtual void  v8(); // _ZN7S7773C62v8Ev
  virtual void  v9(); // _ZN7S7773C62v9Ev
  virtual void  v10(); // _ZN7S7773C63v10Ev
  virtual void  v11(); // _ZN7S7773C63v11Ev
  virtual void  v12(); // _ZN7S7773C63v12Ev
  S7773C6(); // tgen
};
//SIG(-1 S7773C6) C1{ BC2{ v7 v8 v9 v10} VBC3{ BC2 v11 v12 Fc} vd v1 v2 v3 v4 v5 v6 Fi FC3[4] Fp}


 S7773C6 ::~S7773C6(){ note_dtor("S7773C6", this);}
void  S7773C6 ::v7(){vfunc_called(this, "_ZN7S7773C62v7Ev");}
void  S7773C6 ::v8(){vfunc_called(this, "_ZN7S7773C62v8Ev");}
void  S7773C6 ::v9(){vfunc_called(this, "_ZN7S7773C62v9Ev");}
void  S7773C6 ::v10(){vfunc_called(this, "_ZN7S7773C63v10Ev");}
void  S7773C6 ::v11(){vfunc_called(this, "_ZN7S7773C63v11Ev");}
void  S7773C6 ::v12(){vfunc_called(this, "_ZN7S7773C63v12Ev");}
S7773C6 ::S7773C6(){ note_ctor("S7773C6", this);} // tgen

static void Test_S7773C6()
{
  extern Class_Descriptor cd_S7773C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[14];
    init_test(&cd_S7773C6, buf);
    S7773C6 *dp, &lv = *(dp=new (buf) S7773C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,52), "sizeof(S7773C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7773C6)");
    /*is_ambiguous_... S7773C6::S7773C4_nt */ AMB_check_base_class_offset(lv, (S7773C4_nt*), 0, "S7773C6");
    check_base_class_offset(lv, (S7773C4_nt*)(S7773C5*), ABISELECT(88,44), "S7773C6");
    check_base_class_offset(lv, (S7773C5*), ABISELECT(88,44), "S7773C6");
    check_field_offset(lv, s7773c6f0, ABISELECT(8,4), "S7773C6.s7773c6f0");
    check_field_offset(lv, s7773c6f1, ABISELECT(16,8), "S7773C6.s7773c6f1");
    check_field_offset(lv, s7773c6f2, ABISELECT(80,40), "S7773C6.s7773c6f2");
    test_class_info(&lv, &cd_S7773C6);
    dp->~S7773C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7773C6(Test_S7773C6, "S7773C6", ABISELECT(104,52));

#else // __cplusplus

extern void _ZN7S7773C6C1Ev();
extern void _ZN7S7773C6D2Ev();
Name_Map name_map_S7773C6[] = {
  NSPAIR(_ZN7S7773C6C1Ev),
  NSPAIR(_ZN7S7773C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C5;
extern VTBL_ENTRY _ZTI7S7773C5[];
extern  VTBL_ENTRY _ZTV7S7773C5[];
static Base_Class bases_S7773C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7773C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7773C4_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7773C5,    ABISELECT(88,44), //bcp->offset
    15, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7773C6[];
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C6D1Ev();
extern void _ZN7S7773C6D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY vtc_S7773C6[] = {
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern VTBL_ENTRY _ZTV7S7773C6[];
static  VTT_ENTRY vtt_S7773C6[] = {
  {&(_ZTV7S7773C6[3]),  3,29},
  {&(_ZTV7S7773C6[23]),  23,29},
};
extern VTBL_ENTRY _ZTI7S7773C6[];
extern  VTBL_ENTRY _ZTV7S7773C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C6[];
Class_Descriptor cd_S7773C6 = {  "S7773C6", // class name
  bases_S7773C6, 3,
  &(vtc_S7773C6[0]), // expected_vtbl_contents
  &(vtt_S7773C6[0]), // expected_vtt_contents
  ABISELECT(104,52), // object size
  NSPAIRA(_ZTI7S7773C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7773C6),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7773C6),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7773C3  : virtual S7773C4_nt , S7773C5 , S7773C6 {
  ::S2489C12_nt s7773c3f0;
  int s7773c3f1;
  short s7773c3f2[3];
  virtual  ~S7773C3(); // _ZN7S7773C3D2Ev
  virtual void  v13(); // _ZN7S7773C33v13Ev
  S7773C3(); // tgen
};
//SIG(-1 S7773C3) C1{ VBC2{ v2 v3 v4 v5} BC3{ BC2 v6 v7 Fc} BC4{ BC2 VBC3 vd v8 v9 v10 v11 v12 v13 Fi FC3[4] Fp} vd v1 FC5{} Fi Fs[3]}


 S7773C3 ::~S7773C3(){ note_dtor("S7773C3", this);}
void  S7773C3 ::v13(){vfunc_called(this, "_ZN7S7773C33v13Ev");}
S7773C3 ::S7773C3(){ note_ctor("S7773C3", this);} // tgen

static void Test_S7773C3()
{
  extern Class_Descriptor cd_S7773C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,21)];
    init_test(&cd_S7773C3, buf);
    S7773C3 *dp, &lv = *(dp=new (buf) S7773C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,80), "sizeof(S7773C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7773C3)");
    /*is_ambiguous_... S7773C3::S7773C4_nt */ AMB_check_base_class_offset(lv, (S7773C4_nt*), ABISELECT(120,68), "S7773C3");
    /*is_ambiguous_... S7773C3::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C5*), 0, "S7773C3");
    /*is_ambiguous_... S7773C3::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C5*), 0, "S7773C3");
    /*is_ambiguous_... S7773C6::S7773C4_nt */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C6*), ABISELECT(16,8), "S7773C3");
    /*is_ambiguous_... S7773C3::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C5*), ABISELECT(128,72), "S7773C3");
    check_base_class_offset(lv, (S7773C5*)(S7773C6*), ABISELECT(128,72), "S7773C3");
    check_base_class_offset(lv, (S7773C6*), ABISELECT(16,8), "S7773C3");
    check_field_offset(lv, s7773c3f0, ABISELECT(104,52), "S7773C3.s7773c3f0");
    check_field_offset(lv, s7773c3f1, ABISELECT(108,56), "S7773C3.s7773c3f1");
    check_field_offset(lv, s7773c3f2, ABISELECT(112,60), "S7773C3.s7773c3f2");
    test_class_info(&lv, &cd_S7773C3);
    dp->~S7773C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7773C3(Test_S7773C3, "S7773C3", ABISELECT(144,80));

#else // __cplusplus

extern void _ZN7S7773C3C1Ev();
extern void _ZN7S7773C3D2Ev();
Name_Map name_map_S7773C3[] = {
  NSPAIR(_ZN7S7773C3C1Ev),
  NSPAIR(_ZN7S7773C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C5;
extern VTBL_ENTRY _ZTI7S7773C5[];
extern  VTBL_ENTRY _ZTV7S7773C5[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C5;
extern VTBL_ENTRY _ZTI7S7773C5[];
extern  VTBL_ENTRY _ZTV7S7773C5[];
extern Class_Descriptor cd_S7773C6;
extern VTBL_ENTRY _ZTI7S7773C6[];
extern  VTBL_ENTRY _ZTV7S7773C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C6[];
static Base_Class bases_S7773C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7773C4_nt,    ABISELECT(120,68), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7773C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7773C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7773C4_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7773C4_nt,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7773C5,    ABISELECT(128,72), //bcp->offset
    38, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7773C6,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7773C3[];
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void _ZN7S7773C3D1Ev();
extern void _ZN7S7773C3D0Ev();
extern void _ZN7S7773C33v13Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZThn16_N7S7773C3D1Ev,_ZThn8_N7S7773C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7773C3D0Ev,_ZThn8_N7S7773C3D0Ev)();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY vtc_S7773C3[] = {
  ABISELECT(128,72),
  ABISELECT(120,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7773C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C33v13Ev,
  ABISELECT(112,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7773C3D1Ev,_ZThn8_N7S7773C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7773C3D0Ev,_ZThn8_N7S7773C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern VTBL_ENTRY _ZTV7S7773C3[];
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C6D1Ev();
extern void _ZN7S7773C6D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C6__7S7773C3[] = {
  ABISELECT(112,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__7S7773C6__7S7773C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
static  VTT_ENTRY vtt_S7773C3[] = {
  {&(_ZTV7S7773C3[4]),  4,52},
  {&(_tg__ZTV7S7773C6__7S7773C3[3]),  3,15},
  {&(_tg__ZTV7S7773C5__7S7773C6__7S7773C3[8]),  8,14},
  {&(_ZTV7S7773C3[34]),  34,52},
  {&(_ZTV7S7773C3[16]),  16,52},
  {&(_ZTV7S7773C3[46]),  46,52},
};
extern VTBL_ENTRY _ZTI7S7773C3[];
extern  VTBL_ENTRY _ZTV7S7773C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C3[];
Class_Descriptor cd_S7773C3 = {  "S7773C3", // class name
  bases_S7773C3, 7,
  &(vtc_S7773C3[0]), // expected_vtbl_contents
  &(vtt_S7773C3[0]), // expected_vtt_contents
  ABISELECT(144,80), // object size
  NSPAIRA(_ZTI7S7773C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7773C3),52, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7773C3),6, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7773C9  : virtual S7773C4_nt , S7773C6 , virtual S7773C3 {
  int s7773c9f0;
  virtual  ~S7773C9(); // _ZN7S7773C9D2Ev
  virtual void  v14(); // _ZN7S7773C93v14Ev
  virtual void  v15(); // _ZN7S7773C93v15Ev
  virtual void  v16(); // _ZN7S7773C93v16Ev
  virtual void  v17(); // _ZN7S7773C93v17Ev
  virtual void  v18(); // _ZN7S7773C93v18Ev
  virtual void  v19(); // _ZN7S7773C93v19Ev
  virtual void  v20(); // _ZN7S7773C93v20Ev
  S7773C9(); // tgen
};
//SIG(-1 S7773C9) C1{ VBC2{ v8 v9 v10 v11} BC3{ BC2 VBC4{ BC2 v12 v13 Fc} vd v14 v15 v16 v17 v18 v19 Fi FC4[4] Fp} VBC5{ VBC2 BC4 BC3 vd v20 FC6{} Fi Fs[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi}


 S7773C9 ::~S7773C9(){ note_dtor("S7773C9", this);}
void  S7773C9 ::v14(){vfunc_called(this, "_ZN7S7773C93v14Ev");}
void  S7773C9 ::v15(){vfunc_called(this, "_ZN7S7773C93v15Ev");}
void  S7773C9 ::v16(){vfunc_called(this, "_ZN7S7773C93v16Ev");}
void  S7773C9 ::v17(){vfunc_called(this, "_ZN7S7773C93v17Ev");}
void  S7773C9 ::v18(){vfunc_called(this, "_ZN7S7773C93v18Ev");}
void  S7773C9 ::v19(){vfunc_called(this, "_ZN7S7773C93v19Ev");}
void  S7773C9 ::v20(){vfunc_called(this, "_ZN7S7773C93v20Ev");}
S7773C9 ::S7773C9(){ note_ctor("S7773C9", this);} // tgen

static void Test_S7773C9()
{
  extern Class_Descriptor cd_S7773C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,33)];
    init_test(&cd_S7773C9, buf);
    S7773C9 *dp, &lv = *(dp=new (buf) S7773C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,128), "sizeof(S7773C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7773C9)");
    /*is_ambiguous_... S7773C9::S7773C4_nt */ AMB_check_base_class_offset(lv, (S7773C4_nt*), ABISELECT(96,48), "S7773C9");
    /*is_ambiguous_... S7773C3::S7773C4_nt */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C3*), ABISELECT(96,48), "S7773C9");
    /*is_ambiguous_... S7773C9::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C6*), 0, "S7773C9");
    /*is_ambiguous_... S7773C9::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C5*), ABISELECT(104,52), "S7773C9");
    /*is_ambiguous_... S7773C9::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C5*)(S7773C6*), ABISELECT(104,52), "S7773C9");
    check_base_class_offset(lv, (S7773C5*)(S7773C6*)(S7773C3*), ABISELECT(104,52), "S7773C9");
    /*is_ambiguous_... S7773C9::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C6*), 0, "S7773C9");
    /*is_ambiguous_... S7773C3::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C5*)(S7773C3*), ABISELECT(120,60), "S7773C9");
    /*is_ambiguous_... S7773C3::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C5*)(S7773C3*), ABISELECT(120,60), "S7773C9");
    /*is_ambiguous_... S7773C6::S7773C4_nt */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C6*)(S7773C3*), ABISELECT(136,68), "S7773C9");
    check_base_class_offset(lv, (S7773C6*)(S7773C3*), ABISELECT(136,68), "S7773C9");
    check_base_class_offset(lv, (S7773C3*), ABISELECT(120,60), "S7773C9");
    check_field_offset(lv, s7773c9f0, ABISELECT(88,44), "S7773C9.s7773c9f0");
    test_class_info(&lv, &cd_S7773C9);
    dp->~S7773C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7773C9(Test_S7773C9, "S7773C9", ABISELECT(240,128));

#else // __cplusplus

extern void _ZN7S7773C9C1Ev();
extern void _ZN7S7773C9D2Ev();
Name_Map name_map_S7773C9[] = {
  NSPAIR(_ZN7S7773C9C1Ev),
  NSPAIR(_ZN7S7773C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C5;
extern VTBL_ENTRY _ZTI7S7773C5[];
extern  VTBL_ENTRY _ZTV7S7773C5[];
extern Class_Descriptor cd_S7773C6;
extern VTBL_ENTRY _ZTI7S7773C6[];
extern  VTBL_ENTRY _ZTV7S7773C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C6[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C5;
extern VTBL_ENTRY _ZTI7S7773C5[];
extern  VTBL_ENTRY _ZTV7S7773C5[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C6;
extern VTBL_ENTRY _ZTI7S7773C6[];
extern  VTBL_ENTRY _ZTV7S7773C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C6[];
extern Class_Descriptor cd_S7773C3;
extern VTBL_ENTRY _ZTI7S7773C3[];
extern  VTBL_ENTRY _ZTV7S7773C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C3[];
static Base_Class bases_S7773C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7773C4_nt,    ABISELECT(96,48), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7773C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7773C4_nt,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7773C5,    ABISELECT(104,52), //bcp->offset
    34, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7773C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7773C4_nt,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7773C5,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7773C4_nt,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7773C6,    ABISELECT(136,68), //bcp->offset
    75, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7773C3,    ABISELECT(120,60), //bcp->offset
    48, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7773C9[];
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C9D1Ev();
extern void _ZN7S7773C9D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
extern void _ZN7S7773C93v14Ev();
extern void _ZN7S7773C93v15Ev();
extern void _ZN7S7773C93v16Ev();
extern void _ZN7S7773C93v17Ev();
extern void _ZN7S7773C93v18Ev();
extern void _ZN7S7773C93v19Ev();
extern void _ZN7S7773C93v20Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void ABISELECT(_ZTv0_n88_N7S7773C9D1Ev,_ZTv0_n44_N7S7773C9D1Ev)();
extern void ABISELECT(_ZThn120_N7S7773C9D1Ev,_ZThn60_N7S7773C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7773C9D0Ev,_ZTv0_n44_N7S7773C9D0Ev)();
extern void ABISELECT(_ZThn120_N7S7773C9D0Ev,_ZThn60_N7S7773C9D0Ev)() __attribute__((weak));
extern void _ZN7S7773C33v13Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZTvn16_n88_N7S7773C9D1Ev,_ZTvn8_n44_N7S7773C9D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N7S7773C9D0Ev,_ZTvn8_n44_N7S7773C9D0Ev)();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY vtc_S7773C9[] = {
  ABISELECT(120,60),
  ABISELECT(96,48),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v14Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v15Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(-120,-60),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C9D1Ev,_ZTv0_n44_N7S7773C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C9D0Ev,_ZTv0_n44_N7S7773C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C33v13Ev,
  ABISELECT(-32,-16),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C9D1Ev,_ZTvn8_n44_N7S7773C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C9D0Ev,_ZTvn8_n44_N7S7773C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern VTBL_ENTRY _ZTV7S7773C9[];
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C6D1Ev();
extern void _ZN7S7773C6D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C6__7S7773C9[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__7S7773C6__7S7773C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void _ZN7S7773C3D1Ev();
extern void _ZN7S7773C3D0Ev();
extern void _ZN7S7773C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C3__7S7773C9[] = {
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7773C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C33v13Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C6D1Ev();
extern void _ZN7S7773C6D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C67S7773C3__A1__7S7773C9[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__7S7773C67S7773C3__A1__7S7773C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
static  VTBL_ENTRY _tg__ZTV10S7773C4_nt__7S7773C3__7S7773C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZThn16_N7S7773C3D1Ev,_ZThn8_N7S7773C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7773C3D0Ev,_ZThn8_N7S7773C3D0Ev)();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C6__7S7773C3__7S7773C9[] = {
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7773C3D1Ev,_ZThn8_N7S7773C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7773C3D0Ev,_ZThn8_N7S7773C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__A1__7S7773C3__7S7773C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
static  VTT_ENTRY vtt_S7773C9[] = {
  {&(_ZTV7S7773C9[5]),  5,90},
  {&(_tg__ZTV7S7773C6__7S7773C9[3]),  3,15},
  {&(_tg__ZTV7S7773C5__7S7773C6__7S7773C9[8]),  8,14},
  {&(_ZTV7S7773C9[30]),  30,90},
  {&(_ZTV7S7773C9[42]),  42,90},
  {&(_ZTV7S7773C9[66]),  66,90},
  {&(_ZTV7S7773C9[78]),  78,90},
  {&(_tg__ZTV7S7773C3__7S7773C9[4]),  4,13},
  {&(_tg__ZTV7S7773C67S7773C3__A1__7S7773C9[3]),  3,15},
  {&(_tg__ZTV7S7773C5__7S7773C67S7773C3__A1__7S7773C9[8]),  8,14},
  {&(_tg__ZTV10S7773C4_nt__7S7773C3__7S7773C9[6]),  6,10},
  {&(_tg__ZTV7S7773C6__7S7773C3__7S7773C9[3]),  3,15},
  {&(_tg__ZTV7S7773C5__A1__7S7773C3__7S7773C9[8]),  8,14},
};
extern VTBL_ENTRY _ZTI7S7773C9[];
extern  VTBL_ENTRY _ZTV7S7773C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C9[];
static VTBL_ENTRY alt_thunk_names80[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C9D0Ev,_ZTv0_n44_N7S7773C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7773C9D0Ev,_ZThn60_N7S7773C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C9D1Ev,_ZTv0_n44_N7S7773C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7773C9D1Ev,_ZThn60_N7S7773C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7773C9 = {  "S7773C9", // class name
  bases_S7773C9, 10,
  &(vtc_S7773C9[0]), // expected_vtbl_contents
  &(vtt_S7773C9[0]), // expected_vtt_contents
  ABISELECT(240,128), // object size
  NSPAIRA(_ZTI7S7773C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7773C9),90, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7773C9),13, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names80,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7773C8  : virtual S7773C5 , virtual S7773C3 , S7773C9 , virtual S7773C6 {
  ::S7773C4_nt s7773c8f0;
  virtual  ~S7773C8(); // _ZN7S7773C8D2Ev
  virtual void  v21(); // _ZN7S7773C83v21Ev
  virtual void  v22(); // _ZN7S7773C83v22Ev
  virtual void  v23(); // _ZN7S7773C83v23Ev
  virtual void  v24(); // _ZN7S7773C83v24Ev
  virtual void  v25(); // _ZN7S7773C83v25Ev
  virtual void  v26(); // _ZN7S7773C83v26Ev
  S7773C8(); // tgen
};
//SIG(-1 S7773C8) C1{ VBC2{ BC3{ v7 v8 v9 v10} v11 v12 Fc} VBC4{ VBC3 BC2 BC5{ BC3 VBC2 vd v13 v14 v15 v16 v17 v18 Fi FC2[4] Fp} vd v19 FC6{} Fi Fs[3]} BC7{ VBC3 BC5 VBC4 vd v20 v21 v22 v23 v24 v25 v26 Fi} VBC5 vd v1 v2 v3 v4 v5 v6 FC3}


 S7773C8 ::~S7773C8(){ note_dtor("S7773C8", this);}
void  S7773C8 ::v21(){vfunc_called(this, "_ZN7S7773C83v21Ev");}
void  S7773C8 ::v22(){vfunc_called(this, "_ZN7S7773C83v22Ev");}
void  S7773C8 ::v23(){vfunc_called(this, "_ZN7S7773C83v23Ev");}
void  S7773C8 ::v24(){vfunc_called(this, "_ZN7S7773C83v24Ev");}
void  S7773C8 ::v25(){vfunc_called(this, "_ZN7S7773C83v25Ev");}
void  S7773C8 ::v26(){vfunc_called(this, "_ZN7S7773C83v26Ev");}
S7773C8 ::S7773C8(){ note_ctor("S7773C8", this);} // tgen

static void Test_S7773C8()
{
  extern Class_Descriptor cd_S7773C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,45)];
    init_test(&cd_S7773C8, buf);
    S7773C8 *dp, &lv = *(dp=new (buf) S7773C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,176), "sizeof(S7773C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7773C8)");
    /*is_ambiguous_... S7773C8::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C5*), ABISELECT(104,52), "S7773C8");
    /*is_ambiguous_... S7773C8::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C5*), ABISELECT(104,52), "S7773C8");
    check_base_class_offset(lv, (S7773C5*)(S7773C6*)(S7773C3*), ABISELECT(104,52), "S7773C8");
    /*is_ambiguous_... S7773C9::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C5*)(S7773C6*)(S7773C9*), ABISELECT(104,52), "S7773C8");
    /*is_ambiguous_... S7773C8::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C5*)(S7773C6*), ABISELECT(104,52), "S7773C8");
    /*is_ambiguous_... S7773C3::S7773C4_nt */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C3*), ABISELECT(240,128), "S7773C8");
    /*is_ambiguous_... S7773C9::S7773C4_nt */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C9*), ABISELECT(240,128), "S7773C8");
    /*is_ambiguous_... S7773C3::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C5*)(S7773C3*), ABISELECT(120,60), "S7773C8");
    /*is_ambiguous_... S7773C3::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C5*)(S7773C3*), ABISELECT(120,60), "S7773C8");
    /*is_ambiguous_... S7773C6::S7773C4_nt */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C6*)(S7773C3*), ABISELECT(136,68), "S7773C8");
    check_base_class_offset(lv, (S7773C6*)(S7773C3*), ABISELECT(136,68), "S7773C8");
    check_base_class_offset(lv, (S7773C3*), ABISELECT(120,60), "S7773C8");
    check_base_class_offset(lv, (S7773C3*)(S7773C9*), ABISELECT(120,60), "S7773C8");
    /*is_ambiguous_... S7773C9::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C6*)(S7773C9*), 0, "S7773C8");
    /*is_ambiguous_... S7773C9::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C6*)(S7773C9*), 0, "S7773C8");
    check_base_class_offset(lv, (S7773C9*), 0, "S7773C8");
    /*is_ambiguous_... S7773C8::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C6*), ABISELECT(248,132), "S7773C8");
    /*is_ambiguous_... S7773C8::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C6*), ABISELECT(248,132), "S7773C8");
    check_field_offset(lv, s7773c8f0, ABISELECT(96,48), "S7773C8.s7773c8f0");
    test_class_info(&lv, &cd_S7773C8);
    dp->~S7773C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7773C8(Test_S7773C8, "S7773C8", ABISELECT(336,176));

#else // __cplusplus

extern void _ZN7S7773C8C1Ev();
extern void _ZN7S7773C8D2Ev();
Name_Map name_map_S7773C8[] = {
  NSPAIR(_ZN7S7773C8C1Ev),
  NSPAIR(_ZN7S7773C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C5;
extern VTBL_ENTRY _ZTI7S7773C5[];
extern  VTBL_ENTRY _ZTV7S7773C5[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C5;
extern VTBL_ENTRY _ZTI7S7773C5[];
extern  VTBL_ENTRY _ZTV7S7773C5[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C6;
extern VTBL_ENTRY _ZTI7S7773C6[];
extern  VTBL_ENTRY _ZTV7S7773C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C6[];
extern Class_Descriptor cd_S7773C3;
extern VTBL_ENTRY _ZTI7S7773C3[];
extern  VTBL_ENTRY _ZTV7S7773C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C3[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C6;
extern VTBL_ENTRY _ZTI7S7773C6[];
extern  VTBL_ENTRY _ZTV7S7773C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C6[];
extern Class_Descriptor cd_S7773C9;
extern VTBL_ENTRY _ZTI7S7773C9[];
extern  VTBL_ENTRY _ZTV7S7773C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C9[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C6;
extern VTBL_ENTRY _ZTI7S7773C6[];
extern  VTBL_ENTRY _ZTV7S7773C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C6[];
static Base_Class bases_S7773C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7773C4_nt,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7773C5,    ABISELECT(104,52), //bcp->offset
    31, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7773C4_nt,    ABISELECT(240,128), //bcp->offset
    87, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7773C4_nt,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7773C5,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7773C4_nt,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7773C6,    ABISELECT(136,68), //bcp->offset
    72, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7773C3,    ABISELECT(120,60), //bcp->offset
    45, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7773C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7773C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7773C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7773C4_nt,    ABISELECT(248,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7773C6,    ABISELECT(248,132), //bcp->offset
    97, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7773C8[];
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C8D1Ev();
extern void _ZN7S7773C8D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
extern void _ZN7S7773C93v14Ev();
extern void _ZN7S7773C93v15Ev();
extern void _ZN7S7773C93v16Ev();
extern void _ZN7S7773C93v17Ev();
extern void _ZN7S7773C93v18Ev();
extern void _ZN7S7773C93v19Ev();
extern void _ZN7S7773C93v20Ev();
extern void _ZN7S7773C83v21Ev();
extern void _ZN7S7773C83v22Ev();
extern void _ZN7S7773C83v23Ev();
extern void _ZN7S7773C83v24Ev();
extern void _ZN7S7773C83v25Ev();
extern void _ZN7S7773C83v26Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void ABISELECT(_ZTv0_n88_N7S7773C8D1Ev,_ZTv0_n44_N7S7773C8D1Ev)();
extern void ABISELECT(_ZThn120_N7S7773C8D1Ev,_ZThn60_N7S7773C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7773C8D0Ev,_ZTv0_n44_N7S7773C8D0Ev)();
extern void ABISELECT(_ZThn120_N7S7773C8D0Ev,_ZThn60_N7S7773C8D0Ev)() __attribute__((weak));
extern void _ZN7S7773C33v13Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZTvn16_n88_N7S7773C8D1Ev,_ZTvn8_n44_N7S7773C8D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N7S7773C8D0Ev,_ZTvn8_n44_N7S7773C8D0Ev)();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7773C8D1Ev,_ZTv0_n32_N7S7773C8D1Ev)();
extern void ABISELECT(_ZThn248_N7S7773C8D1Ev,_ZThn132_N7S7773C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7773C8D0Ev,_ZTv0_n32_N7S7773C8D0Ev)();
extern void ABISELECT(_ZThn248_N7S7773C8D0Ev,_ZThn132_N7S7773C8D0Ev)() __attribute__((weak));
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY vtc_S7773C8[] = {
  ABISELECT(248,132),
  ABISELECT(120,60),
  ABISELECT(240,128),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C8[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v14Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v15Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v26Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7773C8[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(-120,-60),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(120,68),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7773C8[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C8D1Ev,_ZTv0_n44_N7S7773C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C8D0Ev,_ZTv0_n44_N7S7773C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C33v13Ev,
  ABISELECT(-32,-16),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI7S7773C8[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C8D1Ev,_ZTvn8_n44_N7S7773C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C8D0Ev,_ZTvn8_n44_N7S7773C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-128),
  (VTBL_ENTRY)&(_ZTI7S7773C8[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-248,-132),
  0,
  0,
  0,
  0,
  ABISELECT(-144,-80),
  ABISELECT(-248,-132),
  (VTBL_ENTRY)&(_ZTI7S7773C8[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7773C8D1Ev,_ZTv0_n32_N7S7773C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7773C8D0Ev,_ZTv0_n32_N7S7773C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern VTBL_ENTRY _ZTV7S7773C8[];
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C9D1Ev();
extern void _ZN7S7773C9D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
extern void _ZN7S7773C93v14Ev();
extern void _ZN7S7773C93v15Ev();
extern void _ZN7S7773C93v16Ev();
extern void _ZN7S7773C93v17Ev();
extern void _ZN7S7773C93v18Ev();
extern void _ZN7S7773C93v19Ev();
extern void _ZN7S7773C93v20Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C9__7S7773C8[] = {
  ABISELECT(120,60),
  ABISELECT(240,128),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v14Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v15Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v20Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C6D1Ev();
extern void _ZN7S7773C6D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C67S7773C9__A1__7S7773C8[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__7S7773C67S7773C9__A1__7S7773C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
static  VTBL_ENTRY _tg__ZTV10S7773C4_nt__7S7773C9__7S7773C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-240,-128),
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__7S7773C9__7S7773C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void ABISELECT(_ZTv0_n88_N7S7773C9D1Ev,_ZTv0_n44_N7S7773C9D1Ev)();
extern void ABISELECT(_ZThn120_N7S7773C9D1Ev,_ZThn60_N7S7773C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7773C9D0Ev,_ZTv0_n44_N7S7773C9D0Ev)();
extern void ABISELECT(_ZThn120_N7S7773C9D0Ev,_ZThn60_N7S7773C9D0Ev)() __attribute__((weak));
extern void _ZN7S7773C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C3__7S7773C9__7S7773C8[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(-120,-60),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(120,68),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C9D1Ev,_ZTv0_n44_N7S7773C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C9D0Ev,_ZTv0_n44_N7S7773C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C33v13Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZTvn16_n88_N7S7773C9D1Ev,_ZTvn8_n44_N7S7773C9D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N7S7773C9D0Ev,_ZTvn8_n44_N7S7773C9D0Ev)();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C67S7773C3__A1__7S7773C9__7S7773C8[] = {
  ABISELECT(-32,-16),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C9D1Ev,_ZTvn8_n44_N7S7773C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C9D0Ev,_ZTvn8_n44_N7S7773C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void _ZN7S7773C3D1Ev();
extern void _ZN7S7773C3D0Ev();
extern void _ZN7S7773C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C3__7S7773C8[] = {
  ABISELECT(-16,-8),
  ABISELECT(120,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7773C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C33v13Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C6D1Ev();
extern void _ZN7S7773C6D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C67S7773C3__7S7773C8[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__7S7773C67S7773C3__7S7773C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
static  VTBL_ENTRY _tg__ZTV10S7773C4_nt__7S7773C3__7S7773C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZThn16_N7S7773C3D1Ev,_ZThn8_N7S7773C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7773C3D0Ev,_ZThn8_N7S7773C3D0Ev)();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C6__7S7773C3__7S7773C8[] = {
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7773C3D1Ev,_ZThn8_N7S7773C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7773C3D0Ev,_ZThn8_N7S7773C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__A1__7S7773C3__7S7773C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C6D1Ev();
extern void _ZN7S7773C6D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C6__A2__7S7773C8[] = {
  ABISELECT(-144,-80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__7S7773C6__A2__7S7773C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(144,80),
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
static  VTT_ENTRY vtt_S7773C8[] = {
  {&(_ZTV7S7773C8[6]),  6,123},
  {&(_tg__ZTV7S7773C9__7S7773C8[5]),  5,24},
  {&(_tg__ZTV7S7773C67S7773C9__A1__7S7773C8[3]),  3,15},
  {&(_tg__ZTV7S7773C5__7S7773C67S7773C9__A1__7S7773C8[8]),  8,14},
  {&(_tg__ZTV10S7773C4_nt__7S7773C9__7S7773C8[6]),  6,10},
  {&(_tg__ZTV7S7773C5__7S7773C9__7S7773C8[8]),  8,14},
  {&(_tg__ZTV7S7773C3__7S7773C9__7S7773C8[18]),  18,27},
  {&(_tg__ZTV7S7773C67S7773C3__A1__7S7773C9__7S7773C8[3]),  3,15},
  {&(_ZTV7S7773C8[39]),  39,123},
  {&(_ZTV7S7773C8[63]),  63,123},
  {&(_ZTV7S7773C8[93]),  93,123},
  {&(_ZTV7S7773C8[75]),  75,123},
  {&(_ZTV7S7773C8[111]),  111,123},
  {&(_tg__ZTV7S7773C3__7S7773C8[4]),  4,13},
  {&(_tg__ZTV7S7773C67S7773C3__7S7773C8[3]),  3,15},
  {&(_tg__ZTV7S7773C5__7S7773C67S7773C3__7S7773C8[8]),  8,14},
  {&(_tg__ZTV10S7773C4_nt__7S7773C3__7S7773C8[6]),  6,10},
  {&(_tg__ZTV7S7773C6__7S7773C3__7S7773C8[3]),  3,15},
  {&(_tg__ZTV7S7773C5__A1__7S7773C3__7S7773C8[8]),  8,14},
  {&(_tg__ZTV7S7773C6__A2__7S7773C8[3]),  3,15},
  {&(_tg__ZTV7S7773C5__7S7773C6__A2__7S7773C8[8]),  8,14},
};
extern VTBL_ENTRY _ZTI7S7773C8[];
extern  VTBL_ENTRY _ZTV7S7773C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C8[];
static VTBL_ENTRY alt_thunk_names81[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C9D0Ev,_ZTv0_n44_N7S7773C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7773C9D0Ev,_ZThn60_N7S7773C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C9D1Ev,_ZTv0_n44_N7S7773C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7773C9D1Ev,_ZThn60_N7S7773C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7773C8D0Ev,_ZTv0_n32_N7S7773C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N7S7773C8D0Ev,_ZThn132_N7S7773C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7773C8D1Ev,_ZTv0_n32_N7S7773C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N7S7773C8D1Ev,_ZThn132_N7S7773C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C8D0Ev,_ZTv0_n44_N7S7773C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7773C8D0Ev,_ZThn60_N7S7773C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C8D1Ev,_ZTv0_n44_N7S7773C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7773C8D1Ev,_ZThn60_N7S7773C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7773C8 = {  "S7773C8", // class name
  bases_S7773C8, 13,
  &(vtc_S7773C8[0]), // expected_vtbl_contents
  &(vtt_S7773C8[0]), // expected_vtt_contents
  ABISELECT(336,176), // object size
  NSPAIRA(_ZTI7S7773C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7773C8),123, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7773C8),21, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names81,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7773C10  : S7773C4_nt {
  int s7773c10f0;
  virtual void  v27(); // _ZN8S7773C103v27Ev
  ~S7773C10(); // tgen
  S7773C10(); // tgen
};
//SIG(-1 S7773C10) C1{ BC2{ v2 v3 v4 v5} v1 Fi}


void  S7773C10 ::v27(){vfunc_called(this, "_ZN8S7773C103v27Ev");}
S7773C10 ::~S7773C10(){ note_dtor("S7773C10", this);} // tgen
S7773C10 ::S7773C10(){ note_ctor("S7773C10", this);} // tgen

static void Test_S7773C10()
{
  extern Class_Descriptor cd_S7773C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7773C10, buf);
    S7773C10 *dp, &lv = *(dp=new (buf) S7773C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7773C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7773C10)");
    check_base_class_offset(lv, (S7773C4_nt*), 0, "S7773C10");
    check_field_offset(lv, s7773c10f0, ABISELECT(8,4), "S7773C10.s7773c10f0");
    test_class_info(&lv, &cd_S7773C10);
    dp->~S7773C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7773C10(Test_S7773C10, "S7773C10", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7773C10C1Ev();
extern void _ZN8S7773C10D1Ev();
Name_Map name_map_S7773C10[] = {
  NSPAIR(_ZN8S7773C10C1Ev),
  NSPAIR(_ZN8S7773C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
static Base_Class bases_S7773C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7773C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7773C10[];
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN8S7773C103v27Ev();
static  VTBL_ENTRY vtc_S7773C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7773C10[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN8S7773C103v27Ev,
};
extern VTBL_ENTRY _ZTI8S7773C10[];
extern  VTBL_ENTRY _ZTV8S7773C10[];
Class_Descriptor cd_S7773C10 = {  "S7773C10", // class name
  bases_S7773C10, 1,
  &(vtc_S7773C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7773C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7773C10),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7773C2  : virtual S7773C3 , S7773C8 , S7773C5 , S7773C4_nt , S7773C10 {
  long double s7773c2f0;
  virtual  ~S7773C2(); // _ZN7S7773C2D2Ev
  virtual void  v28(); // _ZN7S7773C23v28Ev
  virtual void  v29(); // _ZN7S7773C23v29Ev
  virtual void  v30(); // _ZN7S7773C23v30Ev
  virtual void  v31(); // _ZN7S7773C23v31Ev
  virtual void  v32(); // _ZN7S7773C23v32Ev
  S7773C2(); // tgen
};
//SIG(-1 S7773C2) C1{ VBC2{ VBC3{ v6 v7 v8 v9} BC4{ BC3 v10 v11 Fc} BC5{ BC3 VBC4 vd v12 v13 v14 v15 v16 v17 Fi FC4[4] Fp} vd v18 FC6{} Fi Fs[3]} BC7{ VBC4 VBC2 BC8{ VBC3 BC5 VBC2 vd v19 v20 v21 v22 v23 v24 v25 Fi} VBC5 vd v26 v27 v28 v29 v30 v31 FC3} BC4 BC3 BC9{ BC3 v32 Fi} vd v1 v2 v3 v4 v5 FD}


 S7773C2 ::~S7773C2(){ note_dtor("S7773C2", this);}
void  S7773C2 ::v28(){vfunc_called(this, "_ZN7S7773C23v28Ev");}
void  S7773C2 ::v29(){vfunc_called(this, "_ZN7S7773C23v29Ev");}
void  S7773C2 ::v30(){vfunc_called(this, "_ZN7S7773C23v30Ev");}
void  S7773C2 ::v31(){vfunc_called(this, "_ZN7S7773C23v31Ev");}
void  S7773C2 ::v32(){vfunc_called(this, "_ZN7S7773C23v32Ev");}
S7773C2 ::S7773C2(){ note_ctor("S7773C2", this);} // tgen

static void Test_S7773C2()
{
  extern Class_Descriptor cd_S7773C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,53)];
    init_test(&cd_S7773C2, buf);
    S7773C2 *dp, &lv = *(dp=new (buf) S7773C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,208), "sizeof(S7773C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7773C2)");
    /*is_ambiguous_... S7773C3::S7773C4_nt */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C3*), ABISELECT(280,152), "S7773C2");
    /*is_ambiguous_... S7773C9::S7773C4_nt */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C9*)(S7773C8*), ABISELECT(280,152), "S7773C2");
    /*is_ambiguous_... S7773C3::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C5*)(S7773C3*), ABISELECT(160,84), "S7773C2");
    /*is_ambiguous_... S7773C3::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C5*)(S7773C3*), ABISELECT(160,84), "S7773C2");
    /*is_ambiguous_... S7773C6::S7773C4_nt */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C6*)(S7773C3*), ABISELECT(176,92), "S7773C2");
    /*is_ambiguous_... S7773C2::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C5*), ABISELECT(288,156), "S7773C2");
    check_base_class_offset(lv, (S7773C5*)(S7773C6*)(S7773C3*), ABISELECT(288,156), "S7773C2");
    /*is_ambiguous_... S7773C8::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C5*)(S7773C8*), ABISELECT(288,156), "S7773C2");
    /*is_ambiguous_... S7773C9::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C5*)(S7773C6*)(S7773C9*)(S7773C8*), ABISELECT(288,156), "S7773C2");
    /*is_ambiguous_... S7773C2::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C5*)(S7773C6*), ABISELECT(288,156), "S7773C2");
    check_base_class_offset(lv, (S7773C6*)(S7773C3*), ABISELECT(176,92), "S7773C2");
    check_base_class_offset(lv, (S7773C3*), ABISELECT(160,84), "S7773C2");
    check_base_class_offset(lv, (S7773C3*)(S7773C8*), ABISELECT(160,84), "S7773C2");
    check_base_class_offset(lv, (S7773C3*)(S7773C9*)(S7773C8*), ABISELECT(160,84), "S7773C2");
    /*is_ambiguous_... S7773C9::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C6*)(S7773C9*)(S7773C8*), 0, "S7773C2");
    /*is_ambiguous_... S7773C9::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C6*)(S7773C9*)(S7773C8*), 0, "S7773C2");
    check_base_class_offset(lv, (S7773C9*)(S7773C8*), 0, "S7773C2");
    /*is_ambiguous_... S7773C2::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C6*), ABISELECT(304,164), "S7773C2");
    /*is_ambiguous_... S7773C8::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C6*)(S7773C8*), ABISELECT(304,164), "S7773C2");
    check_base_class_offset(lv, (S7773C8*), 0, "S7773C2");
    /*is_ambiguous_... S7773C2::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C5*), ABISELECT(104,52), "S7773C2");
    /*is_ambiguous_... S7773C2::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C5*), ABISELECT(104,52), "S7773C2");
    /*is_ambiguous_... S7773C2::S7773C4_nt */ AMB_check_base_class_offset(lv, (S7773C4_nt*), ABISELECT(120,60), "S7773C2");
    check_base_class_offset(lv, (S7773C4_nt*)(S7773C10*), ABISELECT(128,64), "S7773C2");
    check_base_class_offset(lv, (S7773C10*), ABISELECT(128,64), "S7773C2");
    check_field_offset(lv, s7773c2f0, ABISELECT(144,72), "S7773C2.s7773c2f0");
    test_class_info(&lv, &cd_S7773C2);
    dp->~S7773C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7773C2(Test_S7773C2, "S7773C2", ABISELECT(400,208));

#else // __cplusplus

extern void _ZN7S7773C2C1Ev();
extern void _ZN7S7773C2D2Ev();
Name_Map name_map_S7773C2[] = {
  NSPAIR(_ZN7S7773C2C1Ev),
  NSPAIR(_ZN7S7773C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C5;
extern VTBL_ENTRY _ZTI7S7773C5[];
extern  VTBL_ENTRY _ZTV7S7773C5[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C5;
extern VTBL_ENTRY _ZTI7S7773C5[];
extern  VTBL_ENTRY _ZTV7S7773C5[];
extern Class_Descriptor cd_S7773C6;
extern VTBL_ENTRY _ZTI7S7773C6[];
extern  VTBL_ENTRY _ZTV7S7773C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C6[];
extern Class_Descriptor cd_S7773C3;
extern VTBL_ENTRY _ZTI7S7773C3[];
extern  VTBL_ENTRY _ZTV7S7773C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C3[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C6;
extern VTBL_ENTRY _ZTI7S7773C6[];
extern  VTBL_ENTRY _ZTV7S7773C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C6[];
extern Class_Descriptor cd_S7773C9;
extern VTBL_ENTRY _ZTI7S7773C9[];
extern  VTBL_ENTRY _ZTV7S7773C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C9[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C6;
extern VTBL_ENTRY _ZTI7S7773C6[];
extern  VTBL_ENTRY _ZTV7S7773C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C6[];
extern Class_Descriptor cd_S7773C8;
extern VTBL_ENTRY _ZTI7S7773C8[];
extern  VTBL_ENTRY _ZTV7S7773C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C8[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C5;
extern VTBL_ENTRY _ZTI7S7773C5[];
extern  VTBL_ENTRY _ZTV7S7773C5[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C10;
extern VTBL_ENTRY _ZTI8S7773C10[];
extern  VTBL_ENTRY _ZTV8S7773C10[];
static Base_Class bases_S7773C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7773C4_nt,    ABISELECT(280,152), //bcp->offset
    99, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7773C4_nt,    ABISELECT(160,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7773C5,    ABISELECT(160,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7773C4_nt,    ABISELECT(176,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7773C4_nt,    ABISELECT(288,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7773C5,    ABISELECT(288,156), //bcp->offset
    109, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7773C6,    ABISELECT(176,92), //bcp->offset
    84, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7773C3,    ABISELECT(160,84), //bcp->offset
    57, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7773C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7773C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7773C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7773C4_nt,    ABISELECT(304,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7773C6,    ABISELECT(304,164), //bcp->offset
    123, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7773C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7773C4_nt,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7773C5,    ABISELECT(104,52), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7773C4_nt,    ABISELECT(120,60), //bcp->offset
    44, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7773C4_nt,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7773C10,    ABISELECT(128,64), //bcp->offset
    50, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7773C2[];
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C2D1Ev();
extern void _ZN7S7773C2D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
extern void _ZN7S7773C93v14Ev();
extern void _ZN7S7773C93v15Ev();
extern void _ZN7S7773C93v16Ev();
extern void _ZN7S7773C93v17Ev();
extern void _ZN7S7773C93v18Ev();
extern void _ZN7S7773C93v19Ev();
extern void _ZN7S7773C93v20Ev();
extern void _ZN7S7773C83v21Ev();
extern void _ZN7S7773C83v22Ev();
extern void _ZN7S7773C83v23Ev();
extern void _ZN7S7773C83v24Ev();
extern void _ZN7S7773C83v25Ev();
extern void _ZN7S7773C83v26Ev();
extern void _ZN7S7773C23v28Ev();
extern void _ZN7S7773C23v29Ev();
extern void _ZN7S7773C23v30Ev();
extern void _ZN7S7773C23v31Ev();
extern void _ZN7S7773C23v32Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN8S7773C103v27Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void ABISELECT(_ZTv0_n88_N7S7773C2D1Ev,_ZTv0_n44_N7S7773C2D1Ev)();
extern void ABISELECT(_ZThn160_N7S7773C2D1Ev,_ZThn84_N7S7773C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7773C2D0Ev,_ZTv0_n44_N7S7773C2D0Ev)();
extern void ABISELECT(_ZThn160_N7S7773C2D0Ev,_ZThn84_N7S7773C2D0Ev)() __attribute__((weak));
extern void _ZN7S7773C33v13Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZTvn16_n88_N7S7773C2D1Ev,_ZTvn8_n44_N7S7773C2D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N7S7773C2D0Ev,_ZTvn8_n44_N7S7773C2D0Ev)();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7773C2D1Ev,_ZTv0_n32_N7S7773C2D1Ev)();
extern void ABISELECT(_ZThn304_N7S7773C2D1Ev,_ZThn164_N7S7773C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7773C2D0Ev,_ZTv0_n32_N7S7773C2D0Ev)();
extern void ABISELECT(_ZThn304_N7S7773C2D0Ev,_ZThn164_N7S7773C2D0Ev)() __attribute__((weak));
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY vtc_S7773C2[] = {
  ABISELECT(304,164),
  ABISELECT(160,84),
  ABISELECT(280,152),
  ABISELECT(288,156),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C2[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v14Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v15Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v26Ev,
  (VTBL_ENTRY)&_ZN7S7773C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7773C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7773C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7773C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7773C23v32Ev,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7773C2[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7773C2[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S7773C2[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN8S7773C103v27Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(128,72),
  ABISELECT(120,68),
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI7S7773C2[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C2D1Ev,_ZTv0_n44_N7S7773C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C2D0Ev,_ZTv0_n44_N7S7773C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C33v13Ev,
  ABISELECT(112,64),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI7S7773C2[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C2D1Ev,_ZTvn8_n44_N7S7773C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C2D0Ev,_ZTvn8_n44_N7S7773C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-280,-152),
  (VTBL_ENTRY)&(_ZTI7S7773C2[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI7S7773C2[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-164),
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-304,-164),
  (VTBL_ENTRY)&(_ZTI7S7773C2[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7773C2D1Ev,_ZTv0_n32_N7S7773C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7773C2D0Ev,_ZTv0_n32_N7S7773C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern VTBL_ENTRY _ZTV7S7773C2[];
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C8D1Ev();
extern void _ZN7S7773C8D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
extern void _ZN7S7773C93v14Ev();
extern void _ZN7S7773C93v15Ev();
extern void _ZN7S7773C93v16Ev();
extern void _ZN7S7773C93v17Ev();
extern void _ZN7S7773C93v18Ev();
extern void _ZN7S7773C93v19Ev();
extern void _ZN7S7773C93v20Ev();
extern void _ZN7S7773C83v21Ev();
extern void _ZN7S7773C83v22Ev();
extern void _ZN7S7773C83v23Ev();
extern void _ZN7S7773C83v24Ev();
extern void _ZN7S7773C83v25Ev();
extern void _ZN7S7773C83v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C8__7S7773C2[] = {
  ABISELECT(304,164),
  ABISELECT(160,84),
  ABISELECT(280,152),
  ABISELECT(288,156),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C8[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v14Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v15Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v26Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C9D1Ev();
extern void _ZN7S7773C9D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
extern void _ZN7S7773C93v14Ev();
extern void _ZN7S7773C93v15Ev();
extern void _ZN7S7773C93v16Ev();
extern void _ZN7S7773C93v17Ev();
extern void _ZN7S7773C93v18Ev();
extern void _ZN7S7773C93v19Ev();
extern void _ZN7S7773C93v20Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C97S7773C8__7S7773C2[] = {
  ABISELECT(160,84),
  ABISELECT(280,152),
  ABISELECT(288,156),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v14Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v15Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v20Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C6D1Ev();
extern void _ZN7S7773C6D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C67S7773C97S7773C8__A1__7S7773C2[] = {
  ABISELECT(288,156),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__7S7773C67S7773C97S7773C8__A1__7S7773C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
static  VTBL_ENTRY _tg__ZTV10S7773C4_nt__7S7773C97S7773C8__7S7773C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-280,-152),
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__7S7773C97S7773C8__7S7773C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void ABISELECT(_ZTv0_n88_N7S7773C9D1Ev,_ZTv0_n44_N7S7773C9D1Ev)();
extern void ABISELECT(_ZThn160_N7S7773C9D1Ev,_ZThn84_N7S7773C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7773C9D0Ev,_ZTv0_n44_N7S7773C9D0Ev)();
extern void ABISELECT(_ZThn160_N7S7773C9D0Ev,_ZThn84_N7S7773C9D0Ev)() __attribute__((weak));
extern void _ZN7S7773C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C3__7S7773C97S7773C8__7S7773C2[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(128,72),
  ABISELECT(120,68),
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C9D1Ev,_ZTv0_n44_N7S7773C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C9D0Ev,_ZTv0_n44_N7S7773C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C33v13Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZTvn16_n88_N7S7773C9D1Ev,_ZTvn8_n44_N7S7773C9D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N7S7773C9D0Ev,_ZTvn8_n44_N7S7773C9D0Ev)();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C67S7773C3__A1__7S7773C97S7773C8__7S7773C2[] = {
  ABISELECT(112,64),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C9D1Ev,_ZTvn8_n44_N7S7773C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C9D0Ev,_ZTvn8_n44_N7S7773C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__7S7773C8__7S7773C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI7S7773C8[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void ABISELECT(_ZTv0_n88_N7S7773C8D1Ev,_ZTv0_n44_N7S7773C8D1Ev)();
extern void ABISELECT(_ZThn160_N7S7773C8D1Ev,_ZThn84_N7S7773C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7773C8D0Ev,_ZTv0_n44_N7S7773C8D0Ev)();
extern void ABISELECT(_ZThn160_N7S7773C8D0Ev,_ZThn84_N7S7773C8D0Ev)() __attribute__((weak));
extern void _ZN7S7773C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C3__7S7773C8__7S7773C2[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(128,72),
  ABISELECT(120,68),
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI7S7773C8[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C8D1Ev,_ZTv0_n44_N7S7773C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C8D0Ev,_ZTv0_n44_N7S7773C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C33v13Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
static  VTBL_ENTRY _tg__ZTV10S7773C4_nt__A1__7S7773C8__7S7773C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-280,-152),
  (VTBL_ENTRY)&(_ZTI7S7773C8[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZTvn16_n88_N7S7773C8D1Ev,_ZTvn8_n44_N7S7773C8D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N7S7773C8D0Ev,_ZTvn8_n44_N7S7773C8D0Ev)();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C67S7773C3__7S7773C8__7S7773C2[] = {
  ABISELECT(112,64),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI7S7773C8[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C8D1Ev,_ZTvn8_n44_N7S7773C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C8D0Ev,_ZTvn8_n44_N7S7773C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7773C8D1Ev,_ZTv0_n32_N7S7773C8D1Ev)();
extern void ABISELECT(_ZThn304_N7S7773C8D1Ev,_ZThn164_N7S7773C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7773C8D0Ev,_ZTv0_n32_N7S7773C8D0Ev)();
extern void ABISELECT(_ZThn304_N7S7773C8D0Ev,_ZThn164_N7S7773C8D0Ev)() __attribute__((weak));
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C6__A2__7S7773C8__7S7773C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-164),
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-304,-164),
  (VTBL_ENTRY)&(_ZTI7S7773C8[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7773C8D1Ev,_ZTv0_n32_N7S7773C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7773C8D0Ev,_ZTv0_n32_N7S7773C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void _ZN7S7773C3D1Ev();
extern void _ZN7S7773C3D0Ev();
extern void _ZN7S7773C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C3__7S7773C2[] = {
  ABISELECT(128,72),
  ABISELECT(120,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7773C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C33v13Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C6D1Ev();
extern void _ZN7S7773C6D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C67S7773C3__7S7773C2[] = {
  ABISELECT(112,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__7S7773C67S7773C3__7S7773C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
static  VTBL_ENTRY _tg__ZTV10S7773C4_nt__7S7773C3__7S7773C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZThn16_N7S7773C3D1Ev,_ZThn8_N7S7773C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7773C3D0Ev,_ZThn8_N7S7773C3D0Ev)();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C6__7S7773C3__7S7773C2[] = {
  ABISELECT(112,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7773C3D1Ev,_ZThn8_N7S7773C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7773C3D0Ev,_ZThn8_N7S7773C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__A1__7S7773C3__7S7773C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C6D1Ev();
extern void _ZN7S7773C6D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C6__A2__7S7773C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__7S7773C6__A2__7S7773C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
static  VTT_ENTRY vtt_S7773C2[] = {
  {&(_ZTV7S7773C2[6]),  6,149},
  {&(_tg__ZTV7S7773C8__7S7773C2[6]),  6,31},
  {&(_tg__ZTV7S7773C97S7773C8__7S7773C2[5]),  5,24},
  {&(_tg__ZTV7S7773C67S7773C97S7773C8__A1__7S7773C2[3]),  3,15},
  {&(_tg__ZTV7S7773C5__7S7773C67S7773C97S7773C8__A1__7S7773C2[8]),  8,14},
  {&(_tg__ZTV10S7773C4_nt__7S7773C97S7773C8__7S7773C2[6]),  6,10},
  {&(_tg__ZTV7S7773C5__7S7773C97S7773C8__7S7773C2[8]),  8,14},
  {&(_tg__ZTV7S7773C3__7S7773C97S7773C8__7S7773C2[18]),  18,27},
  {&(_tg__ZTV7S7773C67S7773C3__A1__7S7773C97S7773C8__7S7773C2[3]),  3,15},
  {&(_tg__ZTV7S7773C5__7S7773C8__7S7773C2[8]),  8,14},
  {&(_tg__ZTV7S7773C3__7S7773C8__7S7773C2[18]),  18,27},
  {&(_tg__ZTV10S7773C4_nt__A1__7S7773C8__7S7773C2[6]),  6,10},
  {&(_tg__ZTV7S7773C67S7773C3__7S7773C8__7S7773C2[3]),  3,15},
  {&(_tg__ZTV7S7773C6__A2__7S7773C8__7S7773C2[14]),  14,26},
  {&(_ZTV7S7773C2[75]),  75,149},
  {&(_ZTV7S7773C2[105]),  105,149},
  {&(_ZTV7S7773C2[87]),  87,149},
  {&(_ZTV7S7773C2[117]),  117,149},
  {&(_ZTV7S7773C2[137]),  137,149},
  {&(_tg__ZTV7S7773C3__7S7773C2[4]),  4,13},
  {&(_tg__ZTV7S7773C67S7773C3__7S7773C2[3]),  3,15},
  {&(_tg__ZTV7S7773C5__7S7773C67S7773C3__7S7773C2[8]),  8,14},
  {&(_tg__ZTV10S7773C4_nt__7S7773C3__7S7773C2[6]),  6,10},
  {&(_tg__ZTV7S7773C6__7S7773C3__7S7773C2[3]),  3,15},
  {&(_tg__ZTV7S7773C5__A1__7S7773C3__7S7773C2[8]),  8,14},
  {&(_tg__ZTV7S7773C6__A2__7S7773C2[3]),  3,15},
  {&(_tg__ZTV7S7773C5__7S7773C6__A2__7S7773C2[8]),  8,14},
};
extern VTBL_ENTRY _ZTI7S7773C2[];
extern  VTBL_ENTRY _ZTV7S7773C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C2[];
static VTBL_ENTRY alt_thunk_names82[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7773C8D0Ev,_ZTv0_n32_N7S7773C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7773C8D0Ev,_ZThn164_N7S7773C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7773C8D1Ev,_ZTv0_n32_N7S7773C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7773C8D1Ev,_ZThn164_N7S7773C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C8D0Ev,_ZTv0_n44_N7S7773C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S7773C8D0Ev,_ZThn84_N7S7773C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C8D1Ev,_ZTv0_n44_N7S7773C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S7773C8D1Ev,_ZThn84_N7S7773C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C9D0Ev,_ZTv0_n44_N7S7773C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S7773C9D0Ev,_ZThn84_N7S7773C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C9D1Ev,_ZTv0_n44_N7S7773C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S7773C9D1Ev,_ZThn84_N7S7773C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7773C2D0Ev,_ZTv0_n32_N7S7773C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7773C2D0Ev,_ZThn164_N7S7773C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7773C2D1Ev,_ZTv0_n32_N7S7773C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7773C2D1Ev,_ZThn164_N7S7773C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C2D0Ev,_ZTv0_n44_N7S7773C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S7773C2D0Ev,_ZThn84_N7S7773C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C2D1Ev,_ZTv0_n44_N7S7773C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S7773C2D1Ev,_ZThn84_N7S7773C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7773C2 = {  "S7773C2", // class name
  bases_S7773C2, 19,
  &(vtc_S7773C2[0]), // expected_vtbl_contents
  &(vtt_S7773C2[0]), // expected_vtt_contents
  ABISELECT(400,208), // object size
  NSPAIRA(_ZTI7S7773C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7773C2),149, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7773C2),27, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names82,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7773C1  : S7773C2 , virtual S7773C10 {
  int s7773c1f0[7];
  ~S7773C1(); // tgen
  S7773C1(); // tgen
};
//SIG(1 S7773C1) C1{ BC2{ VBC3{ VBC4{ v1 v2 v3 v4} BC5{ BC4 v5 v6 Fc} BC6{ BC4 VBC5 vd v7 v8 v9 v10 v11 v12 Fi FC5[4] Fp} vd v13 FC7{} Fi Fs[3]} BC8{ VBC5 VBC3 BC9{ VBC4 BC6 VBC3 vd v14 v15 v16 v17 v18 v19 v20 Fi} VBC6 vd v21 v22 v23 v24 v25 v26 FC4} BC5 BC4 BC10{ BC4 v27 Fi} vd v28 v29 v30 v31 v32 FD} VBC10 Fi[7]}


S7773C1 ::~S7773C1(){ note_dtor("S7773C1", this);} // tgen
S7773C1 ::S7773C1(){ note_ctor("S7773C1", this);} // tgen

static void Test_S7773C1()
{
  extern Class_Descriptor cd_S7773C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(29,62)];
    init_test(&cd_S7773C1, buf);
    S7773C1 *dp, &lv = *(dp=new (buf) S7773C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,244), "sizeof(S7773C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7773C1)");
    /*is_ambiguous_... S7773C3::S7773C4_nt */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C3*), ABISELECT(312,180), "S7773C1");
    /*is_ambiguous_... S7773C9::S7773C4_nt */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C9*)(S7773C8*)(S7773C2*), ABISELECT(312,180), "S7773C1");
    /*is_ambiguous_... S7773C3::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C5*)(S7773C3*), ABISELECT(192,112), "S7773C1");
    /*is_ambiguous_... S7773C3::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C5*)(S7773C3*), ABISELECT(192,112), "S7773C1");
    /*is_ambiguous_... S7773C6::S7773C4_nt */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C6*)(S7773C3*), ABISELECT(208,120), "S7773C1");
    /*is_ambiguous_... S7773C1::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C5*), ABISELECT(320,184), "S7773C1");
    check_base_class_offset(lv, (S7773C5*)(S7773C6*)(S7773C3*), ABISELECT(320,184), "S7773C1");
    /*is_ambiguous_... S7773C8::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C5*)(S7773C8*)(S7773C2*), ABISELECT(320,184), "S7773C1");
    /*is_ambiguous_... S7773C9::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C5*)(S7773C6*)(S7773C9*)(S7773C8*)(S7773C2*), ABISELECT(320,184), "S7773C1");
    /*is_ambiguous_... S7773C1::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C5*)(S7773C6*), ABISELECT(320,184), "S7773C1");
    check_base_class_offset(lv, (S7773C6*)(S7773C3*), ABISELECT(208,120), "S7773C1");
    check_base_class_offset(lv, (S7773C3*)(S7773C2*), ABISELECT(192,112), "S7773C1");
    check_base_class_offset(lv, (S7773C3*)(S7773C8*)(S7773C2*), ABISELECT(192,112), "S7773C1");
    check_base_class_offset(lv, (S7773C3*)(S7773C9*)(S7773C8*)(S7773C2*), ABISELECT(192,112), "S7773C1");
    /*is_ambiguous_... S7773C9::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C6*)(S7773C9*)(S7773C8*)(S7773C2*), 0, "S7773C1");
    /*is_ambiguous_... S7773C9::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C6*)(S7773C9*)(S7773C8*)(S7773C2*), 0, "S7773C1");
    check_base_class_offset(lv, (S7773C9*)(S7773C8*)(S7773C2*), 0, "S7773C1");
    /*is_ambiguous_... S7773C1::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C6*), ABISELECT(336,192), "S7773C1");
    /*is_ambiguous_... S7773C8::S7773C6 */ AMB_check_base_class_offset(lv, (S7773C6*)(S7773C8*)(S7773C2*), ABISELECT(336,192), "S7773C1");
    check_base_class_offset(lv, (S7773C8*)(S7773C2*), 0, "S7773C1");
    /*is_ambiguous_... S7773C2::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C5*)(S7773C2*), ABISELECT(104,52), "S7773C1");
    /*is_ambiguous_... S7773C2::S7773C5 */ AMB_check_base_class_offset(lv, (S7773C5*)(S7773C2*), ABISELECT(104,52), "S7773C1");
    /*is_ambiguous_... S7773C2::S7773C4_nt */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C2*), ABISELECT(120,60), "S7773C1");
    check_base_class_offset(lv, (S7773C4_nt*)(S7773C10*)(S7773C2*), ABISELECT(128,64), "S7773C1");
    check_base_class_offset(lv, (S7773C10*)(S7773C2*), ABISELECT(128,64), "S7773C1");
    check_base_class_offset(lv, (S7773C2*), 0, "S7773C1");
    /*is_ambiguous_... S7773C1::S7773C10 */ AMB_check_base_class_offset(lv, (S7773C4_nt*)(S7773C10*), ABISELECT(424,236), "S7773C1");
    /*is_ambiguous_... S7773C1::S7773C10 */ AMB_check_base_class_offset(lv, (S7773C10*), ABISELECT(424,236), "S7773C1");
    check_field_offset(lv, s7773c1f0, ABISELECT(160,84), "S7773C1.s7773c1f0");
    test_class_info(&lv, &cd_S7773C1);
    dp->~S7773C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7773C1(Test_S7773C1, "S7773C1", ABISELECT(448,244));

#else // __cplusplus

extern void _ZN7S7773C1C1Ev();
extern void _ZN7S7773C1D1Ev();
Name_Map name_map_S7773C1[] = {
  NSPAIR(_ZN7S7773C1C1Ev),
  NSPAIR(_ZN7S7773C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C5;
extern VTBL_ENTRY _ZTI7S7773C5[];
extern  VTBL_ENTRY _ZTV7S7773C5[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C5;
extern VTBL_ENTRY _ZTI7S7773C5[];
extern  VTBL_ENTRY _ZTV7S7773C5[];
extern Class_Descriptor cd_S7773C6;
extern VTBL_ENTRY _ZTI7S7773C6[];
extern  VTBL_ENTRY _ZTV7S7773C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C6[];
extern Class_Descriptor cd_S7773C3;
extern VTBL_ENTRY _ZTI7S7773C3[];
extern  VTBL_ENTRY _ZTV7S7773C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C3[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C6;
extern VTBL_ENTRY _ZTI7S7773C6[];
extern  VTBL_ENTRY _ZTV7S7773C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C6[];
extern Class_Descriptor cd_S7773C9;
extern VTBL_ENTRY _ZTI7S7773C9[];
extern  VTBL_ENTRY _ZTV7S7773C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C9[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C6;
extern VTBL_ENTRY _ZTI7S7773C6[];
extern  VTBL_ENTRY _ZTV7S7773C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C6[];
extern Class_Descriptor cd_S7773C8;
extern VTBL_ENTRY _ZTI7S7773C8[];
extern  VTBL_ENTRY _ZTV7S7773C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C8[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C5;
extern VTBL_ENTRY _ZTI7S7773C5[];
extern  VTBL_ENTRY _ZTV7S7773C5[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C10;
extern VTBL_ENTRY _ZTI8S7773C10[];
extern  VTBL_ENTRY _ZTV8S7773C10[];
extern Class_Descriptor cd_S7773C2;
extern VTBL_ENTRY _ZTI7S7773C2[];
extern  VTBL_ENTRY _ZTV7S7773C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C2[];
extern Class_Descriptor cd_S7773C4_nt;
extern VTBL_ENTRY _ZTI10S7773C4_nt[];
extern  VTBL_ENTRY _ZTV10S7773C4_nt[];
extern Class_Descriptor cd_S7773C10;
extern VTBL_ENTRY _ZTI8S7773C10[];
extern  VTBL_ENTRY _ZTV8S7773C10[];
static Base_Class bases_S7773C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7773C4_nt,    ABISELECT(312,180), //bcp->offset
    100, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7773C4_nt,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7773C5,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7773C4_nt,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7773C4_nt,    ABISELECT(320,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7773C5,    ABISELECT(320,184), //bcp->offset
    110, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7773C6,    ABISELECT(208,120), //bcp->offset
    85, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7773C3,    ABISELECT(192,112), //bcp->offset
    58, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7773C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7773C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7773C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7773C4_nt,    ABISELECT(336,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7773C6,    ABISELECT(336,192), //bcp->offset
    124, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7773C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7773C4_nt,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7773C5,    ABISELECT(104,52), //bcp->offset
    37, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7773C4_nt,    ABISELECT(120,60), //bcp->offset
    45, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7773C4_nt,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7773C10,    ABISELECT(128,64), //bcp->offset
    51, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7773C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7773C4_nt,    ABISELECT(424,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7773C10,    ABISELECT(424,236), //bcp->offset
    150, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7773C1[];
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C1D1Ev();
extern void _ZN7S7773C1D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
extern void _ZN7S7773C93v14Ev();
extern void _ZN7S7773C93v15Ev();
extern void _ZN7S7773C93v16Ev();
extern void _ZN7S7773C93v17Ev();
extern void _ZN7S7773C93v18Ev();
extern void _ZN7S7773C93v19Ev();
extern void _ZN7S7773C93v20Ev();
extern void _ZN7S7773C83v21Ev();
extern void _ZN7S7773C83v22Ev();
extern void _ZN7S7773C83v23Ev();
extern void _ZN7S7773C83v24Ev();
extern void _ZN7S7773C83v25Ev();
extern void _ZN7S7773C83v26Ev();
extern void _ZN7S7773C23v28Ev();
extern void _ZN7S7773C23v29Ev();
extern void _ZN7S7773C23v30Ev();
extern void _ZN7S7773C23v31Ev();
extern void _ZN7S7773C23v32Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN8S7773C103v27Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void ABISELECT(_ZTv0_n88_N7S7773C1D1Ev,_ZTv0_n44_N7S7773C1D1Ev)();
extern void ABISELECT(_ZThn192_N7S7773C1D1Ev,_ZThn112_N7S7773C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7773C1D0Ev,_ZTv0_n44_N7S7773C1D0Ev)();
extern void ABISELECT(_ZThn192_N7S7773C1D0Ev,_ZThn112_N7S7773C1D0Ev)() __attribute__((weak));
extern void _ZN7S7773C33v13Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZTvn16_n88_N7S7773C1D1Ev,_ZTvn8_n44_N7S7773C1D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N7S7773C1D0Ev,_ZTvn8_n44_N7S7773C1D0Ev)();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7773C1D1Ev,_ZTv0_n32_N7S7773C1D1Ev)();
extern void ABISELECT(_ZThn336_N7S7773C1D1Ev,_ZThn192_N7S7773C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7773C1D0Ev,_ZTv0_n32_N7S7773C1D0Ev)();
extern void ABISELECT(_ZThn336_N7S7773C1D0Ev,_ZThn192_N7S7773C1D0Ev)() __attribute__((weak));
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN8S7773C103v27Ev();
static  VTBL_ENTRY vtc_S7773C1[] = {
  ABISELECT(424,236),
  ABISELECT(336,192),
  ABISELECT(192,112),
  ABISELECT(312,180),
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C1[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v14Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v15Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v26Ev,
  (VTBL_ENTRY)&_ZN7S7773C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7773C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7773C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7773C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7773C23v32Ev,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7773C1[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7773C1[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S7773C1[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN8S7773C103v27Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(-192,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(128,72),
  ABISELECT(120,68),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI7S7773C1[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C1D1Ev,_ZTv0_n44_N7S7773C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C1D0Ev,_ZTv0_n44_N7S7773C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C33v13Ev,
  ABISELECT(112,64),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI7S7773C1[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C1D1Ev,_ZTvn8_n44_N7S7773C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C1D0Ev,_ZTvn8_n44_N7S7773C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-180),
  (VTBL_ENTRY)&(_ZTI7S7773C1[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-184),
  (VTBL_ENTRY)&(_ZTI7S7773C1[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-192),
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-336,-192),
  (VTBL_ENTRY)&(_ZTI7S7773C1[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7773C1D1Ev,_ZTv0_n32_N7S7773C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7773C1D0Ev,_ZTv0_n32_N7S7773C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-424,-236),
  (VTBL_ENTRY)&(_ZTI7S7773C1[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN8S7773C103v27Ev,
};
extern VTBL_ENTRY _ZTV7S7773C1[];
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C2D1Ev();
extern void _ZN7S7773C2D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
extern void _ZN7S7773C93v14Ev();
extern void _ZN7S7773C93v15Ev();
extern void _ZN7S7773C93v16Ev();
extern void _ZN7S7773C93v17Ev();
extern void _ZN7S7773C93v18Ev();
extern void _ZN7S7773C93v19Ev();
extern void _ZN7S7773C93v20Ev();
extern void _ZN7S7773C83v21Ev();
extern void _ZN7S7773C83v22Ev();
extern void _ZN7S7773C83v23Ev();
extern void _ZN7S7773C83v24Ev();
extern void _ZN7S7773C83v25Ev();
extern void _ZN7S7773C83v26Ev();
extern void _ZN7S7773C23v28Ev();
extern void _ZN7S7773C23v29Ev();
extern void _ZN7S7773C23v30Ev();
extern void _ZN7S7773C23v31Ev();
extern void _ZN7S7773C23v32Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C2__7S7773C1[] = {
  ABISELECT(336,192),
  ABISELECT(192,112),
  ABISELECT(312,180),
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C2[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v14Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v15Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v26Ev,
  (VTBL_ENTRY)&_ZN7S7773C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7773C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7773C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7773C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7773C23v32Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C8D1Ev();
extern void _ZN7S7773C8D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
extern void _ZN7S7773C93v14Ev();
extern void _ZN7S7773C93v15Ev();
extern void _ZN7S7773C93v16Ev();
extern void _ZN7S7773C93v17Ev();
extern void _ZN7S7773C93v18Ev();
extern void _ZN7S7773C93v19Ev();
extern void _ZN7S7773C93v20Ev();
extern void _ZN7S7773C83v21Ev();
extern void _ZN7S7773C83v22Ev();
extern void _ZN7S7773C83v23Ev();
extern void _ZN7S7773C83v24Ev();
extern void _ZN7S7773C83v25Ev();
extern void _ZN7S7773C83v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C87S7773C2__7S7773C1[] = {
  ABISELECT(336,192),
  ABISELECT(192,112),
  ABISELECT(312,180),
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C8[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v14Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v15Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7773C83v26Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C9D1Ev();
extern void _ZN7S7773C9D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
extern void _ZN7S7773C93v14Ev();
extern void _ZN7S7773C93v15Ev();
extern void _ZN7S7773C93v16Ev();
extern void _ZN7S7773C93v17Ev();
extern void _ZN7S7773C93v18Ev();
extern void _ZN7S7773C93v19Ev();
extern void _ZN7S7773C93v20Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C97S7773C87S7773C2__7S7773C1[] = {
  ABISELECT(192,112),
  ABISELECT(312,180),
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v14Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v15Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7773C93v20Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C6D1Ev();
extern void _ZN7S7773C6D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C67S7773C97S7773C87S7773C2__A1__7S7773C1[] = {
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__7S7773C67S7773C97S7773C87S7773C2__A1__7S7773C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-184),
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
static  VTBL_ENTRY _tg__ZTV10S7773C4_nt__7S7773C97S7773C87S7773C2__7S7773C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-312,-180),
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__7S7773C97S7773C87S7773C2__7S7773C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-184),
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void ABISELECT(_ZTv0_n88_N7S7773C9D1Ev,_ZTv0_n44_N7S7773C9D1Ev)();
extern void ABISELECT(_ZThn192_N7S7773C9D1Ev,_ZThn112_N7S7773C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7773C9D0Ev,_ZTv0_n44_N7S7773C9D0Ev)();
extern void ABISELECT(_ZThn192_N7S7773C9D0Ev,_ZThn112_N7S7773C9D0Ev)() __attribute__((weak));
extern void _ZN7S7773C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C3__7S7773C97S7773C87S7773C2__7S7773C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(-192,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(128,72),
  ABISELECT(120,68),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C9D1Ev,_ZTv0_n44_N7S7773C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C9D0Ev,_ZTv0_n44_N7S7773C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C33v13Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZTvn16_n88_N7S7773C9D1Ev,_ZTvn8_n44_N7S7773C9D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N7S7773C9D0Ev,_ZTvn8_n44_N7S7773C9D0Ev)();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C67S7773C3__A1__7S7773C97S7773C87S7773C2__7S7773C1[] = {
  ABISELECT(112,64),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI7S7773C9[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C9D1Ev,_ZTvn8_n44_N7S7773C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C9D0Ev,_ZTvn8_n44_N7S7773C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__7S7773C87S7773C2__7S7773C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-184),
  (VTBL_ENTRY)&(_ZTI7S7773C8[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void ABISELECT(_ZTv0_n88_N7S7773C8D1Ev,_ZTv0_n44_N7S7773C8D1Ev)();
extern void ABISELECT(_ZThn192_N7S7773C8D1Ev,_ZThn112_N7S7773C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7773C8D0Ev,_ZTv0_n44_N7S7773C8D0Ev)();
extern void ABISELECT(_ZThn192_N7S7773C8D0Ev,_ZThn112_N7S7773C8D0Ev)() __attribute__((weak));
extern void _ZN7S7773C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C3__7S7773C87S7773C2__7S7773C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(-192,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(128,72),
  ABISELECT(120,68),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI7S7773C8[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C8D1Ev,_ZTv0_n44_N7S7773C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C8D0Ev,_ZTv0_n44_N7S7773C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C33v13Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
static  VTBL_ENTRY _tg__ZTV10S7773C4_nt__A1__7S7773C87S7773C2__7S7773C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-312,-180),
  (VTBL_ENTRY)&(_ZTI7S7773C8[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZTvn16_n88_N7S7773C8D1Ev,_ZTvn8_n44_N7S7773C8D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N7S7773C8D0Ev,_ZTvn8_n44_N7S7773C8D0Ev)();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C67S7773C3__7S7773C87S7773C2__7S7773C1[] = {
  ABISELECT(112,64),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI7S7773C8[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C8D1Ev,_ZTvn8_n44_N7S7773C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C8D0Ev,_ZTvn8_n44_N7S7773C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7773C8D1Ev,_ZTv0_n32_N7S7773C8D1Ev)();
extern void ABISELECT(_ZThn336_N7S7773C8D1Ev,_ZThn192_N7S7773C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7773C8D0Ev,_ZTv0_n32_N7S7773C8D0Ev)();
extern void ABISELECT(_ZThn336_N7S7773C8D0Ev,_ZThn192_N7S7773C8D0Ev)() __attribute__((weak));
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C6__A2__7S7773C87S7773C2__7S7773C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-192),
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-336,-192),
  (VTBL_ENTRY)&(_ZTI7S7773C8[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7773C8D1Ev,_ZTv0_n32_N7S7773C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7773C8D0Ev,_ZTv0_n32_N7S7773C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void ABISELECT(_ZTv0_n88_N7S7773C2D1Ev,_ZTv0_n44_N7S7773C2D1Ev)();
extern void ABISELECT(_ZThn192_N7S7773C2D1Ev,_ZThn112_N7S7773C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7773C2D0Ev,_ZTv0_n44_N7S7773C2D0Ev)();
extern void ABISELECT(_ZThn192_N7S7773C2D0Ev,_ZThn112_N7S7773C2D0Ev)() __attribute__((weak));
extern void _ZN7S7773C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C3__7S7773C2__7S7773C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(-192,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(128,72),
  ABISELECT(120,68),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI7S7773C2[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C2D1Ev,_ZTv0_n44_N7S7773C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7773C2D0Ev,_ZTv0_n44_N7S7773C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C33v13Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
static  VTBL_ENTRY _tg__ZTV10S7773C4_nt__7S7773C2__7S7773C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-312,-180),
  (VTBL_ENTRY)&(_ZTI7S7773C2[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZTvn16_n88_N7S7773C2D1Ev,_ZTvn8_n44_N7S7773C2D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N7S7773C2D0Ev,_ZTvn8_n44_N7S7773C2D0Ev)();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C67S7773C3__7S7773C2__7S7773C1[] = {
  ABISELECT(112,64),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI7S7773C2[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C2D1Ev,_ZTvn8_n44_N7S7773C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S7773C2D0Ev,_ZTvn8_n44_N7S7773C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__A1__7S7773C2__7S7773C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-184),
  (VTBL_ENTRY)&(_ZTI7S7773C2[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7773C2D1Ev,_ZTv0_n32_N7S7773C2D1Ev)();
extern void ABISELECT(_ZThn336_N7S7773C2D1Ev,_ZThn192_N7S7773C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7773C2D0Ev,_ZTv0_n32_N7S7773C2D0Ev)();
extern void ABISELECT(_ZThn336_N7S7773C2D0Ev,_ZThn192_N7S7773C2D0Ev)() __attribute__((weak));
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C6__A2__7S7773C2__7S7773C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-192),
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-336,-192),
  (VTBL_ENTRY)&(_ZTI7S7773C2[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7773C2D1Ev,_ZTv0_n32_N7S7773C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7773C2D0Ev,_ZTv0_n32_N7S7773C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
extern void _ZN7S7773C3D1Ev();
extern void _ZN7S7773C3D0Ev();
extern void _ZN7S7773C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C3__7S7773C1[] = {
  ABISELECT(128,72),
  ABISELECT(120,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7773C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C33v13Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C6D1Ev();
extern void _ZN7S7773C6D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C67S7773C3__7S7773C1[] = {
  ABISELECT(112,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__7S7773C67S7773C3__7S7773C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
static  VTBL_ENTRY _tg__ZTV10S7773C4_nt__7S7773C3__7S7773C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void ABISELECT(_ZThn16_N7S7773C3D1Ev,_ZThn8_N7S7773C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7773C3D0Ev,_ZThn8_N7S7773C3D0Ev)();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C6__7S7773C3__7S7773C1[] = {
  ABISELECT(112,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7773C3D1Ev,_ZThn8_N7S7773C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7773C3D0Ev,_ZThn8_N7S7773C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__A1__7S7773C3__7S7773C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI7S7773C3[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C6D1Ev();
extern void _ZN7S7773C6D0Ev();
extern void _ZN7S7773C62v7Ev();
extern void _ZN7S7773C62v8Ev();
extern void _ZN7S7773C62v9Ev();
extern void _ZN7S7773C63v10Ev();
extern void _ZN7S7773C63v11Ev();
extern void _ZN7S7773C63v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C6__A2__7S7773C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7773C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7773C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7773C63v12Ev,
};
extern void _ZN10S7773C4_nt2v1Ev();
extern void _ZN10S7773C4_nt2v2Ev();
extern void _ZN10S7773C4_nt2v3Ev();
extern void _ZN10S7773C4_nt2v4Ev();
extern void _ZN7S7773C52v5Ev();
extern void _ZN7S7773C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7773C5__7S7773C6__A2__7S7773C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7773C6[0]),
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7773C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7773C52v6Ev,
};
static  VTT_ENTRY vtt_S7773C1[] = {
  {&(_ZTV7S7773C1[7]),  7,162},
  {&(_tg__ZTV7S7773C2__7S7773C1[6]),  6,36},
  {&(_tg__ZTV7S7773C87S7773C2__7S7773C1[6]),  6,31},
  {&(_tg__ZTV7S7773C97S7773C87S7773C2__7S7773C1[5]),  5,24},
  {&(_tg__ZTV7S7773C67S7773C97S7773C87S7773C2__A1__7S7773C1[3]),  3,15},
  {&(_tg__ZTV7S7773C5__7S7773C67S7773C97S7773C87S7773C2__A1__7S7773C1[8]),  8,14},
  {&(_tg__ZTV10S7773C4_nt__7S7773C97S7773C87S7773C2__7S7773C1[6]),  6,10},
  {&(_tg__ZTV7S7773C5__7S7773C97S7773C87S7773C2__7S7773C1[8]),  8,14},
  {&(_tg__ZTV7S7773C3__7S7773C97S7773C87S7773C2__7S7773C1[18]),  18,27},
  {&(_tg__ZTV7S7773C67S7773C3__A1__7S7773C97S7773C87S7773C2__7S7773C1[3]),  3,15},
  {&(_tg__ZTV7S7773C5__7S7773C87S7773C2__7S7773C1[8]),  8,14},
  {&(_tg__ZTV7S7773C3__7S7773C87S7773C2__7S7773C1[18]),  18,27},
  {&(_tg__ZTV10S7773C4_nt__A1__7S7773C87S7773C2__7S7773C1[6]),  6,10},
  {&(_tg__ZTV7S7773C67S7773C3__7S7773C87S7773C2__7S7773C1[3]),  3,15},
  {&(_tg__ZTV7S7773C6__A2__7S7773C87S7773C2__7S7773C1[14]),  14,26},
  {&(_tg__ZTV7S7773C3__7S7773C2__7S7773C1[18]),  18,27},
  {&(_tg__ZTV10S7773C4_nt__7S7773C2__7S7773C1[6]),  6,10},
  {&(_tg__ZTV7S7773C67S7773C3__7S7773C2__7S7773C1[3]),  3,15},
  {&(_tg__ZTV7S7773C5__A1__7S7773C2__7S7773C1[8]),  8,14},
  {&(_tg__ZTV7S7773C6__A2__7S7773C2__7S7773C1[14]),  14,26},
  {&(_ZTV7S7773C1[76]),  76,162},
  {&(_ZTV7S7773C1[106]),  106,162},
  {&(_ZTV7S7773C1[88]),  88,162},
  {&(_ZTV7S7773C1[118]),  118,162},
  {&(_ZTV7S7773C1[138]),  138,162},
  {&(_ZTV7S7773C1[157]),  157,162},
  {&(_tg__ZTV7S7773C3__7S7773C1[4]),  4,13},
  {&(_tg__ZTV7S7773C67S7773C3__7S7773C1[3]),  3,15},
  {&(_tg__ZTV7S7773C5__7S7773C67S7773C3__7S7773C1[8]),  8,14},
  {&(_tg__ZTV10S7773C4_nt__7S7773C3__7S7773C1[6]),  6,10},
  {&(_tg__ZTV7S7773C6__7S7773C3__7S7773C1[3]),  3,15},
  {&(_tg__ZTV7S7773C5__A1__7S7773C3__7S7773C1[8]),  8,14},
  {&(_tg__ZTV7S7773C6__A2__7S7773C1[3]),  3,15},
  {&(_tg__ZTV7S7773C5__7S7773C6__A2__7S7773C1[8]),  8,14},
};
extern VTBL_ENTRY _ZTI7S7773C1[];
extern  VTBL_ENTRY _ZTV7S7773C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7773C1[];
static VTBL_ENTRY alt_thunk_names83[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7773C2D0Ev,_ZTv0_n32_N7S7773C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N7S7773C2D0Ev,_ZThn192_N7S7773C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7773C2D1Ev,_ZTv0_n32_N7S7773C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N7S7773C2D1Ev,_ZThn192_N7S7773C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C2D0Ev,_ZTv0_n44_N7S7773C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7773C2D0Ev,_ZThn112_N7S7773C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C2D1Ev,_ZTv0_n44_N7S7773C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7773C2D1Ev,_ZThn112_N7S7773C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7773C8D0Ev,_ZTv0_n32_N7S7773C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N7S7773C8D0Ev,_ZThn192_N7S7773C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7773C8D1Ev,_ZTv0_n32_N7S7773C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N7S7773C8D1Ev,_ZThn192_N7S7773C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C8D0Ev,_ZTv0_n44_N7S7773C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7773C8D0Ev,_ZThn112_N7S7773C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C8D1Ev,_ZTv0_n44_N7S7773C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7773C8D1Ev,_ZThn112_N7S7773C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C9D0Ev,_ZTv0_n44_N7S7773C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7773C9D0Ev,_ZThn112_N7S7773C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C9D1Ev,_ZTv0_n44_N7S7773C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7773C9D1Ev,_ZThn112_N7S7773C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7773C1D0Ev,_ZTv0_n32_N7S7773C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N7S7773C1D0Ev,_ZThn192_N7S7773C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7773C1D1Ev,_ZTv0_n32_N7S7773C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N7S7773C1D1Ev,_ZThn192_N7S7773C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C1D0Ev,_ZTv0_n44_N7S7773C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7773C1D0Ev,_ZThn112_N7S7773C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7773C1D1Ev,_ZTv0_n44_N7S7773C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7773C1D1Ev,_ZThn112_N7S7773C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7773C1 = {  "S7773C1", // class name
  bases_S7773C1, 22,
  &(vtc_S7773C1[0]), // expected_vtbl_contents
  &(vtt_S7773C1[0]), // expected_vtt_contents
  ABISELECT(448,244), // object size
  NSPAIRA(_ZTI7S7773C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7773C1),162, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7773C1),34, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names83,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1850C4_nt  {
  void  mf1850c4(); // _ZN10S1850C4_nt8mf1850c4Ev
  virtual  ~S1850C4_nt(); // _ZN10S1850C4_ntD1Ev
  S1850C4_nt(); // tgen
};
//SIG(-1 S1850C4_nt) C1{ vd m}


void  S1850C4_nt ::mf1850c4(){}
 S1850C4_nt ::~S1850C4_nt(){ note_dtor("S1850C4_nt", this);}
S1850C4_nt ::S1850C4_nt(){ note_ctor("S1850C4_nt", this);} // tgen

//skip512 S1850C4_nt

#else // __cplusplus

extern void _ZN10S1850C4_ntC1Ev();
extern void _ZN10S1850C4_ntD1Ev();
Name_Map name_map_S1850C4_nt[] = {
  NSPAIR(_ZN10S1850C4_ntC1Ev),
  NSPAIR(_ZN10S1850C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern void _ZN10S1850C4_ntD1Ev();
extern void _ZN10S1850C4_ntD0Ev();
static  VTBL_ENTRY vtc_S1850C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1850C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S1850C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1850C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
VTBL_ENTRY *P__ZTI10S1850C4_nt = _ZTI10S1850C4_nt; 
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
Class_Descriptor cd_S1850C4_nt = {  "S1850C4_nt", // class name
  0,0,//no base classes
  &(vtc_S1850C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S1850C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1850C4_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1850C3_nt  : S1850C4_nt {
  void *s1850c3f0[2];
  virtual  ~S1850C3_nt(); // _ZN10S1850C3_ntD1Ev
  virtual void  v10(); // _ZN10S1850C3_nt3v10Ev
  virtual void  v11(); // _ZN10S1850C3_nt3v11Ev
  virtual void  v12(); // _ZN10S1850C3_nt3v12Ev
  virtual void  v13(); // _ZN10S1850C3_nt3v13Ev
  virtual void  v14(); // _ZN10S1850C3_nt3v14Ev
  virtual void  v15(); // _ZN10S1850C3_nt3v15Ev
  virtual void  v16(); // _ZN10S1850C3_nt3v16Ev
  S1850C3_nt(); // tgen
};
//SIG(-1 S1850C3_nt) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S1850C3_nt ::~S1850C3_nt(){ note_dtor("S1850C3_nt", this);}
void  S1850C3_nt ::v10(){vfunc_called(this, "_ZN10S1850C3_nt3v10Ev");}
void  S1850C3_nt ::v11(){vfunc_called(this, "_ZN10S1850C3_nt3v11Ev");}
void  S1850C3_nt ::v12(){vfunc_called(this, "_ZN10S1850C3_nt3v12Ev");}
void  S1850C3_nt ::v13(){vfunc_called(this, "_ZN10S1850C3_nt3v13Ev");}
void  S1850C3_nt ::v14(){vfunc_called(this, "_ZN10S1850C3_nt3v14Ev");}
void  S1850C3_nt ::v15(){vfunc_called(this, "_ZN10S1850C3_nt3v15Ev");}
void  S1850C3_nt ::v16(){vfunc_called(this, "_ZN10S1850C3_nt3v16Ev");}
S1850C3_nt ::S1850C3_nt(){ note_ctor("S1850C3_nt", this);} // tgen

//skip512 S1850C3_nt

#else // __cplusplus

extern void _ZN10S1850C3_ntC1Ev();
extern void _ZN10S1850C3_ntD1Ev();
Name_Map name_map_S1850C3_nt[] = {
  NSPAIR(_ZN10S1850C3_ntC1Ev),
  NSPAIR(_ZN10S1850C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S1850C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1850C3_nt[];
extern void _ZN10S1850C3_ntD1Ev();
extern void _ZN10S1850C3_ntD0Ev();
extern void _ZN10S1850C3_nt3v10Ev();
extern void _ZN10S1850C3_nt3v11Ev();
extern void _ZN10S1850C3_nt3v12Ev();
extern void _ZN10S1850C3_nt3v13Ev();
extern void _ZN10S1850C3_nt3v14Ev();
extern void _ZN10S1850C3_nt3v15Ev();
extern void _ZN10S1850C3_nt3v16Ev();
static  VTBL_ENTRY vtc_S1850C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1850C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1850C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v16Ev,
};
extern VTBL_ENTRY _ZTI10S1850C3_nt[];
VTBL_ENTRY *P__ZTI10S1850C3_nt = _ZTI10S1850C3_nt; 
extern  VTBL_ENTRY _ZTV10S1850C3_nt[];
Class_Descriptor cd_S1850C3_nt = {  "S1850C3_nt", // class name
  bases_S1850C3_nt, 1,
  &(vtc_S1850C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S1850C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1850C3_nt),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1850C6_nt  {
  virtual  ~S1850C6_nt(); // _ZN10S1850C6_ntD1Ev
  virtual void  v31(); // _ZN10S1850C6_nt3v31Ev
  S1850C6_nt(); // tgen
};
//SIG(-1 S1850C6_nt) C1{ vd v1}


 S1850C6_nt ::~S1850C6_nt(){ note_dtor("S1850C6_nt", this);}
void  S1850C6_nt ::v31(){vfunc_called(this, "_ZN10S1850C6_nt3v31Ev");}
S1850C6_nt ::S1850C6_nt(){ note_ctor("S1850C6_nt", this);} // tgen

//skip512 S1850C6_nt

#else // __cplusplus

extern void _ZN10S1850C6_ntC1Ev();
extern void _ZN10S1850C6_ntD1Ev();
Name_Map name_map_S1850C6_nt[] = {
  NSPAIR(_ZN10S1850C6_ntC1Ev),
  NSPAIR(_ZN10S1850C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1850C6_nt[];
extern void _ZN10S1850C6_ntD1Ev();
extern void _ZN10S1850C6_ntD0Ev();
extern void _ZN10S1850C6_nt3v31Ev();
static  VTBL_ENTRY vtc_S1850C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1850C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S1850C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1850C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1850C6_nt3v31Ev,
};
extern VTBL_ENTRY _ZTI10S1850C6_nt[];
VTBL_ENTRY *P__ZTI10S1850C6_nt = _ZTI10S1850C6_nt; 
extern  VTBL_ENTRY _ZTV10S1850C6_nt[];
Class_Descriptor cd_S1850C6_nt = {  "S1850C6_nt", // class name
  0,0,//no base classes
  &(vtc_S1850C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S1850C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1850C6_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1850C5_nt  : S1850C6_nt {
  void *s1850c5f0;
  virtual void  v30(); // _ZN10S1850C5_nt3v30Ev
  ~S1850C5_nt(); // tgen
  S1850C5_nt(); // tgen
};
//SIG(-1 S1850C5_nt) C1{ BC2{ vd v2} v1 Fp}


void  S1850C5_nt ::v30(){vfunc_called(this, "_ZN10S1850C5_nt3v30Ev");}
S1850C5_nt ::~S1850C5_nt(){ note_dtor("S1850C5_nt", this);} // tgen
S1850C5_nt ::S1850C5_nt(){ note_ctor("S1850C5_nt", this);} // tgen

//skip512 S1850C5_nt

#else // __cplusplus

extern void _ZN10S1850C5_ntC1Ev();
extern void _ZN10S1850C5_ntD1Ev();
Name_Map name_map_S1850C5_nt[] = {
  NSPAIR(_ZN10S1850C5_ntC1Ev),
  NSPAIR(_ZN10S1850C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C6_nt;
extern VTBL_ENTRY _ZTI10S1850C6_nt[];
extern  VTBL_ENTRY _ZTV10S1850C6_nt[];
static Base_Class bases_S1850C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1850C5_nt[];
extern void _ZN10S1850C5_ntD1Ev();
extern void _ZN10S1850C5_ntD0Ev();
extern void _ZN10S1850C6_nt3v31Ev();
extern void _ZN10S1850C5_nt3v30Ev();
static  VTBL_ENTRY vtc_S1850C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1850C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S1850C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1850C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1850C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1850C5_nt3v30Ev,
};
extern VTBL_ENTRY _ZTI10S1850C5_nt[];
VTBL_ENTRY *P__ZTI10S1850C5_nt = _ZTI10S1850C5_nt; 
extern  VTBL_ENTRY _ZTV10S1850C5_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1850C10_nt  {
  void *s1850c10f0;
  void  mf1850c10(); // _ZN11S1850C10_nt9mf1850c10Ev
};
//SIG(-1 S1850C10_nt) C1{ m Fp}


void  S1850C10_nt ::mf1850c10(){}

//skip512 S1850C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1850C2  : S1850C3_nt {
  int s1850c2f0[2];
  ::S1850C5_nt s1850c2f1;
  ::S1850C5_nt s1850c2f2;
  ::S3593C21_nt s1850c2f3;
  ::S1850C10_nt s1850c2f4;
  char s1850c2f5;
  ::S16113C2_nt s1850c2f6;
  virtual  ~S1850C2(); // _ZN7S1850C2D1Ev
  virtual void  v17(); // _ZN7S1850C23v17Ev
  virtual void  v18(); // _ZN7S1850C23v18Ev
  virtual void  v19(); // _ZN7S1850C23v19Ev
  virtual void  v20(); // _ZN7S1850C23v20Ev
  virtual void  v21(); // _ZN7S1850C23v21Ev
  virtual void  v22(); // _ZN7S1850C23v22Ev
  virtual void  v23(); // _ZN7S1850C23v23Ev
  virtual void  v24(); // _ZN7S1850C23v24Ev
  virtual void  v25(); // _ZN7S1850C23v25Ev
  virtual void  v26(); // _ZN7S1850C23v26Ev
  S1850C2(); // tgen
};
//SIG(-1 S1850C2) C1{ BC2{ BC3{ vd m} vd v11 v12 v13 v14 v15 v16 v17 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] FC4{ BC5{ vd v19} v18 Fp} FC4 FC6{ m Fp} FC7{ m Fp} Fc FC8{ m Fi}}


 S1850C2 ::~S1850C2(){ note_dtor("S1850C2", this);}
void  S1850C2 ::v17(){vfunc_called(this, "_ZN7S1850C23v17Ev");}
void  S1850C2 ::v18(){vfunc_called(this, "_ZN7S1850C23v18Ev");}
void  S1850C2 ::v19(){vfunc_called(this, "_ZN7S1850C23v19Ev");}
void  S1850C2 ::v20(){vfunc_called(this, "_ZN7S1850C23v20Ev");}
void  S1850C2 ::v21(){vfunc_called(this, "_ZN7S1850C23v21Ev");}
void  S1850C2 ::v22(){vfunc_called(this, "_ZN7S1850C23v22Ev");}
void  S1850C2 ::v23(){vfunc_called(this, "_ZN7S1850C23v23Ev");}
void  S1850C2 ::v24(){vfunc_called(this, "_ZN7S1850C23v24Ev");}
void  S1850C2 ::v25(){vfunc_called(this, "_ZN7S1850C23v25Ev");}
void  S1850C2 ::v26(){vfunc_called(this, "_ZN7S1850C23v26Ev");}
S1850C2 ::S1850C2(){ note_ctor("S1850C2", this);} // tgen

static void Test_S1850C2()
{
  extern Class_Descriptor cd_S1850C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S1850C2, buf);
    S1850C2 *dp, &lv = *(dp=new (buf) S1850C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S1850C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1850C2)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1850C3_nt*), 0, "S1850C2");
    check_base_class_offset(lv, (S1850C3_nt*), 0, "S1850C2");
    check_field_offset(lv, s1850c2f0, ABISELECT(24,12), "S1850C2.s1850c2f0");
    check_field_offset(lv, s1850c2f1, ABISELECT(32,20), "S1850C2.s1850c2f1");
    check_field_offset(lv, s1850c2f2, ABISELECT(48,28), "S1850C2.s1850c2f2");
    check_field_offset(lv, s1850c2f3, ABISELECT(64,36), "S1850C2.s1850c2f3");
    check_field_offset(lv, s1850c2f4, ABISELECT(72,40), "S1850C2.s1850c2f4");
    check_field_offset(lv, s1850c2f5, ABISELECT(80,44), "S1850C2.s1850c2f5");
    check_field_offset(lv, s1850c2f6, ABISELECT(84,48), "S1850C2.s1850c2f6");
    test_class_info(&lv, &cd_S1850C2);
    dp->~S1850C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1850C2(Test_S1850C2, "S1850C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S1850C2C1Ev();
extern void _ZN7S1850C2D1Ev();
Name_Map name_map_S1850C2[] = {
  NSPAIR(_ZN7S1850C2C1Ev),
  NSPAIR(_ZN7S1850C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1850C3_nt;
extern VTBL_ENTRY _ZTI10S1850C3_nt[];
extern  VTBL_ENTRY _ZTV10S1850C3_nt[];
static Base_Class bases_S1850C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1850C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1850C2[];
extern void _ZN7S1850C2D1Ev();
extern void _ZN7S1850C2D0Ev();
extern void _ZN10S1850C3_nt3v10Ev();
extern void _ZN10S1850C3_nt3v11Ev();
extern void _ZN10S1850C3_nt3v12Ev();
extern void _ZN10S1850C3_nt3v13Ev();
extern void _ZN10S1850C3_nt3v14Ev();
extern void _ZN10S1850C3_nt3v15Ev();
extern void _ZN10S1850C3_nt3v16Ev();
extern void _ZN7S1850C23v17Ev();
extern void _ZN7S1850C23v18Ev();
extern void _ZN7S1850C23v19Ev();
extern void _ZN7S1850C23v20Ev();
extern void _ZN7S1850C23v21Ev();
extern void _ZN7S1850C23v22Ev();
extern void _ZN7S1850C23v23Ev();
extern void _ZN7S1850C23v24Ev();
extern void _ZN7S1850C23v25Ev();
extern void _ZN7S1850C23v26Ev();
static  VTBL_ENTRY vtc_S1850C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1850C2[0]),
  (VTBL_ENTRY)&_ZN7S1850C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1850C2D0Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v26Ev,
};
extern VTBL_ENTRY _ZTI7S1850C2[];
extern  VTBL_ENTRY _ZTV7S1850C2[];
Class_Descriptor cd_S1850C2 = {  "S1850C2", // class name
  bases_S1850C2, 2,
  &(vtc_S1850C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S1850C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1850C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1850C12_nt  {
  virtual  ~S1850C12_nt(); // _ZN11S1850C12_ntD1Ev
  virtual void  v27(); // _ZN11S1850C12_nt3v27Ev
  virtual void  v28(); // _ZN11S1850C12_nt3v28Ev
  virtual void  v29(); // _ZN11S1850C12_nt3v29Ev
  S1850C12_nt(); // tgen
};
//SIG(-1 S1850C12_nt) C1{ vd v1 v2 v3}


 S1850C12_nt ::~S1850C12_nt(){ note_dtor("S1850C12_nt", this);}
void  S1850C12_nt ::v27(){vfunc_called(this, "_ZN11S1850C12_nt3v27Ev");}
void  S1850C12_nt ::v28(){vfunc_called(this, "_ZN11S1850C12_nt3v28Ev");}
void  S1850C12_nt ::v29(){vfunc_called(this, "_ZN11S1850C12_nt3v29Ev");}
S1850C12_nt ::S1850C12_nt(){ note_ctor("S1850C12_nt", this);} // tgen

//skip512 S1850C12_nt

#else // __cplusplus

extern void _ZN11S1850C12_ntC1Ev();
extern void _ZN11S1850C12_ntD1Ev();
Name_Map name_map_S1850C12_nt[] = {
  NSPAIR(_ZN11S1850C12_ntC1Ev),
  NSPAIR(_ZN11S1850C12_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S1850C12_nt[];
extern void _ZN11S1850C12_ntD1Ev();
extern void _ZN11S1850C12_ntD0Ev();
extern void _ZN11S1850C12_nt3v27Ev();
extern void _ZN11S1850C12_nt3v28Ev();
extern void _ZN11S1850C12_nt3v29Ev();
static  VTBL_ENTRY vtc_S1850C12_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S1850C12_nt[0]),
  (VTBL_ENTRY)&_ZN11S1850C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1850C12_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S1850C12_nt3v27Ev,
  (VTBL_ENTRY)&_ZN11S1850C12_nt3v28Ev,
  (VTBL_ENTRY)&_ZN11S1850C12_nt3v29Ev,
};
extern VTBL_ENTRY _ZTI11S1850C12_nt[];
VTBL_ENTRY *P__ZTI11S1850C12_nt = _ZTI11S1850C12_nt; 
extern  VTBL_ENTRY _ZTV11S1850C12_nt[];
Class_Descriptor cd_S1850C12_nt = {  "S1850C12_nt", // class name
  0,0,//no base classes
  &(vtc_S1850C12_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S1850C12_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S1850C12_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1850C13  : S1850C4_nt {
  void *s1850c13f0;
  int s1850c13f1[2];
  void *s1850c13f2[4];
  int s1850c13f3;
  virtual  ~S1850C13(); // _ZN8S1850C13D1Ev
  S1850C13(); // tgen
};
//SIG(-1 S1850C13) C1{ BC2{ vd m} vd Fp Fi[2] Fp[4] Fi}


 S1850C13 ::~S1850C13(){ note_dtor("S1850C13", this);}
S1850C13 ::S1850C13(){ note_ctor("S1850C13", this);} // tgen

static void Test_S1850C13()
{
  extern Class_Descriptor cd_S1850C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S1850C13, buf);
    S1850C13 *dp, &lv = *(dp=new (buf) S1850C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S1850C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1850C13)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S1850C13");
    check_field_offset(lv, s1850c13f0, ABISELECT(8,4), "S1850C13.s1850c13f0");
    check_field_offset(lv, s1850c13f1, ABISELECT(16,8), "S1850C13.s1850c13f1");
    check_field_offset(lv, s1850c13f2, ABISELECT(24,16), "S1850C13.s1850c13f2");
    check_field_offset(lv, s1850c13f3, ABISELECT(56,32), "S1850C13.s1850c13f3");
    test_class_info(&lv, &cd_S1850C13);
    dp->~S1850C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1850C13(Test_S1850C13, "S1850C13", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S1850C13C1Ev();
extern void _ZN8S1850C13D1Ev();
Name_Map name_map_S1850C13[] = {
  NSPAIR(_ZN8S1850C13C1Ev),
  NSPAIR(_ZN8S1850C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S1850C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S1850C13[];
extern void _ZN8S1850C13D1Ev();
extern void _ZN8S1850C13D0Ev();
static  VTBL_ENTRY vtc_S1850C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1850C13[0]),
  (VTBL_ENTRY)&_ZN8S1850C13D1Ev,
  (VTBL_ENTRY)&_ZN8S1850C13D0Ev,
};
extern VTBL_ENTRY _ZTI8S1850C13[];
extern  VTBL_ENTRY _ZTV8S1850C13[];
Class_Descriptor cd_S1850C13 = {  "S1850C13", // class name
  bases_S1850C13, 1,
  &(vtc_S1850C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S1850C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S1850C13),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1850C1  : S1850C2 , S1850C12_nt {
  void *s1850c1f0[8];
  ::S1850C13 s1850c1f1;
  char s1850c1f2[2];
  virtual  ~S1850C1(); // _ZN7S1850C1D1Ev
  virtual void  v1(); // _ZN7S1850C12v1Ev
  virtual void  v2(); // _ZN7S1850C12v2Ev
  virtual void  v3(); // _ZN7S1850C12v3Ev
  virtual void  v4(); // _ZN7S1850C12v4Ev
  virtual void  v5(); // _ZN7S1850C12v5Ev
  virtual void  v6(); // _ZN7S1850C12v6Ev
  virtual void  v7(); // _ZN7S1850C12v7Ev
  virtual void  v8(); // _ZN7S1850C12v8Ev
  virtual void  v9(); // _ZN7S1850C12v9Ev
  S1850C1(); // tgen
};
//SIG(1 S1850C1) C1{ BC2{ BC3{ BC4{ vd m} vd v10 v11 v12 v13 v14 v15 v16 Fp[2]} vd v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fi[2] FC5{ BC6{ vd v31} v30 Fp} FC5 FC7{ m Fp} FC8{ m Fp} Fc FC9{ m Fi}} BC10{ vd v27 v28 v29} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[8] FC11{ BC4 vd Fp Fi[2] Fp[4] Fi} Fc[2]}


 S1850C1 ::~S1850C1(){ note_dtor("S1850C1", this);}
void  S1850C1 ::v1(){vfunc_called(this, "_ZN7S1850C12v1Ev");}
void  S1850C1 ::v2(){vfunc_called(this, "_ZN7S1850C12v2Ev");}
void  S1850C1 ::v3(){vfunc_called(this, "_ZN7S1850C12v3Ev");}
void  S1850C1 ::v4(){vfunc_called(this, "_ZN7S1850C12v4Ev");}
void  S1850C1 ::v5(){vfunc_called(this, "_ZN7S1850C12v5Ev");}
void  S1850C1 ::v6(){vfunc_called(this, "_ZN7S1850C12v6Ev");}
void  S1850C1 ::v7(){vfunc_called(this, "_ZN7S1850C12v7Ev");}
void  S1850C1 ::v8(){vfunc_called(this, "_ZN7S1850C12v8Ev");}
void  S1850C1 ::v9(){vfunc_called(this, "_ZN7S1850C12v9Ev");}
S1850C1 ::S1850C1(){ note_ctor("S1850C1", this);} // tgen

static void Test_S1850C1()
{
  extern Class_Descriptor cd_S1850C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,33)];
    init_test(&cd_S1850C1, buf);
    S1850C1 *dp, &lv = *(dp=new (buf) S1850C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,128), "sizeof(S1850C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1850C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1850C3_nt*)(S1850C2*), 0, "S1850C1");
    check_base_class_offset(lv, (S1850C3_nt*)(S1850C2*), 0, "S1850C1");
    check_base_class_offset(lv, (S1850C2*), 0, "S1850C1");
    check_base_class_offset(lv, (S1850C12_nt*), ABISELECT(88,52), "S1850C1");
    check_field_offset(lv, s1850c1f0, ABISELECT(96,56), "S1850C1.s1850c1f0");
    check_field_offset(lv, s1850c1f1, ABISELECT(160,88), "S1850C1.s1850c1f1");
    check_field_offset(lv, s1850c1f2, ABISELECT(224,124), "S1850C1.s1850c1f2");
    test_class_info(&lv, &cd_S1850C1);
    dp->~S1850C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1850C1(Test_S1850C1, "S1850C1", ABISELECT(232,128));

#else // __cplusplus

extern void _ZN7S1850C1C1Ev();
extern void _ZN7S1850C1D1Ev();
Name_Map name_map_S1850C1[] = {
  NSPAIR(_ZN7S1850C1C1Ev),
  NSPAIR(_ZN7S1850C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1850C3_nt;
extern VTBL_ENTRY _ZTI10S1850C3_nt[];
extern  VTBL_ENTRY _ZTV10S1850C3_nt[];
extern Class_Descriptor cd_S1850C2;
extern VTBL_ENTRY _ZTI7S1850C2[];
extern  VTBL_ENTRY _ZTV7S1850C2[];
extern Class_Descriptor cd_S1850C12_nt;
extern VTBL_ENTRY _ZTI11S1850C12_nt[];
extern  VTBL_ENTRY _ZTV11S1850C12_nt[];
static Base_Class bases_S1850C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1850C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1850C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1850C12_nt,    ABISELECT(88,52), //bcp->offset
    30, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1850C1[];
extern void _ZN7S1850C1D1Ev();
extern void _ZN7S1850C1D0Ev();
extern void _ZN10S1850C3_nt3v10Ev();
extern void _ZN10S1850C3_nt3v11Ev();
extern void _ZN10S1850C3_nt3v12Ev();
extern void _ZN10S1850C3_nt3v13Ev();
extern void _ZN10S1850C3_nt3v14Ev();
extern void _ZN10S1850C3_nt3v15Ev();
extern void _ZN10S1850C3_nt3v16Ev();
extern void _ZN7S1850C23v17Ev();
extern void _ZN7S1850C23v18Ev();
extern void _ZN7S1850C23v19Ev();
extern void _ZN7S1850C23v20Ev();
extern void _ZN7S1850C23v21Ev();
extern void _ZN7S1850C23v22Ev();
extern void _ZN7S1850C23v23Ev();
extern void _ZN7S1850C23v24Ev();
extern void _ZN7S1850C23v25Ev();
extern void _ZN7S1850C23v26Ev();
extern void _ZN7S1850C12v1Ev();
extern void _ZN7S1850C12v2Ev();
extern void _ZN7S1850C12v3Ev();
extern void _ZN7S1850C12v4Ev();
extern void _ZN7S1850C12v5Ev();
extern void _ZN7S1850C12v6Ev();
extern void _ZN7S1850C12v7Ev();
extern void _ZN7S1850C12v8Ev();
extern void _ZN7S1850C12v9Ev();
extern void ABISELECT(_ZThn88_N7S1850C1D1Ev,_ZThn52_N7S1850C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S1850C1D0Ev,_ZThn52_N7S1850C1D0Ev)();
extern void _ZN11S1850C12_nt3v27Ev();
extern void _ZN11S1850C12_nt3v28Ev();
extern void _ZN11S1850C12_nt3v29Ev();
static  VTBL_ENTRY vtc_S1850C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1850C1[0]),
  (VTBL_ENTRY)&_ZN7S1850C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1850C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1850C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1850C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1850C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1850C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1850C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1850C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1850C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1850C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1850C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1850C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1850C12v9Ev,
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI7S1850C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S1850C1D1Ev,_ZThn52_N7S1850C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S1850C1D0Ev,_ZThn52_N7S1850C1D0Ev),
  (VTBL_ENTRY)&_ZN11S1850C12_nt3v27Ev,
  (VTBL_ENTRY)&_ZN11S1850C12_nt3v28Ev,
  (VTBL_ENTRY)&_ZN11S1850C12_nt3v29Ev,
};
extern VTBL_ENTRY _ZTI7S1850C1[];
extern  VTBL_ENTRY _ZTV7S1850C1[];
Class_Descriptor cd_S1850C1 = {  "S1850C1", // class name
  bases_S1850C1, 4,
  &(vtc_S1850C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,128), // object size
  NSPAIRA(_ZTI7S1850C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1850C1),37, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1865C3  : S1850C4_nt {
  void *s1865c3f0[2];
  virtual  ~S1865C3(); // _ZN7S1865C3D1Ev
  virtual void  v8(); // _ZN7S1865C32v8Ev
  virtual void  v9(); // _ZN7S1865C32v9Ev
  virtual void  v10(); // _ZN7S1865C33v10Ev
  virtual void  v11(); // _ZN7S1865C33v11Ev
  virtual void  v12(); // _ZN7S1865C33v12Ev
  virtual void  v13(); // _ZN7S1865C33v13Ev
  virtual void  v14(); // _ZN7S1865C33v14Ev
  S1865C3(); // tgen
};
//SIG(-1 S1865C3) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S1865C3 ::~S1865C3(){ note_dtor("S1865C3", this);}
void  S1865C3 ::v8(){vfunc_called(this, "_ZN7S1865C32v8Ev");}
void  S1865C3 ::v9(){vfunc_called(this, "_ZN7S1865C32v9Ev");}
void  S1865C3 ::v10(){vfunc_called(this, "_ZN7S1865C33v10Ev");}
void  S1865C3 ::v11(){vfunc_called(this, "_ZN7S1865C33v11Ev");}
void  S1865C3 ::v12(){vfunc_called(this, "_ZN7S1865C33v12Ev");}
void  S1865C3 ::v13(){vfunc_called(this, "_ZN7S1865C33v13Ev");}
void  S1865C3 ::v14(){vfunc_called(this, "_ZN7S1865C33v14Ev");}
S1865C3 ::S1865C3(){ note_ctor("S1865C3", this);} // tgen

static void Test_S1865C3()
{
  extern Class_Descriptor cd_S1865C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1865C3, buf);
    S1865C3 *dp, &lv = *(dp=new (buf) S1865C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1865C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1865C3)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S1865C3");
    check_field_offset(lv, s1865c3f0, ABISELECT(8,4), "S1865C3.s1865c3f0");
    test_class_info(&lv, &cd_S1865C3);
    dp->~S1865C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1865C3(Test_S1865C3, "S1865C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1865C3C1Ev();
extern void _ZN7S1865C3D1Ev();
Name_Map name_map_S1865C3[] = {
  NSPAIR(_ZN7S1865C3C1Ev),
  NSPAIR(_ZN7S1865C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S1865C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1865C3[];
extern void _ZN7S1865C3D1Ev();
extern void _ZN7S1865C3D0Ev();
extern void _ZN7S1865C32v8Ev();
extern void _ZN7S1865C32v9Ev();
extern void _ZN7S1865C33v10Ev();
extern void _ZN7S1865C33v11Ev();
extern void _ZN7S1865C33v12Ev();
extern void _ZN7S1865C33v13Ev();
extern void _ZN7S1865C33v14Ev();
static  VTBL_ENTRY vtc_S1865C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1865C3[0]),
  (VTBL_ENTRY)&_ZN7S1865C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1865C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1865C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1865C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1865C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1865C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1865C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1865C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1865C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S1865C3[];
extern  VTBL_ENTRY _ZTV7S1865C3[];
Class_Descriptor cd_S1865C3 = {  "S1865C3", // class name
  bases_S1865C3, 1,
  &(vtc_S1865C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1865C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1865C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1865C8  {
  virtual  ~S1865C8(); // _ZN7S1865C8D1Ev
  virtual void  v31(); // _ZN7S1865C83v31Ev
  S1865C8(); // tgen
};
//SIG(-1 S1865C8) C1{ vd v1}


 S1865C8 ::~S1865C8(){ note_dtor("S1865C8", this);}
void  S1865C8 ::v31(){vfunc_called(this, "_ZN7S1865C83v31Ev");}
S1865C8 ::S1865C8(){ note_ctor("S1865C8", this);} // tgen

static void Test_S1865C8()
{
  extern Class_Descriptor cd_S1865C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1865C8, buf);
    S1865C8 *dp, &lv = *(dp=new (buf) S1865C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1865C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1865C8)");
    test_class_info(&lv, &cd_S1865C8);
    dp->~S1865C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1865C8(Test_S1865C8, "S1865C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1865C8C1Ev();
extern void _ZN7S1865C8D1Ev();
Name_Map name_map_S1865C8[] = {
  NSPAIR(_ZN7S1865C8C1Ev),
  NSPAIR(_ZN7S1865C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1865C8[];
extern void _ZN7S1865C8D1Ev();
extern void _ZN7S1865C8D0Ev();
extern void _ZN7S1865C83v31Ev();
static  VTBL_ENTRY vtc_S1865C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1865C8[0]),
  (VTBL_ENTRY)&_ZN7S1865C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1865C8D0Ev,
  (VTBL_ENTRY)&_ZN7S1865C83v31Ev,
};
extern VTBL_ENTRY _ZTI7S1865C8[];
extern  VTBL_ENTRY _ZTV7S1865C8[];
Class_Descriptor cd_S1865C8 = {  "S1865C8", // class name
  0,0,//no base classes
  &(vtc_S1865C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1865C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1865C8),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1865C7  : S1865C8 {
  void *s1865c7f0;
  virtual void  v30(); // _ZN7S1865C73v30Ev
  ~S1865C7(); // tgen
  S1865C7(); // tgen
};
//SIG(-1 S1865C7) C1{ BC2{ vd v2} v1 Fp}


void  S1865C7 ::v30(){vfunc_called(this, "_ZN7S1865C73v30Ev");}
S1865C7 ::~S1865C7(){ note_dtor("S1865C7", this);} // tgen
S1865C7 ::S1865C7(){ note_ctor("S1865C7", this);} // tgen

static void Test_S1865C7()
{
  extern Class_Descriptor cd_S1865C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1865C7, buf);
    S1865C7 *dp, &lv = *(dp=new (buf) S1865C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1865C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1865C7)");
    check_base_class_offset(lv, (S1865C8*), 0, "S1865C7");
    check_field_offset(lv, s1865c7f0, ABISELECT(8,4), "S1865C7.s1865c7f0");
    test_class_info(&lv, &cd_S1865C7);
    dp->~S1865C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1865C7(Test_S1865C7, "S1865C7", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1865C7C1Ev();
extern void _ZN7S1865C7D1Ev();
Name_Map name_map_S1865C7[] = {
  NSPAIR(_ZN7S1865C7C1Ev),
  NSPAIR(_ZN7S1865C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1865C8;
extern VTBL_ENTRY _ZTI7S1865C8[];
extern  VTBL_ENTRY _ZTV7S1865C8[];
static Base_Class bases_S1865C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1865C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1865C7[];
extern void _ZN7S1865C7D1Ev();
extern void _ZN7S1865C7D0Ev();
extern void _ZN7S1865C83v31Ev();
extern void _ZN7S1865C73v30Ev();
static  VTBL_ENTRY vtc_S1865C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1865C7[0]),
  (VTBL_ENTRY)&_ZN7S1865C7D1Ev,
  (VTBL_ENTRY)&_ZN7S1865C7D0Ev,
  (VTBL_ENTRY)&_ZN7S1865C83v31Ev,
  (VTBL_ENTRY)&_ZN7S1865C73v30Ev,
};
extern VTBL_ENTRY _ZTI7S1865C7[];
extern  VTBL_ENTRY _ZTV7S1865C7[];
Class_Descriptor cd_S1865C7 = {  "S1865C7", // class name
  bases_S1865C7, 1,
  &(vtc_S1865C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1865C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1865C7),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1865C2  : S1865C3 {
  int s1865c2f0[2];
  ::S1850C5_nt s1865c2f1;
  ::S1865C7 s1865c2f2;
  ::S3593C21_nt s1865c2f3;
  ::S1850C10_nt s1865c2f4;
  char s1865c2f5;
  ::S16113C2_nt s1865c2f6;
  virtual  ~S1865C2(); // _ZN7S1865C2D1Ev
  virtual void  v15(); // _ZN7S1865C23v15Ev
  virtual void  v16(); // _ZN7S1865C23v16Ev
  virtual void  v17(); // _ZN7S1865C23v17Ev
  virtual void  v18(); // _ZN7S1865C23v18Ev
  virtual void  v19(); // _ZN7S1865C23v19Ev
  virtual void  v20(); // _ZN7S1865C23v20Ev
  virtual void  v21(); // _ZN7S1865C23v21Ev
  virtual void  v22(); // _ZN7S1865C23v22Ev
  virtual void  v23(); // _ZN7S1865C23v23Ev
  virtual void  v24(); // _ZN7S1865C23v24Ev
  S1865C2(); // tgen
};
//SIG(-1 S1865C2) C1{ BC2{ BC3{ vd m} vd v11 v12 v13 v14 v15 v16 v17 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] FC4{ BC5{ vd v19} v18 Fp} FC6{ BC7{ vd v21} v20 Fp} FC8{ m Fp} FC9{ m Fp} Fc FC10{ m Fi}}


 S1865C2 ::~S1865C2(){ note_dtor("S1865C2", this);}
void  S1865C2 ::v15(){vfunc_called(this, "_ZN7S1865C23v15Ev");}
void  S1865C2 ::v16(){vfunc_called(this, "_ZN7S1865C23v16Ev");}
void  S1865C2 ::v17(){vfunc_called(this, "_ZN7S1865C23v17Ev");}
void  S1865C2 ::v18(){vfunc_called(this, "_ZN7S1865C23v18Ev");}
void  S1865C2 ::v19(){vfunc_called(this, "_ZN7S1865C23v19Ev");}
void  S1865C2 ::v20(){vfunc_called(this, "_ZN7S1865C23v20Ev");}
void  S1865C2 ::v21(){vfunc_called(this, "_ZN7S1865C23v21Ev");}
void  S1865C2 ::v22(){vfunc_called(this, "_ZN7S1865C23v22Ev");}
void  S1865C2 ::v23(){vfunc_called(this, "_ZN7S1865C23v23Ev");}
void  S1865C2 ::v24(){vfunc_called(this, "_ZN7S1865C23v24Ev");}
S1865C2 ::S1865C2(){ note_ctor("S1865C2", this);} // tgen

static void Test_S1865C2()
{
  extern Class_Descriptor cd_S1865C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S1865C2, buf);
    S1865C2 *dp, &lv = *(dp=new (buf) S1865C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S1865C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1865C2)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1865C3*), 0, "S1865C2");
    check_base_class_offset(lv, (S1865C3*), 0, "S1865C2");
    check_field_offset(lv, s1865c2f0, ABISELECT(24,12), "S1865C2.s1865c2f0");
    check_field_offset(lv, s1865c2f1, ABISELECT(32,20), "S1865C2.s1865c2f1");
    check_field_offset(lv, s1865c2f2, ABISELECT(48,28), "S1865C2.s1865c2f2");
    check_field_offset(lv, s1865c2f3, ABISELECT(64,36), "S1865C2.s1865c2f3");
    check_field_offset(lv, s1865c2f4, ABISELECT(72,40), "S1865C2.s1865c2f4");
    check_field_offset(lv, s1865c2f5, ABISELECT(80,44), "S1865C2.s1865c2f5");
    check_field_offset(lv, s1865c2f6, ABISELECT(84,48), "S1865C2.s1865c2f6");
    test_class_info(&lv, &cd_S1865C2);
    dp->~S1865C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1865C2(Test_S1865C2, "S1865C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S1865C2C1Ev();
extern void _ZN7S1865C2D1Ev();
Name_Map name_map_S1865C2[] = {
  NSPAIR(_ZN7S1865C2C1Ev),
  NSPAIR(_ZN7S1865C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1865C3;
extern VTBL_ENTRY _ZTI7S1865C3[];
extern  VTBL_ENTRY _ZTV7S1865C3[];
static Base_Class bases_S1865C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1865C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1865C2[];
extern void _ZN7S1865C2D1Ev();
extern void _ZN7S1865C2D0Ev();
extern void _ZN7S1865C32v8Ev();
extern void _ZN7S1865C32v9Ev();
extern void _ZN7S1865C33v10Ev();
extern void _ZN7S1865C33v11Ev();
extern void _ZN7S1865C33v12Ev();
extern void _ZN7S1865C33v13Ev();
extern void _ZN7S1865C33v14Ev();
extern void _ZN7S1865C23v15Ev();
extern void _ZN7S1865C23v16Ev();
extern void _ZN7S1865C23v17Ev();
extern void _ZN7S1865C23v18Ev();
extern void _ZN7S1865C23v19Ev();
extern void _ZN7S1865C23v20Ev();
extern void _ZN7S1865C23v21Ev();
extern void _ZN7S1865C23v22Ev();
extern void _ZN7S1865C23v23Ev();
extern void _ZN7S1865C23v24Ev();
static  VTBL_ENTRY vtc_S1865C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1865C2[0]),
  (VTBL_ENTRY)&_ZN7S1865C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1865C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1865C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1865C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1865C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1865C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1865C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1865C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1865C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v24Ev,
};
extern VTBL_ENTRY _ZTI7S1865C2[];
extern  VTBL_ENTRY _ZTV7S1865C2[];
Class_Descriptor cd_S1865C2 = {  "S1865C2", // class name
  bases_S1865C2, 2,
  &(vtc_S1865C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S1865C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1865C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1865C12  {
  virtual  ~S1865C12(); // _ZN8S1865C12D1Ev
  virtual void  v25(); // _ZN8S1865C123v25Ev
  virtual void  v26(); // _ZN8S1865C123v26Ev
  virtual void  v27(); // _ZN8S1865C123v27Ev
  S1865C12(); // tgen
};
//SIG(-1 S1865C12) C1{ vd v1 v2 v3}


 S1865C12 ::~S1865C12(){ note_dtor("S1865C12", this);}
void  S1865C12 ::v25(){vfunc_called(this, "_ZN8S1865C123v25Ev");}
void  S1865C12 ::v26(){vfunc_called(this, "_ZN8S1865C123v26Ev");}
void  S1865C12 ::v27(){vfunc_called(this, "_ZN8S1865C123v27Ev");}
S1865C12 ::S1865C12(){ note_ctor("S1865C12", this);} // tgen

static void Test_S1865C12()
{
  extern Class_Descriptor cd_S1865C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1865C12, buf);
    S1865C12 *dp, &lv = *(dp=new (buf) S1865C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1865C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1865C12)");
    test_class_info(&lv, &cd_S1865C12);
    dp->~S1865C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1865C12(Test_S1865C12, "S1865C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S1865C12C1Ev();
extern void _ZN8S1865C12D1Ev();
Name_Map name_map_S1865C12[] = {
  NSPAIR(_ZN8S1865C12C1Ev),
  NSPAIR(_ZN8S1865C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1865C12[];
extern void _ZN8S1865C12D1Ev();
extern void _ZN8S1865C12D0Ev();
extern void _ZN8S1865C123v25Ev();
extern void _ZN8S1865C123v26Ev();
extern void _ZN8S1865C123v27Ev();
static  VTBL_ENTRY vtc_S1865C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1865C12[0]),
  (VTBL_ENTRY)&_ZN8S1865C12D1Ev,
  (VTBL_ENTRY)&_ZN8S1865C12D0Ev,
  (VTBL_ENTRY)&_ZN8S1865C123v25Ev,
  (VTBL_ENTRY)&_ZN8S1865C123v26Ev,
  (VTBL_ENTRY)&_ZN8S1865C123v27Ev,
};
extern VTBL_ENTRY _ZTI8S1865C12[];
extern  VTBL_ENTRY _ZTV8S1865C12[];
Class_Descriptor cd_S1865C12 = {  "S1865C12", // class name
  0,0,//no base classes
  &(vtc_S1865C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S1865C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1865C12),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1865C15  {
  void *s1865c15f0;
  void  mf1865c15(); // _ZN8S1865C159mf1865c15Ev
};
//SIG(-1 S1865C15) C1{ m Fp}


void  S1865C15 ::mf1865c15(){}

static void Test_S1865C15()
{
  {
    init_simple_test("S1865C15");
    S1865C15 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1865C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1865C15)");
    check_field_offset(lv, s1865c15f0, 0, "S1865C15.s1865c15f0");
  }
}
static Arrange_To_Call_Me vS1865C15(Test_S1865C15, "S1865C15", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1865C1  : S1865C2 , S1865C12 {
  ::S16113C5_nt s1865c1f0;
  ::S1865C15 s1865c1f1;
  ::S1850C10_nt s1865c1f2;
  int s1865c1f3;
  void *s1865c1f4[2];
  virtual  ~S1865C1(); // _ZN7S1865C1D1Ev
  virtual void  v1(); // _ZN7S1865C12v1Ev
  virtual void  v2(); // _ZN7S1865C12v2Ev
  virtual void  v3(); // _ZN7S1865C12v3Ev
  virtual void  v4(); // _ZN7S1865C12v4Ev
  virtual void  v5(); // _ZN7S1865C12v5Ev
  virtual void  v6(); // _ZN7S1865C12v6Ev
  virtual void  v7(); // _ZN7S1865C12v7Ev
  S1865C1(); // tgen
};
//SIG(1 S1865C1) C1{ BC2{ BC3{ BC4{ vd m} vd v8 v9 v10 v11 v12 v13 v14 Fp[2]} vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fi[2] FC5{ BC6{ vd v29} v28 Fp} FC7{ BC8{ vd v31} v30 Fp} FC9{ m Fp} FC10{ m Fp} Fc FC11{ m Fi}} BC12{ vd v25 v26 v27} vd v1 v2 v3 v4 v5 v6 v7 FC13{ m Fp Fi FC14{ m}} FC15{ m Fp} FC10 Fi Fp[2]}


 S1865C1 ::~S1865C1(){ note_dtor("S1865C1", this);}
void  S1865C1 ::v1(){vfunc_called(this, "_ZN7S1865C12v1Ev");}
void  S1865C1 ::v2(){vfunc_called(this, "_ZN7S1865C12v2Ev");}
void  S1865C1 ::v3(){vfunc_called(this, "_ZN7S1865C12v3Ev");}
void  S1865C1 ::v4(){vfunc_called(this, "_ZN7S1865C12v4Ev");}
void  S1865C1 ::v5(){vfunc_called(this, "_ZN7S1865C12v5Ev");}
void  S1865C1 ::v6(){vfunc_called(this, "_ZN7S1865C12v6Ev");}
void  S1865C1 ::v7(){vfunc_called(this, "_ZN7S1865C12v7Ev");}
S1865C1 ::S1865C1(){ note_ctor("S1865C1", this);} // tgen

static void Test_S1865C1()
{
  extern Class_Descriptor cd_S1865C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,23)];
    init_test(&cd_S1865C1, buf);
    S1865C1 *dp, &lv = *(dp=new (buf) S1865C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,88), "sizeof(S1865C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1865C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1865C3*)(S1865C2*), 0, "S1865C1");
    check_base_class_offset(lv, (S1865C3*)(S1865C2*), 0, "S1865C1");
    check_base_class_offset(lv, (S1865C2*), 0, "S1865C1");
    check_base_class_offset(lv, (S1865C12*), ABISELECT(88,52), "S1865C1");
    check_field_offset(lv, s1865c1f0, ABISELECT(96,56), "S1865C1.s1865c1f0");
    check_field_offset(lv, s1865c1f1, ABISELECT(112,68), "S1865C1.s1865c1f1");
    check_field_offset(lv, s1865c1f2, ABISELECT(120,72), "S1865C1.s1865c1f2");
    check_field_offset(lv, s1865c1f3, ABISELECT(128,76), "S1865C1.s1865c1f3");
    check_field_offset(lv, s1865c1f4, ABISELECT(136,80), "S1865C1.s1865c1f4");
    test_class_info(&lv, &cd_S1865C1);
    dp->~S1865C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1865C1(Test_S1865C1, "S1865C1", ABISELECT(152,88));

#else // __cplusplus

extern void _ZN7S1865C1C1Ev();
extern void _ZN7S1865C1D1Ev();
Name_Map name_map_S1865C1[] = {
  NSPAIR(_ZN7S1865C1C1Ev),
  NSPAIR(_ZN7S1865C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1865C3;
extern VTBL_ENTRY _ZTI7S1865C3[];
extern  VTBL_ENTRY _ZTV7S1865C3[];
extern Class_Descriptor cd_S1865C2;
extern VTBL_ENTRY _ZTI7S1865C2[];
extern  VTBL_ENTRY _ZTV7S1865C2[];
extern Class_Descriptor cd_S1865C12;
extern VTBL_ENTRY _ZTI8S1865C12[];
extern  VTBL_ENTRY _ZTV8S1865C12[];
static Base_Class bases_S1865C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1865C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1865C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1865C12,    ABISELECT(88,52), //bcp->offset
    28, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1865C1[];
extern void _ZN7S1865C1D1Ev();
extern void _ZN7S1865C1D0Ev();
extern void _ZN7S1865C32v8Ev();
extern void _ZN7S1865C32v9Ev();
extern void _ZN7S1865C33v10Ev();
extern void _ZN7S1865C33v11Ev();
extern void _ZN7S1865C33v12Ev();
extern void _ZN7S1865C33v13Ev();
extern void _ZN7S1865C33v14Ev();
extern void _ZN7S1865C23v15Ev();
extern void _ZN7S1865C23v16Ev();
extern void _ZN7S1865C23v17Ev();
extern void _ZN7S1865C23v18Ev();
extern void _ZN7S1865C23v19Ev();
extern void _ZN7S1865C23v20Ev();
extern void _ZN7S1865C23v21Ev();
extern void _ZN7S1865C23v22Ev();
extern void _ZN7S1865C23v23Ev();
extern void _ZN7S1865C23v24Ev();
extern void _ZN7S1865C12v1Ev();
extern void _ZN7S1865C12v2Ev();
extern void _ZN7S1865C12v3Ev();
extern void _ZN7S1865C12v4Ev();
extern void _ZN7S1865C12v5Ev();
extern void _ZN7S1865C12v6Ev();
extern void _ZN7S1865C12v7Ev();
extern void ABISELECT(_ZThn88_N7S1865C1D1Ev,_ZThn52_N7S1865C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S1865C1D0Ev,_ZThn52_N7S1865C1D0Ev)();
extern void _ZN8S1865C123v25Ev();
extern void _ZN8S1865C123v26Ev();
extern void _ZN8S1865C123v27Ev();
static  VTBL_ENTRY vtc_S1865C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1865C1[0]),
  (VTBL_ENTRY)&_ZN7S1865C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1865C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1865C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1865C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1865C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1865C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1865C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1865C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1865C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1865C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1865C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1865C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1865C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1865C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1865C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1865C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1865C12v7Ev,
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI7S1865C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S1865C1D1Ev,_ZThn52_N7S1865C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S1865C1D0Ev,_ZThn52_N7S1865C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1865C123v25Ev,
  (VTBL_ENTRY)&_ZN8S1865C123v26Ev,
  (VTBL_ENTRY)&_ZN8S1865C123v27Ev,
};
extern VTBL_ENTRY _ZTI7S1865C1[];
extern  VTBL_ENTRY _ZTV7S1865C1[];
Class_Descriptor cd_S1865C1 = {  "S1865C1", // class name
  bases_S1865C1, 4,
  &(vtc_S1865C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,88), // object size
  NSPAIRA(_ZTI7S1865C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1865C1),35, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6462C2_nt  {
  void *s6462c2f0;
  ::S4206C24_nt s6462c2f1;
  virtual  ~S6462C2_nt(); // _ZN10S6462C2_ntD1Ev
  virtual void  v12(); // _ZN10S6462C2_nt3v12Ev
  virtual void  v13(); // _ZN10S6462C2_nt3v13Ev
  virtual void  v14(); // _ZN10S6462C2_nt3v14Ev
  virtual void  v15(); // _ZN10S6462C2_nt3v15Ev
  virtual void  v16(); // _ZN10S6462C2_nt3v16Ev
  virtual void  v17(); // _ZN10S6462C2_nt3v17Ev
  virtual void  v18(); // _ZN10S6462C2_nt3v18Ev
  virtual void  v19(); // _ZN10S6462C2_nt3v19Ev
  virtual void  v20(); // _ZN10S6462C2_nt3v20Ev
  virtual void  v21(); // _ZN10S6462C2_nt3v21Ev
  virtual void  v22(); // _ZN10S6462C2_nt3v22Ev
  virtual void  v23(); // _ZN10S6462C2_nt3v23Ev
  virtual void  v24(); // _ZN10S6462C2_nt3v24Ev
  virtual void  v25(); // _ZN10S6462C2_nt3v25Ev
  virtual void  v26(); // _ZN10S6462C2_nt3v26Ev
  S6462C2_nt(); // tgen
};
//SIG(-1 S6462C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC5{ m}}}}


 S6462C2_nt ::~S6462C2_nt(){ note_dtor("S6462C2_nt", this);}
void  S6462C2_nt ::v12(){vfunc_called(this, "_ZN10S6462C2_nt3v12Ev");}
void  S6462C2_nt ::v13(){vfunc_called(this, "_ZN10S6462C2_nt3v13Ev");}
void  S6462C2_nt ::v14(){vfunc_called(this, "_ZN10S6462C2_nt3v14Ev");}
void  S6462C2_nt ::v15(){vfunc_called(this, "_ZN10S6462C2_nt3v15Ev");}
void  S6462C2_nt ::v16(){vfunc_called(this, "_ZN10S6462C2_nt3v16Ev");}
void  S6462C2_nt ::v17(){vfunc_called(this, "_ZN10S6462C2_nt3v17Ev");}
void  S6462C2_nt ::v18(){vfunc_called(this, "_ZN10S6462C2_nt3v18Ev");}
void  S6462C2_nt ::v19(){vfunc_called(this, "_ZN10S6462C2_nt3v19Ev");}
void  S6462C2_nt ::v20(){vfunc_called(this, "_ZN10S6462C2_nt3v20Ev");}
void  S6462C2_nt ::v21(){vfunc_called(this, "_ZN10S6462C2_nt3v21Ev");}
void  S6462C2_nt ::v22(){vfunc_called(this, "_ZN10S6462C2_nt3v22Ev");}
void  S6462C2_nt ::v23(){vfunc_called(this, "_ZN10S6462C2_nt3v23Ev");}
void  S6462C2_nt ::v24(){vfunc_called(this, "_ZN10S6462C2_nt3v24Ev");}
void  S6462C2_nt ::v25(){vfunc_called(this, "_ZN10S6462C2_nt3v25Ev");}
void  S6462C2_nt ::v26(){vfunc_called(this, "_ZN10S6462C2_nt3v26Ev");}
S6462C2_nt ::S6462C2_nt(){ note_ctor("S6462C2_nt", this);} // tgen

//skip512 S6462C2_nt

#else // __cplusplus

extern void _ZN10S6462C2_ntC1Ev();
extern void _ZN10S6462C2_ntD1Ev();
Name_Map name_map_S6462C2_nt[] = {
  NSPAIR(_ZN10S6462C2_ntC1Ev),
  NSPAIR(_ZN10S6462C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S6462C2_nt[];
extern void _ZN10S6462C2_ntD1Ev();
extern void _ZN10S6462C2_ntD0Ev();
extern void _ZN10S6462C2_nt3v12Ev();
extern void _ZN10S6462C2_nt3v13Ev();
extern void _ZN10S6462C2_nt3v14Ev();
extern void _ZN10S6462C2_nt3v15Ev();
extern void _ZN10S6462C2_nt3v16Ev();
extern void _ZN10S6462C2_nt3v17Ev();
extern void _ZN10S6462C2_nt3v18Ev();
extern void _ZN10S6462C2_nt3v19Ev();
extern void _ZN10S6462C2_nt3v20Ev();
extern void _ZN10S6462C2_nt3v21Ev();
extern void _ZN10S6462C2_nt3v22Ev();
extern void _ZN10S6462C2_nt3v23Ev();
extern void _ZN10S6462C2_nt3v24Ev();
extern void _ZN10S6462C2_nt3v25Ev();
extern void _ZN10S6462C2_nt3v26Ev();
static  VTBL_ENTRY vtc_S6462C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6462C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S6462C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v26Ev,
};
extern VTBL_ENTRY _ZTI10S6462C2_nt[];
VTBL_ENTRY *P__ZTI10S6462C2_nt = _ZTI10S6462C2_nt; 
extern  VTBL_ENTRY _ZTV10S6462C2_nt[];
Class_Descriptor cd_S6462C2_nt = {  "S6462C2_nt", // class name
  0,0,//no base classes
  &(vtc_S6462C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI10S6462C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S6462C2_nt),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6462C9  {
  virtual  ~S6462C9(); // _ZN7S6462C9D1Ev
  virtual void  v27(); // _ZN7S6462C93v27Ev
  virtual void  v28(); // _ZN7S6462C93v28Ev
  virtual void  v29(); // _ZN7S6462C93v29Ev
  S6462C9(); // tgen
};
//SIG(-1 S6462C9) C1{ vd v1 v2 v3}


 S6462C9 ::~S6462C9(){ note_dtor("S6462C9", this);}
void  S6462C9 ::v27(){vfunc_called(this, "_ZN7S6462C93v27Ev");}
void  S6462C9 ::v28(){vfunc_called(this, "_ZN7S6462C93v28Ev");}
void  S6462C9 ::v29(){vfunc_called(this, "_ZN7S6462C93v29Ev");}
S6462C9 ::S6462C9(){ note_ctor("S6462C9", this);} // tgen

static void Test_S6462C9()
{
  extern Class_Descriptor cd_S6462C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6462C9, buf);
    S6462C9 *dp, &lv = *(dp=new (buf) S6462C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6462C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6462C9)");
    test_class_info(&lv, &cd_S6462C9);
    dp->~S6462C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6462C9(Test_S6462C9, "S6462C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6462C9C1Ev();
extern void _ZN7S6462C9D1Ev();
Name_Map name_map_S6462C9[] = {
  NSPAIR(_ZN7S6462C9C1Ev),
  NSPAIR(_ZN7S6462C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6462C9[];
extern void _ZN7S6462C9D1Ev();
extern void _ZN7S6462C9D0Ev();
extern void _ZN7S6462C93v27Ev();
extern void _ZN7S6462C93v28Ev();
extern void _ZN7S6462C93v29Ev();
static  VTBL_ENTRY vtc_S6462C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6462C9[0]),
  (VTBL_ENTRY)&_ZN7S6462C9D1Ev,
  (VTBL_ENTRY)&_ZN7S6462C9D0Ev,
  (VTBL_ENTRY)&_ZN7S6462C93v27Ev,
  (VTBL_ENTRY)&_ZN7S6462C93v28Ev,
  (VTBL_ENTRY)&_ZN7S6462C93v29Ev,
};
extern VTBL_ENTRY _ZTI7S6462C9[];
extern  VTBL_ENTRY _ZTV7S6462C9[];
Class_Descriptor cd_S6462C9 = {  "S6462C9", // class name
  0,0,//no base classes
  &(vtc_S6462C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6462C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6462C9),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6462C8_nt  : S6462C9 {
  virtual  ~S6462C8_nt(); // _ZN10S6462C8_ntD1Ev
  virtual void  v30(); // _ZN10S6462C8_nt3v30Ev
  virtual void  v31(); // _ZN10S6462C8_nt3v31Ev
  virtual void  v32(); // _ZN10S6462C8_nt3v32Ev
  virtual void  v33(); // _ZN10S6462C8_nt3v33Ev
  virtual void  v34(); // _ZN10S6462C8_nt3v34Ev
  virtual void  v35(); // _ZN10S6462C8_nt3v35Ev
  S6462C8_nt(); // tgen
};
//SIG(-1 S6462C8_nt) C1{ BC2{ vd v7 v8 v9} vd v1 v2 v3 v4 v5 v6}


 S6462C8_nt ::~S6462C8_nt(){ note_dtor("S6462C8_nt", this);}
void  S6462C8_nt ::v30(){vfunc_called(this, "_ZN10S6462C8_nt3v30Ev");}
void  S6462C8_nt ::v31(){vfunc_called(this, "_ZN10S6462C8_nt3v31Ev");}
void  S6462C8_nt ::v32(){vfunc_called(this, "_ZN10S6462C8_nt3v32Ev");}
void  S6462C8_nt ::v33(){vfunc_called(this, "_ZN10S6462C8_nt3v33Ev");}
void  S6462C8_nt ::v34(){vfunc_called(this, "_ZN10S6462C8_nt3v34Ev");}
void  S6462C8_nt ::v35(){vfunc_called(this, "_ZN10S6462C8_nt3v35Ev");}
S6462C8_nt ::S6462C8_nt(){ note_ctor("S6462C8_nt", this);} // tgen

//skip512 S6462C8_nt

#else // __cplusplus

extern void _ZN10S6462C8_ntC1Ev();
extern void _ZN10S6462C8_ntD1Ev();
Name_Map name_map_S6462C8_nt[] = {
  NSPAIR(_ZN10S6462C8_ntC1Ev),
  NSPAIR(_ZN10S6462C8_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6462C9;
extern VTBL_ENTRY _ZTI7S6462C9[];
extern  VTBL_ENTRY _ZTV7S6462C9[];
static Base_Class bases_S6462C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6462C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S6462C8_nt[];
extern void _ZN10S6462C8_ntD1Ev();
extern void _ZN10S6462C8_ntD0Ev();
extern void _ZN7S6462C93v27Ev();
extern void _ZN7S6462C93v28Ev();
extern void _ZN7S6462C93v29Ev();
extern void _ZN10S6462C8_nt3v30Ev();
extern void _ZN10S6462C8_nt3v31Ev();
extern void _ZN10S6462C8_nt3v32Ev();
extern void _ZN10S6462C8_nt3v33Ev();
extern void _ZN10S6462C8_nt3v34Ev();
extern void _ZN10S6462C8_nt3v35Ev();
static  VTBL_ENTRY vtc_S6462C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6462C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S6462C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S6462C8_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S6462C93v27Ev,
  (VTBL_ENTRY)&_ZN7S6462C93v28Ev,
  (VTBL_ENTRY)&_ZN7S6462C93v29Ev,
  (VTBL_ENTRY)&_ZN10S6462C8_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S6462C8_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S6462C8_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S6462C8_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S6462C8_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S6462C8_nt3v35Ev,
};
extern VTBL_ENTRY _ZTI10S6462C8_nt[];
VTBL_ENTRY *P__ZTI10S6462C8_nt = _ZTI10S6462C8_nt; 
extern  VTBL_ENTRY _ZTV10S6462C8_nt[];
Class_Descriptor cd_S6462C8_nt = {  "S6462C8_nt", // class name
  bases_S6462C8_nt, 1,
  &(vtc_S6462C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S6462C8_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S6462C8_nt),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6462C13_nt  {
  __tsi64 s6462c13f0[4];
};
//SIG(-1 S6462C13_nt) C1{ FL[4]}



//skip512 S6462C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6462C12_nt  {
  ::S6462C13_nt s6462c12f0;
  void  mf6462c12(); // _ZN11S6462C12_nt9mf6462c12Ev
};
//SIG(-1 S6462C12_nt) C1{ m FC2{ FL[4]}}


void  S6462C12_nt ::mf6462c12(){}

//skip512 S6462C12_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6462C7_nt  : S6462C8_nt {
  ::S4206C36_nt s6462c7f0;
  ::S6462C12_nt s6462c7f1;
  char s6462c7f2;
  virtual  ~S6462C7_nt(); // _ZN10S6462C7_ntD1Ev
  virtual void  v36(); // _ZN10S6462C7_nt3v36Ev
  virtual void  v37(); // _ZN10S6462C7_nt3v37Ev
  virtual void  v38(); // _ZN10S6462C7_nt3v38Ev
  S6462C7_nt(); // tgen
};
//SIG(-1 S6462C7_nt) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10 v11 v12} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FC7{ FL[4]}} Fc}


 S6462C7_nt ::~S6462C7_nt(){ note_dtor("S6462C7_nt", this);}
void  S6462C7_nt ::v36(){vfunc_called(this, "_ZN10S6462C7_nt3v36Ev");}
void  S6462C7_nt ::v37(){vfunc_called(this, "_ZN10S6462C7_nt3v37Ev");}
void  S6462C7_nt ::v38(){vfunc_called(this, "_ZN10S6462C7_nt3v38Ev");}
S6462C7_nt ::S6462C7_nt(){ note_ctor("S6462C7_nt", this);} // tgen

//skip512 S6462C7_nt

#else // __cplusplus

extern void _ZN10S6462C7_ntC1Ev();
extern void _ZN10S6462C7_ntD1Ev();
Name_Map name_map_S6462C7_nt[] = {
  NSPAIR(_ZN10S6462C7_ntC1Ev),
  NSPAIR(_ZN10S6462C7_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6462C9;
extern VTBL_ENTRY _ZTI7S6462C9[];
extern  VTBL_ENTRY _ZTV7S6462C9[];
extern Class_Descriptor cd_S6462C8_nt;
extern VTBL_ENTRY _ZTI10S6462C8_nt[];
extern  VTBL_ENTRY _ZTV10S6462C8_nt[];
static Base_Class bases_S6462C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6462C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S6462C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S6462C7_nt[];
extern void _ZN10S6462C7_ntD1Ev();
extern void _ZN10S6462C7_ntD0Ev();
extern void _ZN7S6462C93v27Ev();
extern void _ZN7S6462C93v28Ev();
extern void _ZN7S6462C93v29Ev();
extern void _ZN10S6462C8_nt3v30Ev();
extern void _ZN10S6462C8_nt3v31Ev();
extern void _ZN10S6462C8_nt3v32Ev();
extern void _ZN10S6462C8_nt3v33Ev();
extern void _ZN10S6462C8_nt3v34Ev();
extern void _ZN10S6462C8_nt3v35Ev();
extern void _ZN10S6462C7_nt3v36Ev();
extern void _ZN10S6462C7_nt3v37Ev();
extern void _ZN10S6462C7_nt3v38Ev();
static  VTBL_ENTRY vtc_S6462C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6462C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S6462C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S6462C7_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S6462C93v27Ev,
  (VTBL_ENTRY)&_ZN7S6462C93v28Ev,
  (VTBL_ENTRY)&_ZN7S6462C93v29Ev,
  (VTBL_ENTRY)&_ZN10S6462C8_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S6462C8_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S6462C8_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S6462C8_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S6462C8_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S6462C8_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S6462C7_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S6462C7_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S6462C7_nt3v38Ev,
};
extern VTBL_ENTRY _ZTI10S6462C7_nt[];
VTBL_ENTRY *P__ZTI10S6462C7_nt = _ZTI10S6462C7_nt; 
extern  VTBL_ENTRY _ZTV10S6462C7_nt[];
Class_Descriptor cd_S6462C7_nt = {  "S6462C7_nt", // class name
  bases_S6462C7_nt, 2,
  &(vtc_S6462C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI10S6462C7_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S6462C7_nt),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6462C1  : S6462C2_nt , S6462C7_nt {
  char s6462c1f0;
  void *s6462c1f1;
  virtual  ~S6462C1(); // _ZN7S6462C1D1Ev
  virtual void  v1(); // _ZN7S6462C12v1Ev
  virtual void  v2(); // _ZN7S6462C12v2Ev
  virtual void  v3(); // _ZN7S6462C12v3Ev
  virtual void  v4(); // _ZN7S6462C12v4Ev
  virtual void  v5(); // _ZN7S6462C12v5Ev
  virtual void  v6(); // _ZN7S6462C12v6Ev
  virtual void  v7(); // _ZN7S6462C12v7Ev
  virtual void  v8(); // _ZN7S6462C12v8Ev
  virtual void  v9(); // _ZN7S6462C12v9Ev
  virtual void  v10(); // _ZN7S6462C13v10Ev
  virtual void  v11(); // _ZN7S6462C13v11Ev
  S6462C1(); // tgen
};
//SIG(1 S6462C1) C1{ BC2{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}}} BC7{ BC8{ BC9{ vd v27 v28 v29} vd v30 v31 v32 v33 v34 v35} vd v36 v37 v38 FC10{ m Fp Fi[2] FC11{ m}} FC12{ m FC13{ FL[4]}} Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fc Fp}


 S6462C1 ::~S6462C1(){ note_dtor("S6462C1", this);}
void  S6462C1 ::v1(){vfunc_called(this, "_ZN7S6462C12v1Ev");}
void  S6462C1 ::v2(){vfunc_called(this, "_ZN7S6462C12v2Ev");}
void  S6462C1 ::v3(){vfunc_called(this, "_ZN7S6462C12v3Ev");}
void  S6462C1 ::v4(){vfunc_called(this, "_ZN7S6462C12v4Ev");}
void  S6462C1 ::v5(){vfunc_called(this, "_ZN7S6462C12v5Ev");}
void  S6462C1 ::v6(){vfunc_called(this, "_ZN7S6462C12v6Ev");}
void  S6462C1 ::v7(){vfunc_called(this, "_ZN7S6462C12v7Ev");}
void  S6462C1 ::v8(){vfunc_called(this, "_ZN7S6462C12v8Ev");}
void  S6462C1 ::v9(){vfunc_called(this, "_ZN7S6462C12v9Ev");}
void  S6462C1 ::v10(){vfunc_called(this, "_ZN7S6462C13v10Ev");}
void  S6462C1 ::v11(){vfunc_called(this, "_ZN7S6462C13v11Ev");}
S6462C1 ::S6462C1(){ note_ctor("S6462C1", this);} // tgen

static void Test_S6462C1()
{
  extern Class_Descriptor cd_S6462C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,21)];
    init_test(&cd_S6462C1, buf);
    S6462C1 *dp, &lv = *(dp=new (buf) S6462C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,80), "sizeof(S6462C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6462C1)");
    check_base_class_offset(lv, (S6462C2_nt*), 0, "S6462C1");
    check_base_class_offset(lv, (S6462C9*)(S6462C8_nt*)(S6462C7_nt*), ABISELECT(32,20), "S6462C1");
    check_base_class_offset(lv, (S6462C8_nt*)(S6462C7_nt*), ABISELECT(32,20), "S6462C1");
    check_base_class_offset(lv, (S6462C7_nt*), ABISELECT(32,20), "S6462C1");
    check_field_offset(lv, s6462c1f0, ABISELECT(97,73), "S6462C1.s6462c1f0");
    check_field_offset(lv, s6462c1f1, ABISELECT(104,76), "S6462C1.s6462c1f1");
    test_class_info(&lv, &cd_S6462C1);
    dp->~S6462C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6462C1(Test_S6462C1, "S6462C1", ABISELECT(112,80));

#else // __cplusplus

extern void _ZN7S6462C1C1Ev();
extern void _ZN7S6462C1D1Ev();
Name_Map name_map_S6462C1[] = {
  NSPAIR(_ZN7S6462C1C1Ev),
  NSPAIR(_ZN7S6462C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6462C2_nt;
extern VTBL_ENTRY _ZTI10S6462C2_nt[];
extern  VTBL_ENTRY _ZTV10S6462C2_nt[];
extern Class_Descriptor cd_S6462C9;
extern VTBL_ENTRY _ZTI7S6462C9[];
extern  VTBL_ENTRY _ZTV7S6462C9[];
extern Class_Descriptor cd_S6462C8_nt;
extern VTBL_ENTRY _ZTI10S6462C8_nt[];
extern  VTBL_ENTRY _ZTV10S6462C8_nt[];
extern Class_Descriptor cd_S6462C7_nt;
extern VTBL_ENTRY _ZTI10S6462C7_nt[];
extern  VTBL_ENTRY _ZTV10S6462C7_nt[];
static Base_Class bases_S6462C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6462C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6462C9,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6462C8_nt,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6462C7_nt,    ABISELECT(32,20), //bcp->offset
    30, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6462C1[];
extern void _ZN7S6462C1D1Ev();
extern void _ZN7S6462C1D0Ev();
extern void _ZN10S6462C2_nt3v12Ev();
extern void _ZN10S6462C2_nt3v13Ev();
extern void _ZN10S6462C2_nt3v14Ev();
extern void _ZN10S6462C2_nt3v15Ev();
extern void _ZN10S6462C2_nt3v16Ev();
extern void _ZN10S6462C2_nt3v17Ev();
extern void _ZN10S6462C2_nt3v18Ev();
extern void _ZN10S6462C2_nt3v19Ev();
extern void _ZN10S6462C2_nt3v20Ev();
extern void _ZN10S6462C2_nt3v21Ev();
extern void _ZN10S6462C2_nt3v22Ev();
extern void _ZN10S6462C2_nt3v23Ev();
extern void _ZN10S6462C2_nt3v24Ev();
extern void _ZN10S6462C2_nt3v25Ev();
extern void _ZN10S6462C2_nt3v26Ev();
extern void _ZN7S6462C12v1Ev();
extern void _ZN7S6462C12v2Ev();
extern void _ZN7S6462C12v3Ev();
extern void _ZN7S6462C12v4Ev();
extern void _ZN7S6462C12v5Ev();
extern void _ZN7S6462C12v6Ev();
extern void _ZN7S6462C12v7Ev();
extern void _ZN7S6462C12v8Ev();
extern void _ZN7S6462C12v9Ev();
extern void _ZN7S6462C13v10Ev();
extern void _ZN7S6462C13v11Ev();
extern void ABISELECT(_ZThn32_N7S6462C1D1Ev,_ZThn20_N7S6462C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S6462C1D0Ev,_ZThn20_N7S6462C1D0Ev)();
extern void _ZN7S6462C93v27Ev();
extern void _ZN7S6462C93v28Ev();
extern void _ZN7S6462C93v29Ev();
extern void _ZN10S6462C8_nt3v30Ev();
extern void _ZN10S6462C8_nt3v31Ev();
extern void _ZN10S6462C8_nt3v32Ev();
extern void _ZN10S6462C8_nt3v33Ev();
extern void _ZN10S6462C8_nt3v34Ev();
extern void _ZN10S6462C8_nt3v35Ev();
extern void _ZN10S6462C7_nt3v36Ev();
extern void _ZN10S6462C7_nt3v37Ev();
extern void _ZN10S6462C7_nt3v38Ev();
static  VTBL_ENTRY vtc_S6462C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6462C1[0]),
  (VTBL_ENTRY)&_ZN7S6462C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6462C1D0Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S6462C2_nt3v26Ev,
  (VTBL_ENTRY)&_ZN7S6462C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6462C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6462C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6462C12v4Ev,
  (VTBL_ENTRY)&_ZN7S6462C12v5Ev,
  (VTBL_ENTRY)&_ZN7S6462C12v6Ev,
  (VTBL_ENTRY)&_ZN7S6462C12v7Ev,
  (VTBL_ENTRY)&_ZN7S6462C12v8Ev,
  (VTBL_ENTRY)&_ZN7S6462C12v9Ev,
  (VTBL_ENTRY)&_ZN7S6462C13v10Ev,
  (VTBL_ENTRY)&_ZN7S6462C13v11Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S6462C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S6462C1D1Ev,_ZThn20_N7S6462C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S6462C1D0Ev,_ZThn20_N7S6462C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6462C93v27Ev,
  (VTBL_ENTRY)&_ZN7S6462C93v28Ev,
  (VTBL_ENTRY)&_ZN7S6462C93v29Ev,
  (VTBL_ENTRY)&_ZN10S6462C8_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S6462C8_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S6462C8_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S6462C8_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S6462C8_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S6462C8_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S6462C7_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S6462C7_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S6462C7_nt3v38Ev,
};
extern VTBL_ENTRY _ZTI7S6462C1[];
extern  VTBL_ENTRY _ZTV7S6462C1[];
Class_Descriptor cd_S6462C1 = {  "S6462C1", // class name
  bases_S6462C1, 4,
  &(vtc_S6462C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,80), // object size
  NSPAIRA(_ZTI7S6462C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6462C1),46, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1866C3  : S1850C4_nt {
  void *s1866c3f0[2];
  virtual  ~S1866C3(); // _ZN7S1866C3D1Ev
  virtual void  v8(); // _ZN7S1866C32v8Ev
  virtual void  v9(); // _ZN7S1866C32v9Ev
  virtual void  v10(); // _ZN7S1866C33v10Ev
  virtual void  v11(); // _ZN7S1866C33v11Ev
  virtual void  v12(); // _ZN7S1866C33v12Ev
  virtual void  v13(); // _ZN7S1866C33v13Ev
  virtual void  v14(); // _ZN7S1866C33v14Ev
  S1866C3(); // tgen
};
//SIG(-1 S1866C3) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S1866C3 ::~S1866C3(){ note_dtor("S1866C3", this);}
void  S1866C3 ::v8(){vfunc_called(this, "_ZN7S1866C32v8Ev");}
void  S1866C3 ::v9(){vfunc_called(this, "_ZN7S1866C32v9Ev");}
void  S1866C3 ::v10(){vfunc_called(this, "_ZN7S1866C33v10Ev");}
void  S1866C3 ::v11(){vfunc_called(this, "_ZN7S1866C33v11Ev");}
void  S1866C3 ::v12(){vfunc_called(this, "_ZN7S1866C33v12Ev");}
void  S1866C3 ::v13(){vfunc_called(this, "_ZN7S1866C33v13Ev");}
void  S1866C3 ::v14(){vfunc_called(this, "_ZN7S1866C33v14Ev");}
S1866C3 ::S1866C3(){ note_ctor("S1866C3", this);} // tgen

static void Test_S1866C3()
{
  extern Class_Descriptor cd_S1866C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1866C3, buf);
    S1866C3 *dp, &lv = *(dp=new (buf) S1866C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1866C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1866C3)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S1866C3");
    check_field_offset(lv, s1866c3f0, ABISELECT(8,4), "S1866C3.s1866c3f0");
    test_class_info(&lv, &cd_S1866C3);
    dp->~S1866C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1866C3(Test_S1866C3, "S1866C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1866C3C1Ev();
extern void _ZN7S1866C3D1Ev();
Name_Map name_map_S1866C3[] = {
  NSPAIR(_ZN7S1866C3C1Ev),
  NSPAIR(_ZN7S1866C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S1866C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1866C3[];
extern void _ZN7S1866C3D1Ev();
extern void _ZN7S1866C3D0Ev();
extern void _ZN7S1866C32v8Ev();
extern void _ZN7S1866C32v9Ev();
extern void _ZN7S1866C33v10Ev();
extern void _ZN7S1866C33v11Ev();
extern void _ZN7S1866C33v12Ev();
extern void _ZN7S1866C33v13Ev();
extern void _ZN7S1866C33v14Ev();
static  VTBL_ENTRY vtc_S1866C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1866C3[0]),
  (VTBL_ENTRY)&_ZN7S1866C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1866C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1866C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1866C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1866C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1866C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1866C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1866C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1866C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S1866C3[];
extern  VTBL_ENTRY _ZTV7S1866C3[];
Class_Descriptor cd_S1866C3 = {  "S1866C3", // class name
  bases_S1866C3, 1,
  &(vtc_S1866C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1866C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1866C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1866C2  : S1866C3 {
  int s1866c2f0[2];
  ::S1865C7 s1866c2f1;
  ::S1850C5_nt s1866c2f2;
  ::S3593C21_nt s1866c2f3;
  ::S1865C15 s1866c2f4;
  char s1866c2f5;
  ::S16113C2_nt s1866c2f6;
  virtual  ~S1866C2(); // _ZN7S1866C2D1Ev
  virtual void  v15(); // _ZN7S1866C23v15Ev
  virtual void  v16(); // _ZN7S1866C23v16Ev
  virtual void  v17(); // _ZN7S1866C23v17Ev
  virtual void  v18(); // _ZN7S1866C23v18Ev
  virtual void  v19(); // _ZN7S1866C23v19Ev
  virtual void  v20(); // _ZN7S1866C23v20Ev
  virtual void  v21(); // _ZN7S1866C23v21Ev
  virtual void  v22(); // _ZN7S1866C23v22Ev
  virtual void  v23(); // _ZN7S1866C23v23Ev
  virtual void  v24(); // _ZN7S1866C23v24Ev
  S1866C2(); // tgen
};
//SIG(-1 S1866C2) C1{ BC2{ BC3{ vd m} vd v11 v12 v13 v14 v15 v16 v17 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] FC4{ BC5{ vd v19} v18 Fp} FC6{ BC7{ vd v21} v20 Fp} FC8{ m Fp} FC9{ m Fp} Fc FC10{ m Fi}}


 S1866C2 ::~S1866C2(){ note_dtor("S1866C2", this);}
void  S1866C2 ::v15(){vfunc_called(this, "_ZN7S1866C23v15Ev");}
void  S1866C2 ::v16(){vfunc_called(this, "_ZN7S1866C23v16Ev");}
void  S1866C2 ::v17(){vfunc_called(this, "_ZN7S1866C23v17Ev");}
void  S1866C2 ::v18(){vfunc_called(this, "_ZN7S1866C23v18Ev");}
void  S1866C2 ::v19(){vfunc_called(this, "_ZN7S1866C23v19Ev");}
void  S1866C2 ::v20(){vfunc_called(this, "_ZN7S1866C23v20Ev");}
void  S1866C2 ::v21(){vfunc_called(this, "_ZN7S1866C23v21Ev");}
void  S1866C2 ::v22(){vfunc_called(this, "_ZN7S1866C23v22Ev");}
void  S1866C2 ::v23(){vfunc_called(this, "_ZN7S1866C23v23Ev");}
void  S1866C2 ::v24(){vfunc_called(this, "_ZN7S1866C23v24Ev");}
S1866C2 ::S1866C2(){ note_ctor("S1866C2", this);} // tgen

static void Test_S1866C2()
{
  extern Class_Descriptor cd_S1866C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S1866C2, buf);
    S1866C2 *dp, &lv = *(dp=new (buf) S1866C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S1866C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1866C2)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1866C3*), 0, "S1866C2");
    check_base_class_offset(lv, (S1866C3*), 0, "S1866C2");
    check_field_offset(lv, s1866c2f0, ABISELECT(24,12), "S1866C2.s1866c2f0");
    check_field_offset(lv, s1866c2f1, ABISELECT(32,20), "S1866C2.s1866c2f1");
    check_field_offset(lv, s1866c2f2, ABISELECT(48,28), "S1866C2.s1866c2f2");
    check_field_offset(lv, s1866c2f3, ABISELECT(64,36), "S1866C2.s1866c2f3");
    check_field_offset(lv, s1866c2f4, ABISELECT(72,40), "S1866C2.s1866c2f4");
    check_field_offset(lv, s1866c2f5, ABISELECT(80,44), "S1866C2.s1866c2f5");
    check_field_offset(lv, s1866c2f6, ABISELECT(84,48), "S1866C2.s1866c2f6");
    test_class_info(&lv, &cd_S1866C2);
    dp->~S1866C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1866C2(Test_S1866C2, "S1866C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S1866C2C1Ev();
extern void _ZN7S1866C2D1Ev();
Name_Map name_map_S1866C2[] = {
  NSPAIR(_ZN7S1866C2C1Ev),
  NSPAIR(_ZN7S1866C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1866C3;
extern VTBL_ENTRY _ZTI7S1866C3[];
extern  VTBL_ENTRY _ZTV7S1866C3[];
static Base_Class bases_S1866C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1866C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1866C2[];
extern void _ZN7S1866C2D1Ev();
extern void _ZN7S1866C2D0Ev();
extern void _ZN7S1866C32v8Ev();
extern void _ZN7S1866C32v9Ev();
extern void _ZN7S1866C33v10Ev();
extern void _ZN7S1866C33v11Ev();
extern void _ZN7S1866C33v12Ev();
extern void _ZN7S1866C33v13Ev();
extern void _ZN7S1866C33v14Ev();
extern void _ZN7S1866C23v15Ev();
extern void _ZN7S1866C23v16Ev();
extern void _ZN7S1866C23v17Ev();
extern void _ZN7S1866C23v18Ev();
extern void _ZN7S1866C23v19Ev();
extern void _ZN7S1866C23v20Ev();
extern void _ZN7S1866C23v21Ev();
extern void _ZN7S1866C23v22Ev();
extern void _ZN7S1866C23v23Ev();
extern void _ZN7S1866C23v24Ev();
static  VTBL_ENTRY vtc_S1866C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1866C2[0]),
  (VTBL_ENTRY)&_ZN7S1866C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1866C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1866C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1866C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1866C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1866C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1866C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1866C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1866C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v24Ev,
};
extern VTBL_ENTRY _ZTI7S1866C2[];
extern  VTBL_ENTRY _ZTV7S1866C2[];
Class_Descriptor cd_S1866C2 = {  "S1866C2", // class name
  bases_S1866C2, 2,
  &(vtc_S1866C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S1866C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1866C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1866C12  {
  virtual  ~S1866C12(); // _ZN8S1866C12D1Ev
  virtual void  v25(); // _ZN8S1866C123v25Ev
  virtual void  v26(); // _ZN8S1866C123v26Ev
  virtual void  v27(); // _ZN8S1866C123v27Ev
  S1866C12(); // tgen
};
//SIG(-1 S1866C12) C1{ vd v1 v2 v3}


 S1866C12 ::~S1866C12(){ note_dtor("S1866C12", this);}
void  S1866C12 ::v25(){vfunc_called(this, "_ZN8S1866C123v25Ev");}
void  S1866C12 ::v26(){vfunc_called(this, "_ZN8S1866C123v26Ev");}
void  S1866C12 ::v27(){vfunc_called(this, "_ZN8S1866C123v27Ev");}
S1866C12 ::S1866C12(){ note_ctor("S1866C12", this);} // tgen

static void Test_S1866C12()
{
  extern Class_Descriptor cd_S1866C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1866C12, buf);
    S1866C12 *dp, &lv = *(dp=new (buf) S1866C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1866C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1866C12)");
    test_class_info(&lv, &cd_S1866C12);
    dp->~S1866C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1866C12(Test_S1866C12, "S1866C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S1866C12C1Ev();
extern void _ZN8S1866C12D1Ev();
Name_Map name_map_S1866C12[] = {
  NSPAIR(_ZN8S1866C12C1Ev),
  NSPAIR(_ZN8S1866C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1866C12[];
extern void _ZN8S1866C12D1Ev();
extern void _ZN8S1866C12D0Ev();
extern void _ZN8S1866C123v25Ev();
extern void _ZN8S1866C123v26Ev();
extern void _ZN8S1866C123v27Ev();
static  VTBL_ENTRY vtc_S1866C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1866C12[0]),
  (VTBL_ENTRY)&_ZN8S1866C12D1Ev,
  (VTBL_ENTRY)&_ZN8S1866C12D0Ev,
  (VTBL_ENTRY)&_ZN8S1866C123v25Ev,
  (VTBL_ENTRY)&_ZN8S1866C123v26Ev,
  (VTBL_ENTRY)&_ZN8S1866C123v27Ev,
};
extern VTBL_ENTRY _ZTI8S1866C12[];
extern  VTBL_ENTRY _ZTV8S1866C12[];
Class_Descriptor cd_S1866C12 = {  "S1866C12", // class name
  0,0,//no base classes
  &(vtc_S1866C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S1866C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1866C12),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1866C1  : S1866C2 , S1866C12 {
  void *s1866c1f0;
  ::S16113C5_nt s1866c1f1;
  ::S1850C10_nt s1866c1f2;
  virtual  ~S1866C1(); // _ZN7S1866C1D1Ev
  virtual void  v1(); // _ZN7S1866C12v1Ev
  virtual void  v2(); // _ZN7S1866C12v2Ev
  virtual void  v3(); // _ZN7S1866C12v3Ev
  virtual void  v4(); // _ZN7S1866C12v4Ev
  virtual void  v5(); // _ZN7S1866C12v5Ev
  virtual void  v6(); // _ZN7S1866C12v6Ev
  virtual void  v7(); // _ZN7S1866C12v7Ev
  S1866C1(); // tgen
};
//SIG(1 S1866C1) C1{ BC2{ BC3{ BC4{ vd m} vd v8 v9 v10 v11 v12 v13 v14 Fp[2]} vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fi[2] FC5{ BC6{ vd v29} v28 Fp} FC7{ BC8{ vd v31} v30 Fp} FC9{ m Fp} FC10{ m Fp} Fc FC11{ m Fi}} BC12{ vd v25 v26 v27} vd v1 v2 v3 v4 v5 v6 v7 Fp FC13{ m Fp Fi FC14{ m}} FC15{ m Fp}}


 S1866C1 ::~S1866C1(){ note_dtor("S1866C1", this);}
void  S1866C1 ::v1(){vfunc_called(this, "_ZN7S1866C12v1Ev");}
void  S1866C1 ::v2(){vfunc_called(this, "_ZN7S1866C12v2Ev");}
void  S1866C1 ::v3(){vfunc_called(this, "_ZN7S1866C12v3Ev");}
void  S1866C1 ::v4(){vfunc_called(this, "_ZN7S1866C12v4Ev");}
void  S1866C1 ::v5(){vfunc_called(this, "_ZN7S1866C12v5Ev");}
void  S1866C1 ::v6(){vfunc_called(this, "_ZN7S1866C12v6Ev");}
void  S1866C1 ::v7(){vfunc_called(this, "_ZN7S1866C12v7Ev");}
S1866C1 ::S1866C1(){ note_ctor("S1866C1", this);} // tgen

static void Test_S1866C1()
{
  extern Class_Descriptor cd_S1866C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,20)];
    init_test(&cd_S1866C1, buf);
    S1866C1 *dp, &lv = *(dp=new (buf) S1866C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,76), "sizeof(S1866C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1866C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1866C3*)(S1866C2*), 0, "S1866C1");
    check_base_class_offset(lv, (S1866C3*)(S1866C2*), 0, "S1866C1");
    check_base_class_offset(lv, (S1866C2*), 0, "S1866C1");
    check_base_class_offset(lv, (S1866C12*), ABISELECT(88,52), "S1866C1");
    check_field_offset(lv, s1866c1f0, ABISELECT(96,56), "S1866C1.s1866c1f0");
    check_field_offset(lv, s1866c1f1, ABISELECT(104,60), "S1866C1.s1866c1f1");
    check_field_offset(lv, s1866c1f2, ABISELECT(120,72), "S1866C1.s1866c1f2");
    test_class_info(&lv, &cd_S1866C1);
    dp->~S1866C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1866C1(Test_S1866C1, "S1866C1", ABISELECT(128,76));

#else // __cplusplus

extern void _ZN7S1866C1C1Ev();
extern void _ZN7S1866C1D1Ev();
Name_Map name_map_S1866C1[] = {
  NSPAIR(_ZN7S1866C1C1Ev),
  NSPAIR(_ZN7S1866C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1866C3;
extern VTBL_ENTRY _ZTI7S1866C3[];
extern  VTBL_ENTRY _ZTV7S1866C3[];
extern Class_Descriptor cd_S1866C2;
extern VTBL_ENTRY _ZTI7S1866C2[];
extern  VTBL_ENTRY _ZTV7S1866C2[];
extern Class_Descriptor cd_S1866C12;
extern VTBL_ENTRY _ZTI8S1866C12[];
extern  VTBL_ENTRY _ZTV8S1866C12[];
static Base_Class bases_S1866C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1866C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1866C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1866C12,    ABISELECT(88,52), //bcp->offset
    28, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1866C1[];
extern void _ZN7S1866C1D1Ev();
extern void _ZN7S1866C1D0Ev();
extern void _ZN7S1866C32v8Ev();
extern void _ZN7S1866C32v9Ev();
extern void _ZN7S1866C33v10Ev();
extern void _ZN7S1866C33v11Ev();
extern void _ZN7S1866C33v12Ev();
extern void _ZN7S1866C33v13Ev();
extern void _ZN7S1866C33v14Ev();
extern void _ZN7S1866C23v15Ev();
extern void _ZN7S1866C23v16Ev();
extern void _ZN7S1866C23v17Ev();
extern void _ZN7S1866C23v18Ev();
extern void _ZN7S1866C23v19Ev();
extern void _ZN7S1866C23v20Ev();
extern void _ZN7S1866C23v21Ev();
extern void _ZN7S1866C23v22Ev();
extern void _ZN7S1866C23v23Ev();
extern void _ZN7S1866C23v24Ev();
extern void _ZN7S1866C12v1Ev();
extern void _ZN7S1866C12v2Ev();
extern void _ZN7S1866C12v3Ev();
extern void _ZN7S1866C12v4Ev();
extern void _ZN7S1866C12v5Ev();
extern void _ZN7S1866C12v6Ev();
extern void _ZN7S1866C12v7Ev();
extern void ABISELECT(_ZThn88_N7S1866C1D1Ev,_ZThn52_N7S1866C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S1866C1D0Ev,_ZThn52_N7S1866C1D0Ev)();
extern void _ZN8S1866C123v25Ev();
extern void _ZN8S1866C123v26Ev();
extern void _ZN8S1866C123v27Ev();
static  VTBL_ENTRY vtc_S1866C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1866C1[0]),
  (VTBL_ENTRY)&_ZN7S1866C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1866C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1866C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1866C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1866C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1866C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1866C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1866C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1866C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1866C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1866C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1866C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1866C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1866C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1866C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1866C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1866C12v7Ev,
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI7S1866C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S1866C1D1Ev,_ZThn52_N7S1866C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S1866C1D0Ev,_ZThn52_N7S1866C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1866C123v25Ev,
  (VTBL_ENTRY)&_ZN8S1866C123v26Ev,
  (VTBL_ENTRY)&_ZN8S1866C123v27Ev,
};
extern VTBL_ENTRY _ZTI7S1866C1[];
extern  VTBL_ENTRY _ZTV7S1866C1[];
Class_Descriptor cd_S1866C1 = {  "S1866C1", // class name
  bases_S1866C1, 4,
  &(vtc_S1866C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,76), // object size
  NSPAIRA(_ZTI7S1866C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1866C1),35, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S790C4  : S1850C4_nt {
  void *s790c4f0[2];
  virtual  ~S790C4(); // _ZN6S790C4D1Ev
  virtual void  v2(); // _ZN6S790C42v2Ev
  virtual void  v3(); // _ZN6S790C42v3Ev
  virtual void  v4(); // _ZN6S790C42v4Ev
  virtual void  v5(); // _ZN6S790C42v5Ev
  virtual void  v6(); // _ZN6S790C42v6Ev
  virtual void  v7(); // _ZN6S790C42v7Ev
  virtual void  v8(); // _ZN6S790C42v8Ev
  S790C4(); // tgen
};
//SIG(-1 S790C4) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S790C4 ::~S790C4(){ note_dtor("S790C4", this);}
void  S790C4 ::v2(){vfunc_called(this, "_ZN6S790C42v2Ev");}
void  S790C4 ::v3(){vfunc_called(this, "_ZN6S790C42v3Ev");}
void  S790C4 ::v4(){vfunc_called(this, "_ZN6S790C42v4Ev");}
void  S790C4 ::v5(){vfunc_called(this, "_ZN6S790C42v5Ev");}
void  S790C4 ::v6(){vfunc_called(this, "_ZN6S790C42v6Ev");}
void  S790C4 ::v7(){vfunc_called(this, "_ZN6S790C42v7Ev");}
void  S790C4 ::v8(){vfunc_called(this, "_ZN6S790C42v8Ev");}
S790C4 ::S790C4(){ note_ctor("S790C4", this);} // tgen

static void Test_S790C4()
{
  extern Class_Descriptor cd_S790C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S790C4, buf);
    S790C4 *dp, &lv = *(dp=new (buf) S790C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S790C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S790C4)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S790C4");
    check_field_offset(lv, s790c4f0, ABISELECT(8,4), "S790C4.s790c4f0");
    test_class_info(&lv, &cd_S790C4);
    dp->~S790C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS790C4(Test_S790C4, "S790C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S790C4C1Ev();
extern void _ZN6S790C4D1Ev();
Name_Map name_map_S790C4[] = {
  NSPAIR(_ZN6S790C4C1Ev),
  NSPAIR(_ZN6S790C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S790C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S790C4[];
extern void _ZN6S790C4D1Ev();
extern void _ZN6S790C4D0Ev();
extern void _ZN6S790C42v2Ev();
extern void _ZN6S790C42v3Ev();
extern void _ZN6S790C42v4Ev();
extern void _ZN6S790C42v5Ev();
extern void _ZN6S790C42v6Ev();
extern void _ZN6S790C42v7Ev();
extern void _ZN6S790C42v8Ev();
static  VTBL_ENTRY vtc_S790C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S790C4[0]),
  (VTBL_ENTRY)&_ZN6S790C4D1Ev,
  (VTBL_ENTRY)&_ZN6S790C4D0Ev,
  (VTBL_ENTRY)&_ZN6S790C42v2Ev,
  (VTBL_ENTRY)&_ZN6S790C42v3Ev,
  (VTBL_ENTRY)&_ZN6S790C42v4Ev,
  (VTBL_ENTRY)&_ZN6S790C42v5Ev,
  (VTBL_ENTRY)&_ZN6S790C42v6Ev,
  (VTBL_ENTRY)&_ZN6S790C42v7Ev,
  (VTBL_ENTRY)&_ZN6S790C42v8Ev,
};
extern VTBL_ENTRY _ZTI6S790C4[];
extern  VTBL_ENTRY _ZTV6S790C4[];
Class_Descriptor cd_S790C4 = {  "S790C4", // class name
  bases_S790C4, 1,
  &(vtc_S790C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S790C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S790C4),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S790C3  : S790C4 {
  int s790c3f0[2];
  ::S1865C7 s790c3f1;
  ::S1850C5_nt s790c3f2;
  ::S3593C21_nt s790c3f3;
  ::S1865C15 s790c3f4;
  char s790c3f5;
  ::S16113C2_nt s790c3f6;
  virtual  ~S790C3(); // _ZN6S790C3D1Ev
  virtual void  v9(); // _ZN6S790C32v9Ev
  virtual void  v10(); // _ZN6S790C33v10Ev
  virtual void  v11(); // _ZN6S790C33v11Ev
  virtual void  v12(); // _ZN6S790C33v12Ev
  virtual void  v13(); // _ZN6S790C33v13Ev
  virtual void  v14(); // _ZN6S790C33v14Ev
  virtual void  v15(); // _ZN6S790C33v15Ev
  virtual void  v16(); // _ZN6S790C33v16Ev
  virtual void  v17(); // _ZN6S790C33v17Ev
  virtual void  v18(); // _ZN6S790C33v18Ev
  S790C3(); // tgen
};
//SIG(-1 S790C3) C1{ BC2{ BC3{ vd m} vd v11 v12 v13 v14 v15 v16 v17 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] FC4{ BC5{ vd v19} v18 Fp} FC6{ BC7{ vd v21} v20 Fp} FC8{ m Fp} FC9{ m Fp} Fc FC10{ m Fi}}


 S790C3 ::~S790C3(){ note_dtor("S790C3", this);}
void  S790C3 ::v9(){vfunc_called(this, "_ZN6S790C32v9Ev");}
void  S790C3 ::v10(){vfunc_called(this, "_ZN6S790C33v10Ev");}
void  S790C3 ::v11(){vfunc_called(this, "_ZN6S790C33v11Ev");}
void  S790C3 ::v12(){vfunc_called(this, "_ZN6S790C33v12Ev");}
void  S790C3 ::v13(){vfunc_called(this, "_ZN6S790C33v13Ev");}
void  S790C3 ::v14(){vfunc_called(this, "_ZN6S790C33v14Ev");}
void  S790C3 ::v15(){vfunc_called(this, "_ZN6S790C33v15Ev");}
void  S790C3 ::v16(){vfunc_called(this, "_ZN6S790C33v16Ev");}
void  S790C3 ::v17(){vfunc_called(this, "_ZN6S790C33v17Ev");}
void  S790C3 ::v18(){vfunc_called(this, "_ZN6S790C33v18Ev");}
S790C3 ::S790C3(){ note_ctor("S790C3", this);} // tgen

static void Test_S790C3()
{
  extern Class_Descriptor cd_S790C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S790C3, buf);
    S790C3 *dp, &lv = *(dp=new (buf) S790C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S790C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S790C3)");
    check_base_class_offset(lv, (S1850C4_nt*)(S790C4*), 0, "S790C3");
    check_base_class_offset(lv, (S790C4*), 0, "S790C3");
    check_field_offset(lv, s790c3f0, ABISELECT(24,12), "S790C3.s790c3f0");
    check_field_offset(lv, s790c3f1, ABISELECT(32,20), "S790C3.s790c3f1");
    check_field_offset(lv, s790c3f2, ABISELECT(48,28), "S790C3.s790c3f2");
    check_field_offset(lv, s790c3f3, ABISELECT(64,36), "S790C3.s790c3f3");
    check_field_offset(lv, s790c3f4, ABISELECT(72,40), "S790C3.s790c3f4");
    check_field_offset(lv, s790c3f5, ABISELECT(80,44), "S790C3.s790c3f5");
    check_field_offset(lv, s790c3f6, ABISELECT(84,48), "S790C3.s790c3f6");
    test_class_info(&lv, &cd_S790C3);
    dp->~S790C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS790C3(Test_S790C3, "S790C3", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN6S790C3C1Ev();
extern void _ZN6S790C3D1Ev();
Name_Map name_map_S790C3[] = {
  NSPAIR(_ZN6S790C3C1Ev),
  NSPAIR(_ZN6S790C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S790C4;
extern VTBL_ENTRY _ZTI6S790C4[];
extern  VTBL_ENTRY _ZTV6S790C4[];
static Base_Class bases_S790C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S790C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S790C3[];
extern void _ZN6S790C3D1Ev();
extern void _ZN6S790C3D0Ev();
extern void _ZN6S790C42v2Ev();
extern void _ZN6S790C42v3Ev();
extern void _ZN6S790C42v4Ev();
extern void _ZN6S790C42v5Ev();
extern void _ZN6S790C42v6Ev();
extern void _ZN6S790C42v7Ev();
extern void _ZN6S790C42v8Ev();
extern void _ZN6S790C32v9Ev();
extern void _ZN6S790C33v10Ev();
extern void _ZN6S790C33v11Ev();
extern void _ZN6S790C33v12Ev();
extern void _ZN6S790C33v13Ev();
extern void _ZN6S790C33v14Ev();
extern void _ZN6S790C33v15Ev();
extern void _ZN6S790C33v16Ev();
extern void _ZN6S790C33v17Ev();
extern void _ZN6S790C33v18Ev();
static  VTBL_ENTRY vtc_S790C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S790C3[0]),
  (VTBL_ENTRY)&_ZN6S790C3D1Ev,
  (VTBL_ENTRY)&_ZN6S790C3D0Ev,
  (VTBL_ENTRY)&_ZN6S790C42v2Ev,
  (VTBL_ENTRY)&_ZN6S790C42v3Ev,
  (VTBL_ENTRY)&_ZN6S790C42v4Ev,
  (VTBL_ENTRY)&_ZN6S790C42v5Ev,
  (VTBL_ENTRY)&_ZN6S790C42v6Ev,
  (VTBL_ENTRY)&_ZN6S790C42v7Ev,
  (VTBL_ENTRY)&_ZN6S790C42v8Ev,
  (VTBL_ENTRY)&_ZN6S790C32v9Ev,
  (VTBL_ENTRY)&_ZN6S790C33v10Ev,
  (VTBL_ENTRY)&_ZN6S790C33v11Ev,
  (VTBL_ENTRY)&_ZN6S790C33v12Ev,
  (VTBL_ENTRY)&_ZN6S790C33v13Ev,
  (VTBL_ENTRY)&_ZN6S790C33v14Ev,
  (VTBL_ENTRY)&_ZN6S790C33v15Ev,
  (VTBL_ENTRY)&_ZN6S790C33v16Ev,
  (VTBL_ENTRY)&_ZN6S790C33v17Ev,
  (VTBL_ENTRY)&_ZN6S790C33v18Ev,
};
extern VTBL_ENTRY _ZTI6S790C3[];
extern  VTBL_ENTRY _ZTV6S790C3[];
Class_Descriptor cd_S790C3 = {  "S790C3", // class name
  bases_S790C3, 2,
  &(vtc_S790C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI6S790C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S790C3),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S790C13  {
  virtual  ~S790C13(); // _ZN7S790C13D1Ev
  virtual void  v19(); // _ZN7S790C133v19Ev
  virtual void  v20(); // _ZN7S790C133v20Ev
  virtual void  v21(); // _ZN7S790C133v21Ev
  S790C13(); // tgen
};
//SIG(-1 S790C13) C1{ vd v1 v2 v3}


 S790C13 ::~S790C13(){ note_dtor("S790C13", this);}
void  S790C13 ::v19(){vfunc_called(this, "_ZN7S790C133v19Ev");}
void  S790C13 ::v20(){vfunc_called(this, "_ZN7S790C133v20Ev");}
void  S790C13 ::v21(){vfunc_called(this, "_ZN7S790C133v21Ev");}
S790C13 ::S790C13(){ note_ctor("S790C13", this);} // tgen

static void Test_S790C13()
{
  extern Class_Descriptor cd_S790C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S790C13, buf);
    S790C13 *dp, &lv = *(dp=new (buf) S790C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S790C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S790C13)");
    test_class_info(&lv, &cd_S790C13);
    dp->~S790C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS790C13(Test_S790C13, "S790C13", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S790C13C1Ev();
extern void _ZN7S790C13D1Ev();
Name_Map name_map_S790C13[] = {
  NSPAIR(_ZN7S790C13C1Ev),
  NSPAIR(_ZN7S790C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S790C13[];
extern void _ZN7S790C13D1Ev();
extern void _ZN7S790C13D0Ev();
extern void _ZN7S790C133v19Ev();
extern void _ZN7S790C133v20Ev();
extern void _ZN7S790C133v21Ev();
static  VTBL_ENTRY vtc_S790C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S790C13[0]),
  (VTBL_ENTRY)&_ZN7S790C13D1Ev,
  (VTBL_ENTRY)&_ZN7S790C13D0Ev,
  (VTBL_ENTRY)&_ZN7S790C133v19Ev,
  (VTBL_ENTRY)&_ZN7S790C133v20Ev,
  (VTBL_ENTRY)&_ZN7S790C133v21Ev,
};
extern VTBL_ENTRY _ZTI7S790C13[];
extern  VTBL_ENTRY _ZTV7S790C13[];
Class_Descriptor cd_S790C13 = {  "S790C13", // class name
  0,0,//no base classes
  &(vtc_S790C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S790C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S790C13),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S790C2  : S790C3 , S790C13 {
  void *s790c2f0[3];
  virtual  ~S790C2(); // _ZN6S790C2D1Ev
  virtual void  v22(); // _ZN6S790C23v22Ev
  virtual void  v23(); // _ZN6S790C23v23Ev
  virtual void  v24(); // _ZN6S790C23v24Ev
  virtual void  v25(); // _ZN6S790C23v25Ev
  virtual void  v26(); // _ZN6S790C23v26Ev
  virtual void  v27(); // _ZN6S790C23v27Ev
  virtual void  v28(); // _ZN6S790C23v28Ev
  virtual void  v29(); // _ZN6S790C23v29Ev
  virtual void  v30(); // _ZN6S790C23v30Ev
  virtual void  v31(); // _ZN6S790C23v31Ev
  virtual void  v32(); // _ZN6S790C23v32Ev
  virtual void  v33(); // _ZN6S790C23v33Ev
  S790C2(); // tgen
};
//SIG(-1 S790C2) C1{ BC2{ BC3{ BC4{ vd m} vd v13 v14 v15 v16 v17 v18 v19 Fp[2]} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 Fi[2] FC5{ BC6{ vd v34} v33 Fp} FC7{ BC8{ vd v36} v35 Fp} FC9{ m Fp} FC10{ m Fp} Fc FC11{ m Fi}} BC12{ vd v30 v31 v32} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[3]}


 S790C2 ::~S790C2(){ note_dtor("S790C2", this);}
void  S790C2 ::v22(){vfunc_called(this, "_ZN6S790C23v22Ev");}
void  S790C2 ::v23(){vfunc_called(this, "_ZN6S790C23v23Ev");}
void  S790C2 ::v24(){vfunc_called(this, "_ZN6S790C23v24Ev");}
void  S790C2 ::v25(){vfunc_called(this, "_ZN6S790C23v25Ev");}
void  S790C2 ::v26(){vfunc_called(this, "_ZN6S790C23v26Ev");}
void  S790C2 ::v27(){vfunc_called(this, "_ZN6S790C23v27Ev");}
void  S790C2 ::v28(){vfunc_called(this, "_ZN6S790C23v28Ev");}
void  S790C2 ::v29(){vfunc_called(this, "_ZN6S790C23v29Ev");}
void  S790C2 ::v30(){vfunc_called(this, "_ZN6S790C23v30Ev");}
void  S790C2 ::v31(){vfunc_called(this, "_ZN6S790C23v31Ev");}
void  S790C2 ::v32(){vfunc_called(this, "_ZN6S790C23v32Ev");}
void  S790C2 ::v33(){vfunc_called(this, "_ZN6S790C23v33Ev");}
S790C2 ::S790C2(){ note_ctor("S790C2", this);} // tgen

static void Test_S790C2()
{
  extern Class_Descriptor cd_S790C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,18)];
    init_test(&cd_S790C2, buf);
    S790C2 *dp, &lv = *(dp=new (buf) S790C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,68), "sizeof(S790C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S790C2)");
    check_base_class_offset(lv, (S1850C4_nt*)(S790C4*)(S790C3*), 0, "S790C2");
    check_base_class_offset(lv, (S790C4*)(S790C3*), 0, "S790C2");
    check_base_class_offset(lv, (S790C3*), 0, "S790C2");
    check_base_class_offset(lv, (S790C13*), ABISELECT(88,52), "S790C2");
    check_field_offset(lv, s790c2f0, ABISELECT(96,56), "S790C2.s790c2f0");
    test_class_info(&lv, &cd_S790C2);
    dp->~S790C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS790C2(Test_S790C2, "S790C2", ABISELECT(120,68));

#else // __cplusplus

extern void _ZN6S790C2C1Ev();
extern void _ZN6S790C2D1Ev();
Name_Map name_map_S790C2[] = {
  NSPAIR(_ZN6S790C2C1Ev),
  NSPAIR(_ZN6S790C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S790C4;
extern VTBL_ENTRY _ZTI6S790C4[];
extern  VTBL_ENTRY _ZTV6S790C4[];
extern Class_Descriptor cd_S790C3;
extern VTBL_ENTRY _ZTI6S790C3[];
extern  VTBL_ENTRY _ZTV6S790C3[];
extern Class_Descriptor cd_S790C13;
extern VTBL_ENTRY _ZTI7S790C13[];
extern  VTBL_ENTRY _ZTV7S790C13[];
static Base_Class bases_S790C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S790C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S790C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S790C13,    ABISELECT(88,52), //bcp->offset
    33, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S790C2[];
extern void _ZN6S790C2D1Ev();
extern void _ZN6S790C2D0Ev();
extern void _ZN6S790C42v2Ev();
extern void _ZN6S790C42v3Ev();
extern void _ZN6S790C42v4Ev();
extern void _ZN6S790C42v5Ev();
extern void _ZN6S790C42v6Ev();
extern void _ZN6S790C42v7Ev();
extern void _ZN6S790C42v8Ev();
extern void _ZN6S790C32v9Ev();
extern void _ZN6S790C33v10Ev();
extern void _ZN6S790C33v11Ev();
extern void _ZN6S790C33v12Ev();
extern void _ZN6S790C33v13Ev();
extern void _ZN6S790C33v14Ev();
extern void _ZN6S790C33v15Ev();
extern void _ZN6S790C33v16Ev();
extern void _ZN6S790C33v17Ev();
extern void _ZN6S790C33v18Ev();
extern void _ZN6S790C23v22Ev();
extern void _ZN6S790C23v23Ev();
extern void _ZN6S790C23v24Ev();
extern void _ZN6S790C23v25Ev();
extern void _ZN6S790C23v26Ev();
extern void _ZN6S790C23v27Ev();
extern void _ZN6S790C23v28Ev();
extern void _ZN6S790C23v29Ev();
extern void _ZN6S790C23v30Ev();
extern void _ZN6S790C23v31Ev();
extern void _ZN6S790C23v32Ev();
extern void _ZN6S790C23v33Ev();
extern void ABISELECT(_ZThn88_N6S790C2D1Ev,_ZThn52_N6S790C2D1Ev)();
extern void ABISELECT(_ZThn88_N6S790C2D0Ev,_ZThn52_N6S790C2D0Ev)();
extern void _ZN7S790C133v19Ev();
extern void _ZN7S790C133v20Ev();
extern void _ZN7S790C133v21Ev();
static  VTBL_ENTRY vtc_S790C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S790C2[0]),
  (VTBL_ENTRY)&_ZN6S790C2D1Ev,
  (VTBL_ENTRY)&_ZN6S790C2D0Ev,
  (VTBL_ENTRY)&_ZN6S790C42v2Ev,
  (VTBL_ENTRY)&_ZN6S790C42v3Ev,
  (VTBL_ENTRY)&_ZN6S790C42v4Ev,
  (VTBL_ENTRY)&_ZN6S790C42v5Ev,
  (VTBL_ENTRY)&_ZN6S790C42v6Ev,
  (VTBL_ENTRY)&_ZN6S790C42v7Ev,
  (VTBL_ENTRY)&_ZN6S790C42v8Ev,
  (VTBL_ENTRY)&_ZN6S790C32v9Ev,
  (VTBL_ENTRY)&_ZN6S790C33v10Ev,
  (VTBL_ENTRY)&_ZN6S790C33v11Ev,
  (VTBL_ENTRY)&_ZN6S790C33v12Ev,
  (VTBL_ENTRY)&_ZN6S790C33v13Ev,
  (VTBL_ENTRY)&_ZN6S790C33v14Ev,
  (VTBL_ENTRY)&_ZN6S790C33v15Ev,
  (VTBL_ENTRY)&_ZN6S790C33v16Ev,
  (VTBL_ENTRY)&_ZN6S790C33v17Ev,
  (VTBL_ENTRY)&_ZN6S790C33v18Ev,
  (VTBL_ENTRY)&_ZN6S790C23v22Ev,
  (VTBL_ENTRY)&_ZN6S790C23v23Ev,
  (VTBL_ENTRY)&_ZN6S790C23v24Ev,
  (VTBL_ENTRY)&_ZN6S790C23v25Ev,
  (VTBL_ENTRY)&_ZN6S790C23v26Ev,
  (VTBL_ENTRY)&_ZN6S790C23v27Ev,
  (VTBL_ENTRY)&_ZN6S790C23v28Ev,
  (VTBL_ENTRY)&_ZN6S790C23v29Ev,
  (VTBL_ENTRY)&_ZN6S790C23v30Ev,
  (VTBL_ENTRY)&_ZN6S790C23v31Ev,
  (VTBL_ENTRY)&_ZN6S790C23v32Ev,
  (VTBL_ENTRY)&_ZN6S790C23v33Ev,
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI6S790C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N6S790C2D1Ev,_ZThn52_N6S790C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N6S790C2D0Ev,_ZThn52_N6S790C2D0Ev),
  (VTBL_ENTRY)&_ZN7S790C133v19Ev,
  (VTBL_ENTRY)&_ZN7S790C133v20Ev,
  (VTBL_ENTRY)&_ZN7S790C133v21Ev,
};
extern VTBL_ENTRY _ZTI6S790C2[];
extern  VTBL_ENTRY _ZTV6S790C2[];
Class_Descriptor cd_S790C2 = {  "S790C2", // class name
  bases_S790C2, 4,
  &(vtc_S790C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,68), // object size
  NSPAIRA(_ZTI6S790C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S790C2),40, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S790C1  : S790C2 {
  virtual void  v1(); // _ZN6S790C12v1Ev
  ~S790C1(); // tgen
  S790C1(); // tgen
};
//SIG(1 S790C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v2 v3 v4 v5 v6 v7 v8 Fp[2]} vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fi[2] FC6{ BC7{ vd v35} v34 Fp} FC8{ BC9{ vd v37} v36 Fp} FC10{ m Fp} FC11{ m Fp} Fc FC12{ m Fi}} BC13{ vd v19 v20 v21} vd v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 Fp[3]} v1}


void  S790C1 ::v1(){vfunc_called(this, "_ZN6S790C12v1Ev");}
S790C1 ::~S790C1(){ note_dtor("S790C1", this);} // tgen
S790C1 ::S790C1(){ note_ctor("S790C1", this);} // tgen

static void Test_S790C1()
{
  extern Class_Descriptor cd_S790C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,18)];
    init_test(&cd_S790C1, buf);
    S790C1 *dp, &lv = *(dp=new (buf) S790C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,68), "sizeof(S790C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S790C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S790C4*)(S790C3*)(S790C2*), 0, "S790C1");
    check_base_class_offset(lv, (S790C4*)(S790C3*)(S790C2*), 0, "S790C1");
    check_base_class_offset(lv, (S790C3*)(S790C2*), 0, "S790C1");
    check_base_class_offset(lv, (S790C13*)(S790C2*), ABISELECT(88,52), "S790C1");
    check_base_class_offset(lv, (S790C2*), 0, "S790C1");
    test_class_info(&lv, &cd_S790C1);
    dp->~S790C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS790C1(Test_S790C1, "S790C1", ABISELECT(120,68));

#else // __cplusplus

extern void _ZN6S790C1C1Ev();
extern void _ZN6S790C1D1Ev();
Name_Map name_map_S790C1[] = {
  NSPAIR(_ZN6S790C1C1Ev),
  NSPAIR(_ZN6S790C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S790C4;
extern VTBL_ENTRY _ZTI6S790C4[];
extern  VTBL_ENTRY _ZTV6S790C4[];
extern Class_Descriptor cd_S790C3;
extern VTBL_ENTRY _ZTI6S790C3[];
extern  VTBL_ENTRY _ZTV6S790C3[];
extern Class_Descriptor cd_S790C13;
extern VTBL_ENTRY _ZTI7S790C13[];
extern  VTBL_ENTRY _ZTV7S790C13[];
extern Class_Descriptor cd_S790C2;
extern VTBL_ENTRY _ZTI6S790C2[];
extern  VTBL_ENTRY _ZTV6S790C2[];
static Base_Class bases_S790C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S790C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S790C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S790C13,    ABISELECT(88,52), //bcp->offset
    34, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S790C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S790C1[];
extern void _ZN6S790C1D1Ev();
extern void _ZN6S790C1D0Ev();
extern void _ZN6S790C42v2Ev();
extern void _ZN6S790C42v3Ev();
extern void _ZN6S790C42v4Ev();
extern void _ZN6S790C42v5Ev();
extern void _ZN6S790C42v6Ev();
extern void _ZN6S790C42v7Ev();
extern void _ZN6S790C42v8Ev();
extern void _ZN6S790C32v9Ev();
extern void _ZN6S790C33v10Ev();
extern void _ZN6S790C33v11Ev();
extern void _ZN6S790C33v12Ev();
extern void _ZN6S790C33v13Ev();
extern void _ZN6S790C33v14Ev();
extern void _ZN6S790C33v15Ev();
extern void _ZN6S790C33v16Ev();
extern void _ZN6S790C33v17Ev();
extern void _ZN6S790C33v18Ev();
extern void _ZN6S790C23v22Ev();
extern void _ZN6S790C23v23Ev();
extern void _ZN6S790C23v24Ev();
extern void _ZN6S790C23v25Ev();
extern void _ZN6S790C23v26Ev();
extern void _ZN6S790C23v27Ev();
extern void _ZN6S790C23v28Ev();
extern void _ZN6S790C23v29Ev();
extern void _ZN6S790C23v30Ev();
extern void _ZN6S790C23v31Ev();
extern void _ZN6S790C23v32Ev();
extern void _ZN6S790C23v33Ev();
extern void _ZN6S790C12v1Ev();
extern void ABISELECT(_ZThn88_N6S790C1D1Ev,_ZThn52_N6S790C1D1Ev)();
extern void ABISELECT(_ZThn88_N6S790C1D0Ev,_ZThn52_N6S790C1D0Ev)();
extern void _ZN7S790C133v19Ev();
extern void _ZN7S790C133v20Ev();
extern void _ZN7S790C133v21Ev();
static  VTBL_ENTRY vtc_S790C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S790C1[0]),
  (VTBL_ENTRY)&_ZN6S790C1D1Ev,
  (VTBL_ENTRY)&_ZN6S790C1D0Ev,
  (VTBL_ENTRY)&_ZN6S790C42v2Ev,
  (VTBL_ENTRY)&_ZN6S790C42v3Ev,
  (VTBL_ENTRY)&_ZN6S790C42v4Ev,
  (VTBL_ENTRY)&_ZN6S790C42v5Ev,
  (VTBL_ENTRY)&_ZN6S790C42v6Ev,
  (VTBL_ENTRY)&_ZN6S790C42v7Ev,
  (VTBL_ENTRY)&_ZN6S790C42v8Ev,
  (VTBL_ENTRY)&_ZN6S790C32v9Ev,
  (VTBL_ENTRY)&_ZN6S790C33v10Ev,
  (VTBL_ENTRY)&_ZN6S790C33v11Ev,
  (VTBL_ENTRY)&_ZN6S790C33v12Ev,
  (VTBL_ENTRY)&_ZN6S790C33v13Ev,
  (VTBL_ENTRY)&_ZN6S790C33v14Ev,
  (VTBL_ENTRY)&_ZN6S790C33v15Ev,
  (VTBL_ENTRY)&_ZN6S790C33v16Ev,
  (VTBL_ENTRY)&_ZN6S790C33v17Ev,
  (VTBL_ENTRY)&_ZN6S790C33v18Ev,
  (VTBL_ENTRY)&_ZN6S790C23v22Ev,
  (VTBL_ENTRY)&_ZN6S790C23v23Ev,
  (VTBL_ENTRY)&_ZN6S790C23v24Ev,
  (VTBL_ENTRY)&_ZN6S790C23v25Ev,
  (VTBL_ENTRY)&_ZN6S790C23v26Ev,
  (VTBL_ENTRY)&_ZN6S790C23v27Ev,
  (VTBL_ENTRY)&_ZN6S790C23v28Ev,
  (VTBL_ENTRY)&_ZN6S790C23v29Ev,
  (VTBL_ENTRY)&_ZN6S790C23v30Ev,
  (VTBL_ENTRY)&_ZN6S790C23v31Ev,
  (VTBL_ENTRY)&_ZN6S790C23v32Ev,
  (VTBL_ENTRY)&_ZN6S790C23v33Ev,
  (VTBL_ENTRY)&_ZN6S790C12v1Ev,
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI6S790C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N6S790C1D1Ev,_ZThn52_N6S790C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N6S790C1D0Ev,_ZThn52_N6S790C1D0Ev),
  (VTBL_ENTRY)&_ZN7S790C133v19Ev,
  (VTBL_ENTRY)&_ZN7S790C133v20Ev,
  (VTBL_ENTRY)&_ZN7S790C133v21Ev,
};
extern VTBL_ENTRY _ZTI6S790C1[];
extern  VTBL_ENTRY _ZTV6S790C1[];
Class_Descriptor cd_S790C1 = {  "S790C1", // class name
  bases_S790C1, 5,
  &(vtc_S790C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,68), // object size
  NSPAIRA(_ZTI6S790C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S790C1),41, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1856C3  : S1850C4_nt {
  void *s1856c3f0[2];
  virtual  ~S1856C3(); // _ZN7S1856C3D1Ev
  virtual void  v5(); // _ZN7S1856C32v5Ev
  virtual void  v6(); // _ZN7S1856C32v6Ev
  virtual void  v7(); // _ZN7S1856C32v7Ev
  virtual void  v8(); // _ZN7S1856C32v8Ev
  virtual void  v9(); // _ZN7S1856C32v9Ev
  virtual void  v10(); // _ZN7S1856C33v10Ev
  virtual void  v11(); // _ZN7S1856C33v11Ev
  S1856C3(); // tgen
};
//SIG(-1 S1856C3) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S1856C3 ::~S1856C3(){ note_dtor("S1856C3", this);}
void  S1856C3 ::v5(){vfunc_called(this, "_ZN7S1856C32v5Ev");}
void  S1856C3 ::v6(){vfunc_called(this, "_ZN7S1856C32v6Ev");}
void  S1856C3 ::v7(){vfunc_called(this, "_ZN7S1856C32v7Ev");}
void  S1856C3 ::v8(){vfunc_called(this, "_ZN7S1856C32v8Ev");}
void  S1856C3 ::v9(){vfunc_called(this, "_ZN7S1856C32v9Ev");}
void  S1856C3 ::v10(){vfunc_called(this, "_ZN7S1856C33v10Ev");}
void  S1856C3 ::v11(){vfunc_called(this, "_ZN7S1856C33v11Ev");}
S1856C3 ::S1856C3(){ note_ctor("S1856C3", this);} // tgen

static void Test_S1856C3()
{
  extern Class_Descriptor cd_S1856C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1856C3, buf);
    S1856C3 *dp, &lv = *(dp=new (buf) S1856C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1856C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1856C3)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S1856C3");
    check_field_offset(lv, s1856c3f0, ABISELECT(8,4), "S1856C3.s1856c3f0");
    test_class_info(&lv, &cd_S1856C3);
    dp->~S1856C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1856C3(Test_S1856C3, "S1856C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1856C3C1Ev();
extern void _ZN7S1856C3D1Ev();
Name_Map name_map_S1856C3[] = {
  NSPAIR(_ZN7S1856C3C1Ev),
  NSPAIR(_ZN7S1856C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S1856C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1856C3[];
extern void _ZN7S1856C3D1Ev();
extern void _ZN7S1856C3D0Ev();
extern void _ZN7S1856C32v5Ev();
extern void _ZN7S1856C32v6Ev();
extern void _ZN7S1856C32v7Ev();
extern void _ZN7S1856C32v8Ev();
extern void _ZN7S1856C32v9Ev();
extern void _ZN7S1856C33v10Ev();
extern void _ZN7S1856C33v11Ev();
static  VTBL_ENTRY vtc_S1856C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1856C3[0]),
  (VTBL_ENTRY)&_ZN7S1856C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1856C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1856C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1856C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1856C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1856C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1856C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1856C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1856C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S1856C3[];
extern  VTBL_ENTRY _ZTV7S1856C3[];
Class_Descriptor cd_S1856C3 = {  "S1856C3", // class name
  bases_S1856C3, 1,
  &(vtc_S1856C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1856C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1856C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1856C2  : S1856C3 {
  int s1856c2f0[2];
  ::S1865C7 s1856c2f1;
  ::S1850C5_nt s1856c2f2;
  ::S3593C21_nt s1856c2f3;
  ::S1865C15 s1856c2f4;
  char s1856c2f5;
  ::S16113C2_nt s1856c2f6;
  virtual  ~S1856C2(); // _ZN7S1856C2D1Ev
  virtual void  v12(); // _ZN7S1856C23v12Ev
  virtual void  v13(); // _ZN7S1856C23v13Ev
  virtual void  v14(); // _ZN7S1856C23v14Ev
  virtual void  v15(); // _ZN7S1856C23v15Ev
  virtual void  v16(); // _ZN7S1856C23v16Ev
  virtual void  v17(); // _ZN7S1856C23v17Ev
  virtual void  v18(); // _ZN7S1856C23v18Ev
  virtual void  v19(); // _ZN7S1856C23v19Ev
  virtual void  v20(); // _ZN7S1856C23v20Ev
  virtual void  v21(); // _ZN7S1856C23v21Ev
  S1856C2(); // tgen
};
//SIG(-1 S1856C2) C1{ BC2{ BC3{ vd m} vd v11 v12 v13 v14 v15 v16 v17 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] FC4{ BC5{ vd v19} v18 Fp} FC6{ BC7{ vd v21} v20 Fp} FC8{ m Fp} FC9{ m Fp} Fc FC10{ m Fi}}


 S1856C2 ::~S1856C2(){ note_dtor("S1856C2", this);}
void  S1856C2 ::v12(){vfunc_called(this, "_ZN7S1856C23v12Ev");}
void  S1856C2 ::v13(){vfunc_called(this, "_ZN7S1856C23v13Ev");}
void  S1856C2 ::v14(){vfunc_called(this, "_ZN7S1856C23v14Ev");}
void  S1856C2 ::v15(){vfunc_called(this, "_ZN7S1856C23v15Ev");}
void  S1856C2 ::v16(){vfunc_called(this, "_ZN7S1856C23v16Ev");}
void  S1856C2 ::v17(){vfunc_called(this, "_ZN7S1856C23v17Ev");}
void  S1856C2 ::v18(){vfunc_called(this, "_ZN7S1856C23v18Ev");}
void  S1856C2 ::v19(){vfunc_called(this, "_ZN7S1856C23v19Ev");}
void  S1856C2 ::v20(){vfunc_called(this, "_ZN7S1856C23v20Ev");}
void  S1856C2 ::v21(){vfunc_called(this, "_ZN7S1856C23v21Ev");}
S1856C2 ::S1856C2(){ note_ctor("S1856C2", this);} // tgen

static void Test_S1856C2()
{
  extern Class_Descriptor cd_S1856C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S1856C2, buf);
    S1856C2 *dp, &lv = *(dp=new (buf) S1856C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S1856C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1856C2)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1856C3*), 0, "S1856C2");
    check_base_class_offset(lv, (S1856C3*), 0, "S1856C2");
    check_field_offset(lv, s1856c2f0, ABISELECT(24,12), "S1856C2.s1856c2f0");
    check_field_offset(lv, s1856c2f1, ABISELECT(32,20), "S1856C2.s1856c2f1");
    check_field_offset(lv, s1856c2f2, ABISELECT(48,28), "S1856C2.s1856c2f2");
    check_field_offset(lv, s1856c2f3, ABISELECT(64,36), "S1856C2.s1856c2f3");
    check_field_offset(lv, s1856c2f4, ABISELECT(72,40), "S1856C2.s1856c2f4");
    check_field_offset(lv, s1856c2f5, ABISELECT(80,44), "S1856C2.s1856c2f5");
    check_field_offset(lv, s1856c2f6, ABISELECT(84,48), "S1856C2.s1856c2f6");
    test_class_info(&lv, &cd_S1856C2);
    dp->~S1856C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1856C2(Test_S1856C2, "S1856C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S1856C2C1Ev();
extern void _ZN7S1856C2D1Ev();
Name_Map name_map_S1856C2[] = {
  NSPAIR(_ZN7S1856C2C1Ev),
  NSPAIR(_ZN7S1856C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1856C3;
extern VTBL_ENTRY _ZTI7S1856C3[];
extern  VTBL_ENTRY _ZTV7S1856C3[];
static Base_Class bases_S1856C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1856C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1856C2[];
extern void _ZN7S1856C2D1Ev();
extern void _ZN7S1856C2D0Ev();
extern void _ZN7S1856C32v5Ev();
extern void _ZN7S1856C32v6Ev();
extern void _ZN7S1856C32v7Ev();
extern void _ZN7S1856C32v8Ev();
extern void _ZN7S1856C32v9Ev();
extern void _ZN7S1856C33v10Ev();
extern void _ZN7S1856C33v11Ev();
extern void _ZN7S1856C23v12Ev();
extern void _ZN7S1856C23v13Ev();
extern void _ZN7S1856C23v14Ev();
extern void _ZN7S1856C23v15Ev();
extern void _ZN7S1856C23v16Ev();
extern void _ZN7S1856C23v17Ev();
extern void _ZN7S1856C23v18Ev();
extern void _ZN7S1856C23v19Ev();
extern void _ZN7S1856C23v20Ev();
extern void _ZN7S1856C23v21Ev();
static  VTBL_ENTRY vtc_S1856C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1856C2[0]),
  (VTBL_ENTRY)&_ZN7S1856C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1856C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1856C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1856C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1856C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1856C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1856C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1856C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1856C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v21Ev,
};
extern VTBL_ENTRY _ZTI7S1856C2[];
extern  VTBL_ENTRY _ZTV7S1856C2[];
Class_Descriptor cd_S1856C2 = {  "S1856C2", // class name
  bases_S1856C2, 2,
  &(vtc_S1856C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S1856C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1856C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1856C13_nt  {
  void *s1856c13f0;
  void  mf1856c13(); // _ZN11S1856C13_nt9mf1856c13Ev
};
//SIG(-1 S1856C13_nt) C1{ m Fp}


void  S1856C13_nt ::mf1856c13(){}

//skip512 S1856C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1856C14_nt  {
  ::S2440C26 s1856c14f0;
  void  mf1856c14(); // _ZN11S1856C14_nt9mf1856c14Ev
};
//SIG(-1 S1856C14_nt) C1{ m FC2{ m Fp Fi FC3{ m} FC4{ m}}}


void  S1856C14_nt ::mf1856c14(){}

//skip512 S1856C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1856C1  : S1856C2 {
  int s1856c1f0;
  void *s1856c1f1[2];
  ::S1850C10_nt s1856c1f2;
  ::S1856C13_nt s1856c1f3;
  ::S1856C14_nt s1856c1f4;
  virtual  ~S1856C1(); // _ZN7S1856C1D1Ev
  virtual void  v1(); // _ZN7S1856C12v1Ev
  virtual void  v2(); // _ZN7S1856C12v2Ev
  virtual void  v3(); // _ZN7S1856C12v3Ev
  virtual void  v4(); // _ZN7S1856C12v4Ev
  S1856C1(); // tgen
};
//SIG(1 S1856C1) C1{ BC2{ BC3{ BC4{ vd m} vd v5 v6 v7 v8 v9 v10 v11 Fp[2]} vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fi[2] FC5{ BC6{ vd v23} v22 Fp} FC7{ BC8{ vd v25} v24 Fp} FC9{ m Fp} FC10{ m Fp} Fc FC11{ m Fi}} vd v1 v2 v3 v4 Fi Fp[2] FC12{ m Fp} FC13{ m Fp} FC14{ m FC15{ m Fp Fi FC16{ m} FC17{ m}}}}


 S1856C1 ::~S1856C1(){ note_dtor("S1856C1", this);}
void  S1856C1 ::v1(){vfunc_called(this, "_ZN7S1856C12v1Ev");}
void  S1856C1 ::v2(){vfunc_called(this, "_ZN7S1856C12v2Ev");}
void  S1856C1 ::v3(){vfunc_called(this, "_ZN7S1856C12v3Ev");}
void  S1856C1 ::v4(){vfunc_called(this, "_ZN7S1856C12v4Ev");}
S1856C1 ::S1856C1(){ note_ctor("S1856C1", this);} // tgen

static void Test_S1856C1()
{
  extern Class_Descriptor cd_S1856C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,22)];
    init_test(&cd_S1856C1, buf);
    S1856C1 *dp, &lv = *(dp=new (buf) S1856C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,84), "sizeof(S1856C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1856C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1856C3*)(S1856C2*), 0, "S1856C1");
    check_base_class_offset(lv, (S1856C3*)(S1856C2*), 0, "S1856C1");
    check_base_class_offset(lv, (S1856C2*), 0, "S1856C1");
    check_field_offset(lv, s1856c1f0, ABISELECT(88,52), "S1856C1.s1856c1f0");
    check_field_offset(lv, s1856c1f1, ABISELECT(96,56), "S1856C1.s1856c1f1");
    check_field_offset(lv, s1856c1f2, ABISELECT(112,64), "S1856C1.s1856c1f2");
    check_field_offset(lv, s1856c1f3, ABISELECT(120,68), "S1856C1.s1856c1f3");
    check_field_offset(lv, s1856c1f4, ABISELECT(128,72), "S1856C1.s1856c1f4");
    test_class_info(&lv, &cd_S1856C1);
    dp->~S1856C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1856C1(Test_S1856C1, "S1856C1", ABISELECT(144,84));

#else // __cplusplus

extern void _ZN7S1856C1C1Ev();
extern void _ZN7S1856C1D1Ev();
Name_Map name_map_S1856C1[] = {
  NSPAIR(_ZN7S1856C1C1Ev),
  NSPAIR(_ZN7S1856C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1856C3;
extern VTBL_ENTRY _ZTI7S1856C3[];
extern  VTBL_ENTRY _ZTV7S1856C3[];
extern Class_Descriptor cd_S1856C2;
extern VTBL_ENTRY _ZTI7S1856C2[];
extern  VTBL_ENTRY _ZTV7S1856C2[];
static Base_Class bases_S1856C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1856C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1856C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1856C1[];
extern void _ZN7S1856C1D1Ev();
extern void _ZN7S1856C1D0Ev();
extern void _ZN7S1856C32v5Ev();
extern void _ZN7S1856C32v6Ev();
extern void _ZN7S1856C32v7Ev();
extern void _ZN7S1856C32v8Ev();
extern void _ZN7S1856C32v9Ev();
extern void _ZN7S1856C33v10Ev();
extern void _ZN7S1856C33v11Ev();
extern void _ZN7S1856C23v12Ev();
extern void _ZN7S1856C23v13Ev();
extern void _ZN7S1856C23v14Ev();
extern void _ZN7S1856C23v15Ev();
extern void _ZN7S1856C23v16Ev();
extern void _ZN7S1856C23v17Ev();
extern void _ZN7S1856C23v18Ev();
extern void _ZN7S1856C23v19Ev();
extern void _ZN7S1856C23v20Ev();
extern void _ZN7S1856C23v21Ev();
extern void _ZN7S1856C12v1Ev();
extern void _ZN7S1856C12v2Ev();
extern void _ZN7S1856C12v3Ev();
extern void _ZN7S1856C12v4Ev();
static  VTBL_ENTRY vtc_S1856C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1856C1[0]),
  (VTBL_ENTRY)&_ZN7S1856C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1856C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1856C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1856C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1856C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1856C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1856C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1856C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1856C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1856C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1856C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1856C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1856C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1856C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1856C1[];
extern  VTBL_ENTRY _ZTV7S1856C1[];
Class_Descriptor cd_S1856C1 = {  "S1856C1", // class name
  bases_S1856C1, 3,
  &(vtc_S1856C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,84), // object size
  NSPAIRA(_ZTI7S1856C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1856C1),25, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1861C3  : S1850C4_nt {
  void *s1861c3f0[2];
  virtual  ~S1861C3(); // _ZN7S1861C3D1Ev
  virtual void  v6(); // _ZN7S1861C32v6Ev
  virtual void  v7(); // _ZN7S1861C32v7Ev
  virtual void  v8(); // _ZN7S1861C32v8Ev
  virtual void  v9(); // _ZN7S1861C32v9Ev
  virtual void  v10(); // _ZN7S1861C33v10Ev
  virtual void  v11(); // _ZN7S1861C33v11Ev
  virtual void  v12(); // _ZN7S1861C33v12Ev
  S1861C3(); // tgen
};
//SIG(-1 S1861C3) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S1861C3 ::~S1861C3(){ note_dtor("S1861C3", this);}
void  S1861C3 ::v6(){vfunc_called(this, "_ZN7S1861C32v6Ev");}
void  S1861C3 ::v7(){vfunc_called(this, "_ZN7S1861C32v7Ev");}
void  S1861C3 ::v8(){vfunc_called(this, "_ZN7S1861C32v8Ev");}
void  S1861C3 ::v9(){vfunc_called(this, "_ZN7S1861C32v9Ev");}
void  S1861C3 ::v10(){vfunc_called(this, "_ZN7S1861C33v10Ev");}
void  S1861C3 ::v11(){vfunc_called(this, "_ZN7S1861C33v11Ev");}
void  S1861C3 ::v12(){vfunc_called(this, "_ZN7S1861C33v12Ev");}
S1861C3 ::S1861C3(){ note_ctor("S1861C3", this);} // tgen

static void Test_S1861C3()
{
  extern Class_Descriptor cd_S1861C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1861C3, buf);
    S1861C3 *dp, &lv = *(dp=new (buf) S1861C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1861C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1861C3)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S1861C3");
    check_field_offset(lv, s1861c3f0, ABISELECT(8,4), "S1861C3.s1861c3f0");
    test_class_info(&lv, &cd_S1861C3);
    dp->~S1861C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1861C3(Test_S1861C3, "S1861C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1861C3C1Ev();
extern void _ZN7S1861C3D1Ev();
Name_Map name_map_S1861C3[] = {
  NSPAIR(_ZN7S1861C3C1Ev),
  NSPAIR(_ZN7S1861C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S1861C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1861C3[];
extern void _ZN7S1861C3D1Ev();
extern void _ZN7S1861C3D0Ev();
extern void _ZN7S1861C32v6Ev();
extern void _ZN7S1861C32v7Ev();
extern void _ZN7S1861C32v8Ev();
extern void _ZN7S1861C32v9Ev();
extern void _ZN7S1861C33v10Ev();
extern void _ZN7S1861C33v11Ev();
extern void _ZN7S1861C33v12Ev();
static  VTBL_ENTRY vtc_S1861C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1861C3[0]),
  (VTBL_ENTRY)&_ZN7S1861C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1861C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1861C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1861C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1861C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1861C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1861C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1861C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1861C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S1861C3[];
extern  VTBL_ENTRY _ZTV7S1861C3[];
Class_Descriptor cd_S1861C3 = {  "S1861C3", // class name
  bases_S1861C3, 1,
  &(vtc_S1861C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1861C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1861C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1861C2  : S1861C3 {
  int s1861c2f0[2];
  ::S1865C7 s1861c2f1;
  ::S1850C5_nt s1861c2f2;
  ::S3593C21_nt s1861c2f3;
  ::S1865C15 s1861c2f4;
  char s1861c2f5;
  ::S16113C2_nt s1861c2f6;
  virtual  ~S1861C2(); // _ZN7S1861C2D1Ev
  virtual void  v13(); // _ZN7S1861C23v13Ev
  virtual void  v14(); // _ZN7S1861C23v14Ev
  virtual void  v15(); // _ZN7S1861C23v15Ev
  virtual void  v16(); // _ZN7S1861C23v16Ev
  virtual void  v17(); // _ZN7S1861C23v17Ev
  virtual void  v18(); // _ZN7S1861C23v18Ev
  virtual void  v19(); // _ZN7S1861C23v19Ev
  virtual void  v20(); // _ZN7S1861C23v20Ev
  virtual void  v21(); // _ZN7S1861C23v21Ev
  virtual void  v22(); // _ZN7S1861C23v22Ev
  S1861C2(); // tgen
};
//SIG(-1 S1861C2) C1{ BC2{ BC3{ vd m} vd v11 v12 v13 v14 v15 v16 v17 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] FC4{ BC5{ vd v19} v18 Fp} FC6{ BC7{ vd v21} v20 Fp} FC8{ m Fp} FC9{ m Fp} Fc FC10{ m Fi}}


 S1861C2 ::~S1861C2(){ note_dtor("S1861C2", this);}
void  S1861C2 ::v13(){vfunc_called(this, "_ZN7S1861C23v13Ev");}
void  S1861C2 ::v14(){vfunc_called(this, "_ZN7S1861C23v14Ev");}
void  S1861C2 ::v15(){vfunc_called(this, "_ZN7S1861C23v15Ev");}
void  S1861C2 ::v16(){vfunc_called(this, "_ZN7S1861C23v16Ev");}
void  S1861C2 ::v17(){vfunc_called(this, "_ZN7S1861C23v17Ev");}
void  S1861C2 ::v18(){vfunc_called(this, "_ZN7S1861C23v18Ev");}
void  S1861C2 ::v19(){vfunc_called(this, "_ZN7S1861C23v19Ev");}
void  S1861C2 ::v20(){vfunc_called(this, "_ZN7S1861C23v20Ev");}
void  S1861C2 ::v21(){vfunc_called(this, "_ZN7S1861C23v21Ev");}
void  S1861C2 ::v22(){vfunc_called(this, "_ZN7S1861C23v22Ev");}
S1861C2 ::S1861C2(){ note_ctor("S1861C2", this);} // tgen

static void Test_S1861C2()
{
  extern Class_Descriptor cd_S1861C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S1861C2, buf);
    S1861C2 *dp, &lv = *(dp=new (buf) S1861C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S1861C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1861C2)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1861C3*), 0, "S1861C2");
    check_base_class_offset(lv, (S1861C3*), 0, "S1861C2");
    check_field_offset(lv, s1861c2f0, ABISELECT(24,12), "S1861C2.s1861c2f0");
    check_field_offset(lv, s1861c2f1, ABISELECT(32,20), "S1861C2.s1861c2f1");
    check_field_offset(lv, s1861c2f2, ABISELECT(48,28), "S1861C2.s1861c2f2");
    check_field_offset(lv, s1861c2f3, ABISELECT(64,36), "S1861C2.s1861c2f3");
    check_field_offset(lv, s1861c2f4, ABISELECT(72,40), "S1861C2.s1861c2f4");
    check_field_offset(lv, s1861c2f5, ABISELECT(80,44), "S1861C2.s1861c2f5");
    check_field_offset(lv, s1861c2f6, ABISELECT(84,48), "S1861C2.s1861c2f6");
    test_class_info(&lv, &cd_S1861C2);
    dp->~S1861C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1861C2(Test_S1861C2, "S1861C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S1861C2C1Ev();
extern void _ZN7S1861C2D1Ev();
Name_Map name_map_S1861C2[] = {
  NSPAIR(_ZN7S1861C2C1Ev),
  NSPAIR(_ZN7S1861C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1861C3;
extern VTBL_ENTRY _ZTI7S1861C3[];
extern  VTBL_ENTRY _ZTV7S1861C3[];
static Base_Class bases_S1861C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1861C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1861C2[];
extern void _ZN7S1861C2D1Ev();
extern void _ZN7S1861C2D0Ev();
extern void _ZN7S1861C32v6Ev();
extern void _ZN7S1861C32v7Ev();
extern void _ZN7S1861C32v8Ev();
extern void _ZN7S1861C32v9Ev();
extern void _ZN7S1861C33v10Ev();
extern void _ZN7S1861C33v11Ev();
extern void _ZN7S1861C33v12Ev();
extern void _ZN7S1861C23v13Ev();
extern void _ZN7S1861C23v14Ev();
extern void _ZN7S1861C23v15Ev();
extern void _ZN7S1861C23v16Ev();
extern void _ZN7S1861C23v17Ev();
extern void _ZN7S1861C23v18Ev();
extern void _ZN7S1861C23v19Ev();
extern void _ZN7S1861C23v20Ev();
extern void _ZN7S1861C23v21Ev();
extern void _ZN7S1861C23v22Ev();
static  VTBL_ENTRY vtc_S1861C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1861C2[0]),
  (VTBL_ENTRY)&_ZN7S1861C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1861C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1861C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1861C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1861C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1861C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1861C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1861C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1861C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v22Ev,
};
extern VTBL_ENTRY _ZTI7S1861C2[];
extern  VTBL_ENTRY _ZTV7S1861C2[];
Class_Descriptor cd_S1861C2 = {  "S1861C2", // class name
  bases_S1861C2, 2,
  &(vtc_S1861C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S1861C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1861C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1861C1  : S1861C2 {
  ::S1856C13_nt s1861c1f0;
  ::S1856C14_nt s1861c1f1;
  virtual  ~S1861C1(); // _ZN7S1861C1D1Ev
  virtual void  v1(); // _ZN7S1861C12v1Ev
  virtual void  v2(); // _ZN7S1861C12v2Ev
  virtual void  v3(); // _ZN7S1861C12v3Ev
  virtual void  v4(); // _ZN7S1861C12v4Ev
  virtual void  v5(); // _ZN7S1861C12v5Ev
  S1861C1(); // tgen
};
//SIG(1 S1861C1) C1{ BC2{ BC3{ BC4{ vd m} vd v6 v7 v8 v9 v10 v11 v12 Fp[2]} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] FC5{ BC6{ vd v24} v23 Fp} FC7{ BC8{ vd v26} v25 Fp} FC9{ m Fp} FC10{ m Fp} Fc FC11{ m Fi}} vd v1 v2 v3 v4 v5 FC12{ m Fp} FC13{ m FC14{ m Fp Fi FC15{ m} FC16{ m}}}}


 S1861C1 ::~S1861C1(){ note_dtor("S1861C1", this);}
void  S1861C1 ::v1(){vfunc_called(this, "_ZN7S1861C12v1Ev");}
void  S1861C1 ::v2(){vfunc_called(this, "_ZN7S1861C12v2Ev");}
void  S1861C1 ::v3(){vfunc_called(this, "_ZN7S1861C12v3Ev");}
void  S1861C1 ::v4(){vfunc_called(this, "_ZN7S1861C12v4Ev");}
void  S1861C1 ::v5(){vfunc_called(this, "_ZN7S1861C12v5Ev");}
S1861C1 ::S1861C1(){ note_ctor("S1861C1", this);} // tgen

static void Test_S1861C1()
{
  extern Class_Descriptor cd_S1861C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,18)];
    init_test(&cd_S1861C1, buf);
    S1861C1 *dp, &lv = *(dp=new (buf) S1861C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,68), "sizeof(S1861C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1861C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1861C3*)(S1861C2*), 0, "S1861C1");
    check_base_class_offset(lv, (S1861C3*)(S1861C2*), 0, "S1861C1");
    check_base_class_offset(lv, (S1861C2*), 0, "S1861C1");
    check_field_offset(lv, s1861c1f0, ABISELECT(88,52), "S1861C1.s1861c1f0");
    check_field_offset(lv, s1861c1f1, ABISELECT(96,56), "S1861C1.s1861c1f1");
    test_class_info(&lv, &cd_S1861C1);
    dp->~S1861C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1861C1(Test_S1861C1, "S1861C1", ABISELECT(112,68));

#else // __cplusplus

extern void _ZN7S1861C1C1Ev();
extern void _ZN7S1861C1D1Ev();
Name_Map name_map_S1861C1[] = {
  NSPAIR(_ZN7S1861C1C1Ev),
  NSPAIR(_ZN7S1861C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1861C3;
extern VTBL_ENTRY _ZTI7S1861C3[];
extern  VTBL_ENTRY _ZTV7S1861C3[];
extern Class_Descriptor cd_S1861C2;
extern VTBL_ENTRY _ZTI7S1861C2[];
extern  VTBL_ENTRY _ZTV7S1861C2[];
static Base_Class bases_S1861C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1861C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1861C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1861C1[];
extern void _ZN7S1861C1D1Ev();
extern void _ZN7S1861C1D0Ev();
extern void _ZN7S1861C32v6Ev();
extern void _ZN7S1861C32v7Ev();
extern void _ZN7S1861C32v8Ev();
extern void _ZN7S1861C32v9Ev();
extern void _ZN7S1861C33v10Ev();
extern void _ZN7S1861C33v11Ev();
extern void _ZN7S1861C33v12Ev();
extern void _ZN7S1861C23v13Ev();
extern void _ZN7S1861C23v14Ev();
extern void _ZN7S1861C23v15Ev();
extern void _ZN7S1861C23v16Ev();
extern void _ZN7S1861C23v17Ev();
extern void _ZN7S1861C23v18Ev();
extern void _ZN7S1861C23v19Ev();
extern void _ZN7S1861C23v20Ev();
extern void _ZN7S1861C23v21Ev();
extern void _ZN7S1861C23v22Ev();
extern void _ZN7S1861C12v1Ev();
extern void _ZN7S1861C12v2Ev();
extern void _ZN7S1861C12v3Ev();
extern void _ZN7S1861C12v4Ev();
extern void _ZN7S1861C12v5Ev();
static  VTBL_ENTRY vtc_S1861C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1861C1[0]),
  (VTBL_ENTRY)&_ZN7S1861C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1861C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1861C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1861C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1861C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1861C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1861C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1861C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1861C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1861C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1861C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1861C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1861C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1861C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1861C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1861C1[];
extern  VTBL_ENTRY _ZTV7S1861C1[];
Class_Descriptor cd_S1861C1 = {  "S1861C1", // class name
  bases_S1861C1, 3,
  &(vtc_S1861C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,68), // object size
  NSPAIRA(_ZTI7S1861C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1861C1),26, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13749C2  {
  void *s13749c2f0;
  int s13749c2f1[3];
};
//SIG(-1 S13749C2) C1{ Fp Fi[3]}



static void Test_S13749C2()
{
  {
    init_simple_test("S13749C2");
    S13749C2 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S13749C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13749C2)");
    check_field_offset(lv, s13749c2f0, 0, "S13749C2.s13749c2f0");
    check_field_offset(lv, s13749c2f1, ABISELECT(8,4), "S13749C2.s13749c2f1");
  }
}
static Arrange_To_Call_Me vS13749C2(Test_S13749C2, "S13749C2", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13749C3  {
  int s13749c3f0[3];
  void *s13749c3f1[3];
  long s13749c3f2;
  char s13749c3f3[8];
};
//SIG(-1 S13749C3) C1{ Fi[3] Fp[3] Fl Fc[8]}



static void Test_S13749C3()
{
  {
    init_simple_test("S13749C3");
    S13749C3 lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S13749C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13749C3)");
    check_field_offset(lv, s13749c3f0, 0, "S13749C3.s13749c3f0");
    check_field_offset(lv, s13749c3f1, ABISELECT(16,12), "S13749C3.s13749c3f1");
    check_field_offset(lv, s13749c3f2, ABISELECT(40,24), "S13749C3.s13749c3f2");
    check_field_offset(lv, s13749c3f3, ABISELECT(48,28), "S13749C3.s13749c3f3");
  }
}
static Arrange_To_Call_Me vS13749C3(Test_S13749C3, "S13749C3", ABISELECT(56,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13749C4  {
  char s13749c4f0[256];
  int s13749c4f1;
  char s13749c4f2[128];
  int s13749c4f3;
  long s13749c4f4;
  int s13749c4f5;
  void *s13749c4f6[2];
  int s13749c4f7[4];
  char s13749c4f8[9];
  void *s13749c4f9;
  int s13749c4f10[2];
  void *s13749c4f11[3];
  int s13749c4f12[2];
  void *s13749c4f13;
  int s13749c4f14;
};
//SIG(-1 S13749C4) C1{ Fc[256] Fi Fc[128] Fi Fl Fi Fp[2] Fi[4] Fc[9] Fp Fi[2] Fp[3] Fi[2] Fp Fi}



static void Test_S13749C4()
{
  {
    init_simple_test("S13749C4");
    S13749C4 lv;
    check2(sizeof(lv), ABISELECT(520,476), "sizeof(S13749C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13749C4)");
    check_field_offset(lv, s13749c4f0, 0, "S13749C4.s13749c4f0");
    check_field_offset(lv, s13749c4f1, 256, "S13749C4.s13749c4f1");
    check_field_offset(lv, s13749c4f2, 260, "S13749C4.s13749c4f2");
    check_field_offset(lv, s13749c4f3, 388, "S13749C4.s13749c4f3");
    check_field_offset(lv, s13749c4f4, 392, "S13749C4.s13749c4f4");
    check_field_offset(lv, s13749c4f5, ABISELECT(400,396), "S13749C4.s13749c4f5");
    check_field_offset(lv, s13749c4f6, ABISELECT(408,400), "S13749C4.s13749c4f6");
    check_field_offset(lv, s13749c4f7, ABISELECT(424,408), "S13749C4.s13749c4f7");
    check_field_offset(lv, s13749c4f8, ABISELECT(440,424), "S13749C4.s13749c4f8");
    check_field_offset(lv, s13749c4f9, ABISELECT(456,436), "S13749C4.s13749c4f9");
    check_field_offset(lv, s13749c4f10, ABISELECT(464,440), "S13749C4.s13749c4f10");
    check_field_offset(lv, s13749c4f11, ABISELECT(472,448), "S13749C4.s13749c4f11");
    check_field_offset(lv, s13749c4f12, ABISELECT(496,460), "S13749C4.s13749c4f12");
    check_field_offset(lv, s13749c4f13, ABISELECT(504,468), "S13749C4.s13749c4f13");
    check_field_offset(lv, s13749c4f14, ABISELECT(512,472), "S13749C4.s13749c4f14");
  }
}
static Arrange_To_Call_Me vS13749C4(Test_S13749C4, "S13749C4", ABISELECT(520,476));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13749C1  {
  long s13749c1f0;
  int s13749c1f1;
  char s13749c1f2[8];
  int s13749c1f3;
  char s13749c1f4[72];
  int s13749c1f5;
  char s13749c1f6[128];
  int s13749c1f7[3];
  ::S13749C2 s13749c1f8;
  ::S13749C2 s13749c1f9;
  ::S13749C3 s13749c1f10;
  ::S13749C3 s13749c1f11;
  char s13749c1f12[2];
  int s13749c1f13;
  char s13749c1f14[4];
  int s13749c1f15[5];
  void *s13749c1f16[3];
  int s13749c1f17[4];
  char s13749c1f18[2];
  int s13749c1f19[4];
  void *s13749c1f20;
  int s13749c1f21;
  void *s13749c1f22;
  int s13749c1f23;
  ::S13749C4 s13749c1f24;
  char s13749c1f25[130];
  int s13749c1f26[2];
};
//SIG(1 S13749C1) C1{ Fl Fi Fc[8] Fi Fc[72] Fi Fc[128] Fi[3] FC2{ Fp Fi[3]} FC2 FC3{ Fi[3] Fp[3] Fl Fc[8]} FC3 Fc[2] Fi Fc[4] Fi[5] Fp[3] Fi[4] Fc[2] Fi[4] Fp Fi Fp Fi FC4{ Fc[256] Fi Fc[128] Fi Fl Fi Fp[2] Fi[4] Fc[9] Fp Fi[2] Fp[3] Fi[2] Fp Fi} Fc[130] Fi[2]}



static void Test_S13749C1()
{
  {
    init_simple_test("S13749C1");
    S13749C1 lv;
    check2(sizeof(lv), ABISELECT(1192,1052), "sizeof(S13749C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13749C1)");
    check_field_offset(lv, s13749c1f0, 0, "S13749C1.s13749c1f0");
    check_field_offset(lv, s13749c1f1, ABISELECT(8,4), "S13749C1.s13749c1f1");
    check_field_offset(lv, s13749c1f2, ABISELECT(12,8), "S13749C1.s13749c1f2");
    check_field_offset(lv, s13749c1f3, ABISELECT(20,16), "S13749C1.s13749c1f3");
    check_field_offset(lv, s13749c1f4, ABISELECT(24,20), "S13749C1.s13749c1f4");
    check_field_offset(lv, s13749c1f5, ABISELECT(96,92), "S13749C1.s13749c1f5");
    check_field_offset(lv, s13749c1f6, ABISELECT(100,96), "S13749C1.s13749c1f6");
    check_field_offset(lv, s13749c1f7, ABISELECT(228,224), "S13749C1.s13749c1f7");
    check_field_offset(lv, s13749c1f8, ABISELECT(240,236), "S13749C1.s13749c1f8");
    check_field_offset(lv, s13749c1f9, ABISELECT(264,252), "S13749C1.s13749c1f9");
    check_field_offset(lv, s13749c1f10, ABISELECT(288,268), "S13749C1.s13749c1f10");
    check_field_offset(lv, s13749c1f11, ABISELECT(344,304), "S13749C1.s13749c1f11");
    check_field_offset(lv, s13749c1f12, ABISELECT(400,340), "S13749C1.s13749c1f12");
    check_field_offset(lv, s13749c1f13, ABISELECT(404,344), "S13749C1.s13749c1f13");
    check_field_offset(lv, s13749c1f14, ABISELECT(408,348), "S13749C1.s13749c1f14");
    check_field_offset(lv, s13749c1f15, ABISELECT(412,352), "S13749C1.s13749c1f15");
    check_field_offset(lv, s13749c1f16, ABISELECT(432,372), "S13749C1.s13749c1f16");
    check_field_offset(lv, s13749c1f17, ABISELECT(456,384), "S13749C1.s13749c1f17");
    check_field_offset(lv, s13749c1f18, ABISELECT(472,400), "S13749C1.s13749c1f18");
    check_field_offset(lv, s13749c1f19, ABISELECT(476,404), "S13749C1.s13749c1f19");
    check_field_offset(lv, s13749c1f20, ABISELECT(496,420), "S13749C1.s13749c1f20");
    check_field_offset(lv, s13749c1f21, ABISELECT(504,424), "S13749C1.s13749c1f21");
    check_field_offset(lv, s13749c1f22, ABISELECT(512,428), "S13749C1.s13749c1f22");
    check_field_offset(lv, s13749c1f23, ABISELECT(520,432), "S13749C1.s13749c1f23");
    check_field_offset(lv, s13749c1f24, ABISELECT(528,436), "S13749C1.s13749c1f24");
    check_field_offset(lv, s13749c1f25, ABISELECT(1048,912), "S13749C1.s13749c1f25");
    check_field_offset(lv, s13749c1f26, ABISELECT(1180,1044), "S13749C1.s13749c1f26");
  }
}
static Arrange_To_Call_Me vS13749C1(Test_S13749C1, "S13749C1", ABISELECT(1192,1052));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1869C3  : S1850C4_nt {
  void *s1869c3f0[2];
  virtual  ~S1869C3(); // _ZN7S1869C3D1Ev
  virtual void  v9(); // _ZN7S1869C32v9Ev
  virtual void  v10(); // _ZN7S1869C33v10Ev
  virtual void  v11(); // _ZN7S1869C33v11Ev
  virtual void  v12(); // _ZN7S1869C33v12Ev
  virtual void  v13(); // _ZN7S1869C33v13Ev
  virtual void  v14(); // _ZN7S1869C33v14Ev
  virtual void  v15(); // _ZN7S1869C33v15Ev
  S1869C3(); // tgen
};
//SIG(-1 S1869C3) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S1869C3 ::~S1869C3(){ note_dtor("S1869C3", this);}
void  S1869C3 ::v9(){vfunc_called(this, "_ZN7S1869C32v9Ev");}
void  S1869C3 ::v10(){vfunc_called(this, "_ZN7S1869C33v10Ev");}
void  S1869C3 ::v11(){vfunc_called(this, "_ZN7S1869C33v11Ev");}
void  S1869C3 ::v12(){vfunc_called(this, "_ZN7S1869C33v12Ev");}
void  S1869C3 ::v13(){vfunc_called(this, "_ZN7S1869C33v13Ev");}
void  S1869C3 ::v14(){vfunc_called(this, "_ZN7S1869C33v14Ev");}
void  S1869C3 ::v15(){vfunc_called(this, "_ZN7S1869C33v15Ev");}
S1869C3 ::S1869C3(){ note_ctor("S1869C3", this);} // tgen

static void Test_S1869C3()
{
  extern Class_Descriptor cd_S1869C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1869C3, buf);
    S1869C3 *dp, &lv = *(dp=new (buf) S1869C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1869C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1869C3)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S1869C3");
    check_field_offset(lv, s1869c3f0, ABISELECT(8,4), "S1869C3.s1869c3f0");
    test_class_info(&lv, &cd_S1869C3);
    dp->~S1869C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1869C3(Test_S1869C3, "S1869C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1869C3C1Ev();
extern void _ZN7S1869C3D1Ev();
Name_Map name_map_S1869C3[] = {
  NSPAIR(_ZN7S1869C3C1Ev),
  NSPAIR(_ZN7S1869C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S1869C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1869C3[];
extern void _ZN7S1869C3D1Ev();
extern void _ZN7S1869C3D0Ev();
extern void _ZN7S1869C32v9Ev();
extern void _ZN7S1869C33v10Ev();
extern void _ZN7S1869C33v11Ev();
extern void _ZN7S1869C33v12Ev();
extern void _ZN7S1869C33v13Ev();
extern void _ZN7S1869C33v14Ev();
extern void _ZN7S1869C33v15Ev();
static  VTBL_ENTRY vtc_S1869C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1869C3[0]),
  (VTBL_ENTRY)&_ZN7S1869C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1869C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1869C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1869C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1869C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1869C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1869C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1869C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1869C33v15Ev,
};
extern VTBL_ENTRY _ZTI7S1869C3[];
extern  VTBL_ENTRY _ZTV7S1869C3[];
Class_Descriptor cd_S1869C3 = {  "S1869C3", // class name
  bases_S1869C3, 1,
  &(vtc_S1869C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1869C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1869C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1869C2  : S1869C3 {
  int s1869c2f0[2];
  ::S1865C7 s1869c2f1;
  ::S1850C5_nt s1869c2f2;
  ::S3593C21_nt s1869c2f3;
  ::S1865C15 s1869c2f4;
  char s1869c2f5;
  ::S16113C2_nt s1869c2f6;
  virtual  ~S1869C2(); // _ZN7S1869C2D1Ev
  virtual void  v16(); // _ZN7S1869C23v16Ev
  virtual void  v17(); // _ZN7S1869C23v17Ev
  virtual void  v18(); // _ZN7S1869C23v18Ev
  virtual void  v19(); // _ZN7S1869C23v19Ev
  virtual void  v20(); // _ZN7S1869C23v20Ev
  virtual void  v21(); // _ZN7S1869C23v21Ev
  virtual void  v22(); // _ZN7S1869C23v22Ev
  virtual void  v23(); // _ZN7S1869C23v23Ev
  virtual void  v24(); // _ZN7S1869C23v24Ev
  virtual void  v25(); // _ZN7S1869C23v25Ev
  S1869C2(); // tgen
};
//SIG(-1 S1869C2) C1{ BC2{ BC3{ vd m} vd v11 v12 v13 v14 v15 v16 v17 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] FC4{ BC5{ vd v19} v18 Fp} FC6{ BC7{ vd v21} v20 Fp} FC8{ m Fp} FC9{ m Fp} Fc FC10{ m Fi}}


 S1869C2 ::~S1869C2(){ note_dtor("S1869C2", this);}
void  S1869C2 ::v16(){vfunc_called(this, "_ZN7S1869C23v16Ev");}
void  S1869C2 ::v17(){vfunc_called(this, "_ZN7S1869C23v17Ev");}
void  S1869C2 ::v18(){vfunc_called(this, "_ZN7S1869C23v18Ev");}
void  S1869C2 ::v19(){vfunc_called(this, "_ZN7S1869C23v19Ev");}
void  S1869C2 ::v20(){vfunc_called(this, "_ZN7S1869C23v20Ev");}
void  S1869C2 ::v21(){vfunc_called(this, "_ZN7S1869C23v21Ev");}
void  S1869C2 ::v22(){vfunc_called(this, "_ZN7S1869C23v22Ev");}
void  S1869C2 ::v23(){vfunc_called(this, "_ZN7S1869C23v23Ev");}
void  S1869C2 ::v24(){vfunc_called(this, "_ZN7S1869C23v24Ev");}
void  S1869C2 ::v25(){vfunc_called(this, "_ZN7S1869C23v25Ev");}
S1869C2 ::S1869C2(){ note_ctor("S1869C2", this);} // tgen

static void Test_S1869C2()
{
  extern Class_Descriptor cd_S1869C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S1869C2, buf);
    S1869C2 *dp, &lv = *(dp=new (buf) S1869C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S1869C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1869C2)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1869C3*), 0, "S1869C2");
    check_base_class_offset(lv, (S1869C3*), 0, "S1869C2");
    check_field_offset(lv, s1869c2f0, ABISELECT(24,12), "S1869C2.s1869c2f0");
    check_field_offset(lv, s1869c2f1, ABISELECT(32,20), "S1869C2.s1869c2f1");
    check_field_offset(lv, s1869c2f2, ABISELECT(48,28), "S1869C2.s1869c2f2");
    check_field_offset(lv, s1869c2f3, ABISELECT(64,36), "S1869C2.s1869c2f3");
    check_field_offset(lv, s1869c2f4, ABISELECT(72,40), "S1869C2.s1869c2f4");
    check_field_offset(lv, s1869c2f5, ABISELECT(80,44), "S1869C2.s1869c2f5");
    check_field_offset(lv, s1869c2f6, ABISELECT(84,48), "S1869C2.s1869c2f6");
    test_class_info(&lv, &cd_S1869C2);
    dp->~S1869C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1869C2(Test_S1869C2, "S1869C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S1869C2C1Ev();
extern void _ZN7S1869C2D1Ev();
Name_Map name_map_S1869C2[] = {
  NSPAIR(_ZN7S1869C2C1Ev),
  NSPAIR(_ZN7S1869C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1869C3;
extern VTBL_ENTRY _ZTI7S1869C3[];
extern  VTBL_ENTRY _ZTV7S1869C3[];
static Base_Class bases_S1869C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1869C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1869C2[];
extern void _ZN7S1869C2D1Ev();
extern void _ZN7S1869C2D0Ev();
extern void _ZN7S1869C32v9Ev();
extern void _ZN7S1869C33v10Ev();
extern void _ZN7S1869C33v11Ev();
extern void _ZN7S1869C33v12Ev();
extern void _ZN7S1869C33v13Ev();
extern void _ZN7S1869C33v14Ev();
extern void _ZN7S1869C33v15Ev();
extern void _ZN7S1869C23v16Ev();
extern void _ZN7S1869C23v17Ev();
extern void _ZN7S1869C23v18Ev();
extern void _ZN7S1869C23v19Ev();
extern void _ZN7S1869C23v20Ev();
extern void _ZN7S1869C23v21Ev();
extern void _ZN7S1869C23v22Ev();
extern void _ZN7S1869C23v23Ev();
extern void _ZN7S1869C23v24Ev();
extern void _ZN7S1869C23v25Ev();
static  VTBL_ENTRY vtc_S1869C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1869C2[0]),
  (VTBL_ENTRY)&_ZN7S1869C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1869C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1869C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1869C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1869C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1869C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1869C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1869C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1869C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v25Ev,
};
extern VTBL_ENTRY _ZTI7S1869C2[];
extern  VTBL_ENTRY _ZTV7S1869C2[];
Class_Descriptor cd_S1869C2 = {  "S1869C2", // class name
  bases_S1869C2, 2,
  &(vtc_S1869C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S1869C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1869C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1869C12  {
  virtual  ~S1869C12(); // _ZN8S1869C12D1Ev
  virtual void  v26(); // _ZN8S1869C123v26Ev
  virtual void  v27(); // _ZN8S1869C123v27Ev
  virtual void  v28(); // _ZN8S1869C123v28Ev
  S1869C12(); // tgen
};
//SIG(-1 S1869C12) C1{ vd v1 v2 v3}


 S1869C12 ::~S1869C12(){ note_dtor("S1869C12", this);}
void  S1869C12 ::v26(){vfunc_called(this, "_ZN8S1869C123v26Ev");}
void  S1869C12 ::v27(){vfunc_called(this, "_ZN8S1869C123v27Ev");}
void  S1869C12 ::v28(){vfunc_called(this, "_ZN8S1869C123v28Ev");}
S1869C12 ::S1869C12(){ note_ctor("S1869C12", this);} // tgen

static void Test_S1869C12()
{
  extern Class_Descriptor cd_S1869C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1869C12, buf);
    S1869C12 *dp, &lv = *(dp=new (buf) S1869C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1869C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1869C12)");
    test_class_info(&lv, &cd_S1869C12);
    dp->~S1869C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1869C12(Test_S1869C12, "S1869C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S1869C12C1Ev();
extern void _ZN8S1869C12D1Ev();
Name_Map name_map_S1869C12[] = {
  NSPAIR(_ZN8S1869C12C1Ev),
  NSPAIR(_ZN8S1869C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1869C12[];
extern void _ZN8S1869C12D1Ev();
extern void _ZN8S1869C12D0Ev();
extern void _ZN8S1869C123v26Ev();
extern void _ZN8S1869C123v27Ev();
extern void _ZN8S1869C123v28Ev();
static  VTBL_ENTRY vtc_S1869C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1869C12[0]),
  (VTBL_ENTRY)&_ZN8S1869C12D1Ev,
  (VTBL_ENTRY)&_ZN8S1869C12D0Ev,
  (VTBL_ENTRY)&_ZN8S1869C123v26Ev,
  (VTBL_ENTRY)&_ZN8S1869C123v27Ev,
  (VTBL_ENTRY)&_ZN8S1869C123v28Ev,
};
extern VTBL_ENTRY _ZTI8S1869C12[];
extern  VTBL_ENTRY _ZTV8S1869C12[];
Class_Descriptor cd_S1869C12 = {  "S1869C12", // class name
  0,0,//no base classes
  &(vtc_S1869C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S1869C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1869C12),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1869C1  : S1869C2 , S1869C12 {
  void *s1869c1f0;
  char s1869c1f1;
  virtual  ~S1869C1(); // _ZN7S1869C1D1Ev
  virtual void  v1(); // _ZN7S1869C12v1Ev
  virtual void  v2(); // _ZN7S1869C12v2Ev
  virtual void  v3(); // _ZN7S1869C12v3Ev
  virtual void  v4(); // _ZN7S1869C12v4Ev
  virtual void  v5(); // _ZN7S1869C12v5Ev
  virtual void  v6(); // _ZN7S1869C12v6Ev
  virtual void  v7(); // _ZN7S1869C12v7Ev
  virtual void  v8(); // _ZN7S1869C12v8Ev
  S1869C1(); // tgen
};
//SIG(1 S1869C1) C1{ BC2{ BC3{ BC4{ vd m} vd v9 v10 v11 v12 v13 v14 v15 Fp[2]} vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 Fi[2] FC5{ BC6{ vd v30} v29 Fp} FC7{ BC8{ vd v32} v31 Fp} FC9{ m Fp} FC10{ m Fp} Fc FC11{ m Fi}} BC12{ vd v26 v27 v28} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp Fc}


 S1869C1 ::~S1869C1(){ note_dtor("S1869C1", this);}
void  S1869C1 ::v1(){vfunc_called(this, "_ZN7S1869C12v1Ev");}
void  S1869C1 ::v2(){vfunc_called(this, "_ZN7S1869C12v2Ev");}
void  S1869C1 ::v3(){vfunc_called(this, "_ZN7S1869C12v3Ev");}
void  S1869C1 ::v4(){vfunc_called(this, "_ZN7S1869C12v4Ev");}
void  S1869C1 ::v5(){vfunc_called(this, "_ZN7S1869C12v5Ev");}
void  S1869C1 ::v6(){vfunc_called(this, "_ZN7S1869C12v6Ev");}
void  S1869C1 ::v7(){vfunc_called(this, "_ZN7S1869C12v7Ev");}
void  S1869C1 ::v8(){vfunc_called(this, "_ZN7S1869C12v8Ev");}
S1869C1 ::S1869C1(){ note_ctor("S1869C1", this);} // tgen

static void Test_S1869C1()
{
  extern Class_Descriptor cd_S1869C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,17)];
    init_test(&cd_S1869C1, buf);
    S1869C1 *dp, &lv = *(dp=new (buf) S1869C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S1869C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1869C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1869C3*)(S1869C2*), 0, "S1869C1");
    check_base_class_offset(lv, (S1869C3*)(S1869C2*), 0, "S1869C1");
    check_base_class_offset(lv, (S1869C2*), 0, "S1869C1");
    check_base_class_offset(lv, (S1869C12*), ABISELECT(88,52), "S1869C1");
    check_field_offset(lv, s1869c1f0, ABISELECT(96,56), "S1869C1.s1869c1f0");
    check_field_offset(lv, s1869c1f1, ABISELECT(104,60), "S1869C1.s1869c1f1");
    test_class_info(&lv, &cd_S1869C1);
    dp->~S1869C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1869C1(Test_S1869C1, "S1869C1", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN7S1869C1C1Ev();
extern void _ZN7S1869C1D1Ev();
Name_Map name_map_S1869C1[] = {
  NSPAIR(_ZN7S1869C1C1Ev),
  NSPAIR(_ZN7S1869C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1869C3;
extern VTBL_ENTRY _ZTI7S1869C3[];
extern  VTBL_ENTRY _ZTV7S1869C3[];
extern Class_Descriptor cd_S1869C2;
extern VTBL_ENTRY _ZTI7S1869C2[];
extern  VTBL_ENTRY _ZTV7S1869C2[];
extern Class_Descriptor cd_S1869C12;
extern VTBL_ENTRY _ZTI8S1869C12[];
extern  VTBL_ENTRY _ZTV8S1869C12[];
static Base_Class bases_S1869C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1869C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1869C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1869C12,    ABISELECT(88,52), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1869C1[];
extern void _ZN7S1869C1D1Ev();
extern void _ZN7S1869C1D0Ev();
extern void _ZN7S1869C32v9Ev();
extern void _ZN7S1869C33v10Ev();
extern void _ZN7S1869C33v11Ev();
extern void _ZN7S1869C33v12Ev();
extern void _ZN7S1869C33v13Ev();
extern void _ZN7S1869C33v14Ev();
extern void _ZN7S1869C33v15Ev();
extern void _ZN7S1869C23v16Ev();
extern void _ZN7S1869C23v17Ev();
extern void _ZN7S1869C23v18Ev();
extern void _ZN7S1869C23v19Ev();
extern void _ZN7S1869C23v20Ev();
extern void _ZN7S1869C23v21Ev();
extern void _ZN7S1869C23v22Ev();
extern void _ZN7S1869C23v23Ev();
extern void _ZN7S1869C23v24Ev();
extern void _ZN7S1869C23v25Ev();
extern void _ZN7S1869C12v1Ev();
extern void _ZN7S1869C12v2Ev();
extern void _ZN7S1869C12v3Ev();
extern void _ZN7S1869C12v4Ev();
extern void _ZN7S1869C12v5Ev();
extern void _ZN7S1869C12v6Ev();
extern void _ZN7S1869C12v7Ev();
extern void _ZN7S1869C12v8Ev();
extern void ABISELECT(_ZThn88_N7S1869C1D1Ev,_ZThn52_N7S1869C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S1869C1D0Ev,_ZThn52_N7S1869C1D0Ev)();
extern void _ZN8S1869C123v26Ev();
extern void _ZN8S1869C123v27Ev();
extern void _ZN8S1869C123v28Ev();
static  VTBL_ENTRY vtc_S1869C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1869C1[0]),
  (VTBL_ENTRY)&_ZN7S1869C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1869C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1869C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1869C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1869C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1869C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1869C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1869C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1869C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1869C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1869C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1869C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1869C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1869C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1869C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1869C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1869C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1869C12v8Ev,
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI7S1869C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S1869C1D1Ev,_ZThn52_N7S1869C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S1869C1D0Ev,_ZThn52_N7S1869C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1869C123v26Ev,
  (VTBL_ENTRY)&_ZN8S1869C123v27Ev,
  (VTBL_ENTRY)&_ZN8S1869C123v28Ev,
};
extern VTBL_ENTRY _ZTI7S1869C1[];
extern  VTBL_ENTRY _ZTV7S1869C1[];
Class_Descriptor cd_S1869C1 = {  "S1869C1", // class name
  bases_S1869C1, 4,
  &(vtc_S1869C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI7S1869C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1869C1),36, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1870C3  : S1850C4_nt {
  void *s1870c3f0[2];
  virtual  ~S1870C3(); // _ZN7S1870C3D1Ev
  virtual void  v9(); // _ZN7S1870C32v9Ev
  virtual void  v10(); // _ZN7S1870C33v10Ev
  virtual void  v11(); // _ZN7S1870C33v11Ev
  virtual void  v12(); // _ZN7S1870C33v12Ev
  virtual void  v13(); // _ZN7S1870C33v13Ev
  virtual void  v14(); // _ZN7S1870C33v14Ev
  virtual void  v15(); // _ZN7S1870C33v15Ev
  S1870C3(); // tgen
};
//SIG(-1 S1870C3) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S1870C3 ::~S1870C3(){ note_dtor("S1870C3", this);}
void  S1870C3 ::v9(){vfunc_called(this, "_ZN7S1870C32v9Ev");}
void  S1870C3 ::v10(){vfunc_called(this, "_ZN7S1870C33v10Ev");}
void  S1870C3 ::v11(){vfunc_called(this, "_ZN7S1870C33v11Ev");}
void  S1870C3 ::v12(){vfunc_called(this, "_ZN7S1870C33v12Ev");}
void  S1870C3 ::v13(){vfunc_called(this, "_ZN7S1870C33v13Ev");}
void  S1870C3 ::v14(){vfunc_called(this, "_ZN7S1870C33v14Ev");}
void  S1870C3 ::v15(){vfunc_called(this, "_ZN7S1870C33v15Ev");}
S1870C3 ::S1870C3(){ note_ctor("S1870C3", this);} // tgen

static void Test_S1870C3()
{
  extern Class_Descriptor cd_S1870C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1870C3, buf);
    S1870C3 *dp, &lv = *(dp=new (buf) S1870C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1870C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1870C3)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S1870C3");
    check_field_offset(lv, s1870c3f0, ABISELECT(8,4), "S1870C3.s1870c3f0");
    test_class_info(&lv, &cd_S1870C3);
    dp->~S1870C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1870C3(Test_S1870C3, "S1870C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1870C3C1Ev();
extern void _ZN7S1870C3D1Ev();
Name_Map name_map_S1870C3[] = {
  NSPAIR(_ZN7S1870C3C1Ev),
  NSPAIR(_ZN7S1870C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S1870C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1870C3[];
extern void _ZN7S1870C3D1Ev();
extern void _ZN7S1870C3D0Ev();
extern void _ZN7S1870C32v9Ev();
extern void _ZN7S1870C33v10Ev();
extern void _ZN7S1870C33v11Ev();
extern void _ZN7S1870C33v12Ev();
extern void _ZN7S1870C33v13Ev();
extern void _ZN7S1870C33v14Ev();
extern void _ZN7S1870C33v15Ev();
static  VTBL_ENTRY vtc_S1870C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1870C3[0]),
  (VTBL_ENTRY)&_ZN7S1870C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1870C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1870C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1870C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1870C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1870C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1870C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1870C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1870C33v15Ev,
};
extern VTBL_ENTRY _ZTI7S1870C3[];
extern  VTBL_ENTRY _ZTV7S1870C3[];
Class_Descriptor cd_S1870C3 = {  "S1870C3", // class name
  bases_S1870C3, 1,
  &(vtc_S1870C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1870C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1870C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1870C2  : S1870C3 {
  int s1870c2f0[2];
  ::S1865C7 s1870c2f1;
  ::S1850C5_nt s1870c2f2;
  ::S3593C21_nt s1870c2f3;
  ::S1865C15 s1870c2f4;
  char s1870c2f5;
  ::S16113C2_nt s1870c2f6;
  virtual  ~S1870C2(); // _ZN7S1870C2D1Ev
  virtual void  v16(); // _ZN7S1870C23v16Ev
  virtual void  v17(); // _ZN7S1870C23v17Ev
  virtual void  v18(); // _ZN7S1870C23v18Ev
  virtual void  v19(); // _ZN7S1870C23v19Ev
  virtual void  v20(); // _ZN7S1870C23v20Ev
  virtual void  v21(); // _ZN7S1870C23v21Ev
  virtual void  v22(); // _ZN7S1870C23v22Ev
  virtual void  v23(); // _ZN7S1870C23v23Ev
  virtual void  v24(); // _ZN7S1870C23v24Ev
  virtual void  v25(); // _ZN7S1870C23v25Ev
  S1870C2(); // tgen
};
//SIG(-1 S1870C2) C1{ BC2{ BC3{ vd m} vd v11 v12 v13 v14 v15 v16 v17 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] FC4{ BC5{ vd v19} v18 Fp} FC6{ BC7{ vd v21} v20 Fp} FC8{ m Fp} FC9{ m Fp} Fc FC10{ m Fi}}


 S1870C2 ::~S1870C2(){ note_dtor("S1870C2", this);}
void  S1870C2 ::v16(){vfunc_called(this, "_ZN7S1870C23v16Ev");}
void  S1870C2 ::v17(){vfunc_called(this, "_ZN7S1870C23v17Ev");}
void  S1870C2 ::v18(){vfunc_called(this, "_ZN7S1870C23v18Ev");}
void  S1870C2 ::v19(){vfunc_called(this, "_ZN7S1870C23v19Ev");}
void  S1870C2 ::v20(){vfunc_called(this, "_ZN7S1870C23v20Ev");}
void  S1870C2 ::v21(){vfunc_called(this, "_ZN7S1870C23v21Ev");}
void  S1870C2 ::v22(){vfunc_called(this, "_ZN7S1870C23v22Ev");}
void  S1870C2 ::v23(){vfunc_called(this, "_ZN7S1870C23v23Ev");}
void  S1870C2 ::v24(){vfunc_called(this, "_ZN7S1870C23v24Ev");}
void  S1870C2 ::v25(){vfunc_called(this, "_ZN7S1870C23v25Ev");}
S1870C2 ::S1870C2(){ note_ctor("S1870C2", this);} // tgen

static void Test_S1870C2()
{
  extern Class_Descriptor cd_S1870C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S1870C2, buf);
    S1870C2 *dp, &lv = *(dp=new (buf) S1870C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S1870C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1870C2)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1870C3*), 0, "S1870C2");
    check_base_class_offset(lv, (S1870C3*), 0, "S1870C2");
    check_field_offset(lv, s1870c2f0, ABISELECT(24,12), "S1870C2.s1870c2f0");
    check_field_offset(lv, s1870c2f1, ABISELECT(32,20), "S1870C2.s1870c2f1");
    check_field_offset(lv, s1870c2f2, ABISELECT(48,28), "S1870C2.s1870c2f2");
    check_field_offset(lv, s1870c2f3, ABISELECT(64,36), "S1870C2.s1870c2f3");
    check_field_offset(lv, s1870c2f4, ABISELECT(72,40), "S1870C2.s1870c2f4");
    check_field_offset(lv, s1870c2f5, ABISELECT(80,44), "S1870C2.s1870c2f5");
    check_field_offset(lv, s1870c2f6, ABISELECT(84,48), "S1870C2.s1870c2f6");
    test_class_info(&lv, &cd_S1870C2);
    dp->~S1870C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1870C2(Test_S1870C2, "S1870C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S1870C2C1Ev();
extern void _ZN7S1870C2D1Ev();
Name_Map name_map_S1870C2[] = {
  NSPAIR(_ZN7S1870C2C1Ev),
  NSPAIR(_ZN7S1870C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1870C3;
extern VTBL_ENTRY _ZTI7S1870C3[];
extern  VTBL_ENTRY _ZTV7S1870C3[];
static Base_Class bases_S1870C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1870C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1870C2[];
extern void _ZN7S1870C2D1Ev();
extern void _ZN7S1870C2D0Ev();
extern void _ZN7S1870C32v9Ev();
extern void _ZN7S1870C33v10Ev();
extern void _ZN7S1870C33v11Ev();
extern void _ZN7S1870C33v12Ev();
extern void _ZN7S1870C33v13Ev();
extern void _ZN7S1870C33v14Ev();
extern void _ZN7S1870C33v15Ev();
extern void _ZN7S1870C23v16Ev();
extern void _ZN7S1870C23v17Ev();
extern void _ZN7S1870C23v18Ev();
extern void _ZN7S1870C23v19Ev();
extern void _ZN7S1870C23v20Ev();
extern void _ZN7S1870C23v21Ev();
extern void _ZN7S1870C23v22Ev();
extern void _ZN7S1870C23v23Ev();
extern void _ZN7S1870C23v24Ev();
extern void _ZN7S1870C23v25Ev();
static  VTBL_ENTRY vtc_S1870C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1870C2[0]),
  (VTBL_ENTRY)&_ZN7S1870C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1870C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1870C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1870C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1870C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1870C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1870C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1870C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1870C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v25Ev,
};
extern VTBL_ENTRY _ZTI7S1870C2[];
extern  VTBL_ENTRY _ZTV7S1870C2[];
Class_Descriptor cd_S1870C2 = {  "S1870C2", // class name
  bases_S1870C2, 2,
  &(vtc_S1870C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S1870C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1870C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1870C12  {
  virtual  ~S1870C12(); // _ZN8S1870C12D1Ev
  virtual void  v26(); // _ZN8S1870C123v26Ev
  virtual void  v27(); // _ZN8S1870C123v27Ev
  virtual void  v28(); // _ZN8S1870C123v28Ev
  S1870C12(); // tgen
};
//SIG(-1 S1870C12) C1{ vd v1 v2 v3}


 S1870C12 ::~S1870C12(){ note_dtor("S1870C12", this);}
void  S1870C12 ::v26(){vfunc_called(this, "_ZN8S1870C123v26Ev");}
void  S1870C12 ::v27(){vfunc_called(this, "_ZN8S1870C123v27Ev");}
void  S1870C12 ::v28(){vfunc_called(this, "_ZN8S1870C123v28Ev");}
S1870C12 ::S1870C12(){ note_ctor("S1870C12", this);} // tgen

static void Test_S1870C12()
{
  extern Class_Descriptor cd_S1870C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1870C12, buf);
    S1870C12 *dp, &lv = *(dp=new (buf) S1870C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1870C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1870C12)");
    test_class_info(&lv, &cd_S1870C12);
    dp->~S1870C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1870C12(Test_S1870C12, "S1870C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S1870C12C1Ev();
extern void _ZN8S1870C12D1Ev();
Name_Map name_map_S1870C12[] = {
  NSPAIR(_ZN8S1870C12C1Ev),
  NSPAIR(_ZN8S1870C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1870C12[];
extern void _ZN8S1870C12D1Ev();
extern void _ZN8S1870C12D0Ev();
extern void _ZN8S1870C123v26Ev();
extern void _ZN8S1870C123v27Ev();
extern void _ZN8S1870C123v28Ev();
static  VTBL_ENTRY vtc_S1870C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1870C12[0]),
  (VTBL_ENTRY)&_ZN8S1870C12D1Ev,
  (VTBL_ENTRY)&_ZN8S1870C12D0Ev,
  (VTBL_ENTRY)&_ZN8S1870C123v26Ev,
  (VTBL_ENTRY)&_ZN8S1870C123v27Ev,
  (VTBL_ENTRY)&_ZN8S1870C123v28Ev,
};
extern VTBL_ENTRY _ZTI8S1870C12[];
extern  VTBL_ENTRY _ZTV8S1870C12[];
Class_Descriptor cd_S1870C12 = {  "S1870C12", // class name
  0,0,//no base classes
  &(vtc_S1870C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S1870C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1870C12),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1870C1  : S1870C2 , S1870C12 {
  void *s1870c1f0;
  virtual  ~S1870C1(); // _ZN7S1870C1D1Ev
  virtual void  v1(); // _ZN7S1870C12v1Ev
  virtual void  v2(); // _ZN7S1870C12v2Ev
  virtual void  v3(); // _ZN7S1870C12v3Ev
  virtual void  v4(); // _ZN7S1870C12v4Ev
  virtual void  v5(); // _ZN7S1870C12v5Ev
  virtual void  v6(); // _ZN7S1870C12v6Ev
  virtual void  v7(); // _ZN7S1870C12v7Ev
  virtual void  v8(); // _ZN7S1870C12v8Ev
  S1870C1(); // tgen
};
//SIG(1 S1870C1) C1{ BC2{ BC3{ BC4{ vd m} vd v9 v10 v11 v12 v13 v14 v15 Fp[2]} vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 Fi[2] FC5{ BC6{ vd v30} v29 Fp} FC7{ BC8{ vd v32} v31 Fp} FC9{ m Fp} FC10{ m Fp} Fc FC11{ m Fi}} BC12{ vd v26 v27 v28} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp}


 S1870C1 ::~S1870C1(){ note_dtor("S1870C1", this);}
void  S1870C1 ::v1(){vfunc_called(this, "_ZN7S1870C12v1Ev");}
void  S1870C1 ::v2(){vfunc_called(this, "_ZN7S1870C12v2Ev");}
void  S1870C1 ::v3(){vfunc_called(this, "_ZN7S1870C12v3Ev");}
void  S1870C1 ::v4(){vfunc_called(this, "_ZN7S1870C12v4Ev");}
void  S1870C1 ::v5(){vfunc_called(this, "_ZN7S1870C12v5Ev");}
void  S1870C1 ::v6(){vfunc_called(this, "_ZN7S1870C12v6Ev");}
void  S1870C1 ::v7(){vfunc_called(this, "_ZN7S1870C12v7Ev");}
void  S1870C1 ::v8(){vfunc_called(this, "_ZN7S1870C12v8Ev");}
S1870C1 ::S1870C1(){ note_ctor("S1870C1", this);} // tgen

static void Test_S1870C1()
{
  extern Class_Descriptor cd_S1870C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,16)];
    init_test(&cd_S1870C1, buf);
    S1870C1 *dp, &lv = *(dp=new (buf) S1870C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,60), "sizeof(S1870C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1870C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1870C3*)(S1870C2*), 0, "S1870C1");
    check_base_class_offset(lv, (S1870C3*)(S1870C2*), 0, "S1870C1");
    check_base_class_offset(lv, (S1870C2*), 0, "S1870C1");
    check_base_class_offset(lv, (S1870C12*), ABISELECT(88,52), "S1870C1");
    check_field_offset(lv, s1870c1f0, ABISELECT(96,56), "S1870C1.s1870c1f0");
    test_class_info(&lv, &cd_S1870C1);
    dp->~S1870C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1870C1(Test_S1870C1, "S1870C1", ABISELECT(104,60));

#else // __cplusplus

extern void _ZN7S1870C1C1Ev();
extern void _ZN7S1870C1D1Ev();
Name_Map name_map_S1870C1[] = {
  NSPAIR(_ZN7S1870C1C1Ev),
  NSPAIR(_ZN7S1870C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1870C3;
extern VTBL_ENTRY _ZTI7S1870C3[];
extern  VTBL_ENTRY _ZTV7S1870C3[];
extern Class_Descriptor cd_S1870C2;
extern VTBL_ENTRY _ZTI7S1870C2[];
extern  VTBL_ENTRY _ZTV7S1870C2[];
extern Class_Descriptor cd_S1870C12;
extern VTBL_ENTRY _ZTI8S1870C12[];
extern  VTBL_ENTRY _ZTV8S1870C12[];
static Base_Class bases_S1870C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1870C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1870C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1870C12,    ABISELECT(88,52), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1870C1[];
extern void _ZN7S1870C1D1Ev();
extern void _ZN7S1870C1D0Ev();
extern void _ZN7S1870C32v9Ev();
extern void _ZN7S1870C33v10Ev();
extern void _ZN7S1870C33v11Ev();
extern void _ZN7S1870C33v12Ev();
extern void _ZN7S1870C33v13Ev();
extern void _ZN7S1870C33v14Ev();
extern void _ZN7S1870C33v15Ev();
extern void _ZN7S1870C23v16Ev();
extern void _ZN7S1870C23v17Ev();
extern void _ZN7S1870C23v18Ev();
extern void _ZN7S1870C23v19Ev();
extern void _ZN7S1870C23v20Ev();
extern void _ZN7S1870C23v21Ev();
extern void _ZN7S1870C23v22Ev();
extern void _ZN7S1870C23v23Ev();
extern void _ZN7S1870C23v24Ev();
extern void _ZN7S1870C23v25Ev();
extern void _ZN7S1870C12v1Ev();
extern void _ZN7S1870C12v2Ev();
extern void _ZN7S1870C12v3Ev();
extern void _ZN7S1870C12v4Ev();
extern void _ZN7S1870C12v5Ev();
extern void _ZN7S1870C12v6Ev();
extern void _ZN7S1870C12v7Ev();
extern void _ZN7S1870C12v8Ev();
extern void ABISELECT(_ZThn88_N7S1870C1D1Ev,_ZThn52_N7S1870C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S1870C1D0Ev,_ZThn52_N7S1870C1D0Ev)();
extern void _ZN8S1870C123v26Ev();
extern void _ZN8S1870C123v27Ev();
extern void _ZN8S1870C123v28Ev();
static  VTBL_ENTRY vtc_S1870C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1870C1[0]),
  (VTBL_ENTRY)&_ZN7S1870C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1870C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1870C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1870C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1870C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1870C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1870C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1870C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1870C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1870C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1870C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1870C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1870C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1870C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1870C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1870C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1870C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1870C12v8Ev,
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI7S1870C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S1870C1D1Ev,_ZThn52_N7S1870C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S1870C1D0Ev,_ZThn52_N7S1870C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1870C123v26Ev,
  (VTBL_ENTRY)&_ZN8S1870C123v27Ev,
  (VTBL_ENTRY)&_ZN8S1870C123v28Ev,
};
extern VTBL_ENTRY _ZTI7S1870C1[];
extern  VTBL_ENTRY _ZTV7S1870C1[];
Class_Descriptor cd_S1870C1 = {  "S1870C1", // class name
  bases_S1870C1, 4,
  &(vtc_S1870C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,60), // object size
  NSPAIRA(_ZTI7S1870C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1870C1),36, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1863C3  : S1850C4_nt {
  void *s1863c3f0[2];
  virtual  ~S1863C3(); // _ZN7S1863C3D1Ev
  virtual void  v6(); // _ZN7S1863C32v6Ev
  virtual void  v7(); // _ZN7S1863C32v7Ev
  virtual void  v8(); // _ZN7S1863C32v8Ev
  virtual void  v9(); // _ZN7S1863C32v9Ev
  virtual void  v10(); // _ZN7S1863C33v10Ev
  virtual void  v11(); // _ZN7S1863C33v11Ev
  virtual void  v12(); // _ZN7S1863C33v12Ev
  S1863C3(); // tgen
};
//SIG(-1 S1863C3) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S1863C3 ::~S1863C3(){ note_dtor("S1863C3", this);}
void  S1863C3 ::v6(){vfunc_called(this, "_ZN7S1863C32v6Ev");}
void  S1863C3 ::v7(){vfunc_called(this, "_ZN7S1863C32v7Ev");}
void  S1863C3 ::v8(){vfunc_called(this, "_ZN7S1863C32v8Ev");}
void  S1863C3 ::v9(){vfunc_called(this, "_ZN7S1863C32v9Ev");}
void  S1863C3 ::v10(){vfunc_called(this, "_ZN7S1863C33v10Ev");}
void  S1863C3 ::v11(){vfunc_called(this, "_ZN7S1863C33v11Ev");}
void  S1863C3 ::v12(){vfunc_called(this, "_ZN7S1863C33v12Ev");}
S1863C3 ::S1863C3(){ note_ctor("S1863C3", this);} // tgen

static void Test_S1863C3()
{
  extern Class_Descriptor cd_S1863C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1863C3, buf);
    S1863C3 *dp, &lv = *(dp=new (buf) S1863C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1863C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1863C3)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S1863C3");
    check_field_offset(lv, s1863c3f0, ABISELECT(8,4), "S1863C3.s1863c3f0");
    test_class_info(&lv, &cd_S1863C3);
    dp->~S1863C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1863C3(Test_S1863C3, "S1863C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1863C3C1Ev();
extern void _ZN7S1863C3D1Ev();
Name_Map name_map_S1863C3[] = {
  NSPAIR(_ZN7S1863C3C1Ev),
  NSPAIR(_ZN7S1863C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S1863C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1863C3[];
extern void _ZN7S1863C3D1Ev();
extern void _ZN7S1863C3D0Ev();
extern void _ZN7S1863C32v6Ev();
extern void _ZN7S1863C32v7Ev();
extern void _ZN7S1863C32v8Ev();
extern void _ZN7S1863C32v9Ev();
extern void _ZN7S1863C33v10Ev();
extern void _ZN7S1863C33v11Ev();
extern void _ZN7S1863C33v12Ev();
static  VTBL_ENTRY vtc_S1863C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1863C3[0]),
  (VTBL_ENTRY)&_ZN7S1863C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1863C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1863C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1863C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1863C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1863C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1863C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1863C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1863C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S1863C3[];
extern  VTBL_ENTRY _ZTV7S1863C3[];
Class_Descriptor cd_S1863C3 = {  "S1863C3", // class name
  bases_S1863C3, 1,
  &(vtc_S1863C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1863C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1863C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1863C2  : S1863C3 {
  int s1863c2f0[2];
  ::S1865C7 s1863c2f1;
  ::S1850C5_nt s1863c2f2;
  ::S3593C21_nt s1863c2f3;
  ::S1865C15 s1863c2f4;
  char s1863c2f5;
  ::S16113C2_nt s1863c2f6;
  virtual  ~S1863C2(); // _ZN7S1863C2D1Ev
  virtual void  v13(); // _ZN7S1863C23v13Ev
  virtual void  v14(); // _ZN7S1863C23v14Ev
  virtual void  v15(); // _ZN7S1863C23v15Ev
  virtual void  v16(); // _ZN7S1863C23v16Ev
  virtual void  v17(); // _ZN7S1863C23v17Ev
  virtual void  v18(); // _ZN7S1863C23v18Ev
  virtual void  v19(); // _ZN7S1863C23v19Ev
  virtual void  v20(); // _ZN7S1863C23v20Ev
  virtual void  v21(); // _ZN7S1863C23v21Ev
  virtual void  v22(); // _ZN7S1863C23v22Ev
  S1863C2(); // tgen
};
//SIG(-1 S1863C2) C1{ BC2{ BC3{ vd m} vd v11 v12 v13 v14 v15 v16 v17 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] FC4{ BC5{ vd v19} v18 Fp} FC6{ BC7{ vd v21} v20 Fp} FC8{ m Fp} FC9{ m Fp} Fc FC10{ m Fi}}


 S1863C2 ::~S1863C2(){ note_dtor("S1863C2", this);}
void  S1863C2 ::v13(){vfunc_called(this, "_ZN7S1863C23v13Ev");}
void  S1863C2 ::v14(){vfunc_called(this, "_ZN7S1863C23v14Ev");}
void  S1863C2 ::v15(){vfunc_called(this, "_ZN7S1863C23v15Ev");}
void  S1863C2 ::v16(){vfunc_called(this, "_ZN7S1863C23v16Ev");}
void  S1863C2 ::v17(){vfunc_called(this, "_ZN7S1863C23v17Ev");}
void  S1863C2 ::v18(){vfunc_called(this, "_ZN7S1863C23v18Ev");}
void  S1863C2 ::v19(){vfunc_called(this, "_ZN7S1863C23v19Ev");}
void  S1863C2 ::v20(){vfunc_called(this, "_ZN7S1863C23v20Ev");}
void  S1863C2 ::v21(){vfunc_called(this, "_ZN7S1863C23v21Ev");}
void  S1863C2 ::v22(){vfunc_called(this, "_ZN7S1863C23v22Ev");}
S1863C2 ::S1863C2(){ note_ctor("S1863C2", this);} // tgen

static void Test_S1863C2()
{
  extern Class_Descriptor cd_S1863C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S1863C2, buf);
    S1863C2 *dp, &lv = *(dp=new (buf) S1863C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S1863C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1863C2)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1863C3*), 0, "S1863C2");
    check_base_class_offset(lv, (S1863C3*), 0, "S1863C2");
    check_field_offset(lv, s1863c2f0, ABISELECT(24,12), "S1863C2.s1863c2f0");
    check_field_offset(lv, s1863c2f1, ABISELECT(32,20), "S1863C2.s1863c2f1");
    check_field_offset(lv, s1863c2f2, ABISELECT(48,28), "S1863C2.s1863c2f2");
    check_field_offset(lv, s1863c2f3, ABISELECT(64,36), "S1863C2.s1863c2f3");
    check_field_offset(lv, s1863c2f4, ABISELECT(72,40), "S1863C2.s1863c2f4");
    check_field_offset(lv, s1863c2f5, ABISELECT(80,44), "S1863C2.s1863c2f5");
    check_field_offset(lv, s1863c2f6, ABISELECT(84,48), "S1863C2.s1863c2f6");
    test_class_info(&lv, &cd_S1863C2);
    dp->~S1863C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1863C2(Test_S1863C2, "S1863C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S1863C2C1Ev();
extern void _ZN7S1863C2D1Ev();
Name_Map name_map_S1863C2[] = {
  NSPAIR(_ZN7S1863C2C1Ev),
  NSPAIR(_ZN7S1863C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1863C3;
extern VTBL_ENTRY _ZTI7S1863C3[];
extern  VTBL_ENTRY _ZTV7S1863C3[];
static Base_Class bases_S1863C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1863C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1863C2[];
extern void _ZN7S1863C2D1Ev();
extern void _ZN7S1863C2D0Ev();
extern void _ZN7S1863C32v6Ev();
extern void _ZN7S1863C32v7Ev();
extern void _ZN7S1863C32v8Ev();
extern void _ZN7S1863C32v9Ev();
extern void _ZN7S1863C33v10Ev();
extern void _ZN7S1863C33v11Ev();
extern void _ZN7S1863C33v12Ev();
extern void _ZN7S1863C23v13Ev();
extern void _ZN7S1863C23v14Ev();
extern void _ZN7S1863C23v15Ev();
extern void _ZN7S1863C23v16Ev();
extern void _ZN7S1863C23v17Ev();
extern void _ZN7S1863C23v18Ev();
extern void _ZN7S1863C23v19Ev();
extern void _ZN7S1863C23v20Ev();
extern void _ZN7S1863C23v21Ev();
extern void _ZN7S1863C23v22Ev();
static  VTBL_ENTRY vtc_S1863C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1863C2[0]),
  (VTBL_ENTRY)&_ZN7S1863C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1863C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1863C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1863C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1863C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1863C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1863C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1863C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1863C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v22Ev,
};
extern VTBL_ENTRY _ZTI7S1863C2[];
extern  VTBL_ENTRY _ZTV7S1863C2[];
Class_Descriptor cd_S1863C2 = {  "S1863C2", // class name
  bases_S1863C2, 2,
  &(vtc_S1863C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S1863C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1863C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1863C1  : S1863C2 {
  void *s1863c1f0[3];
  ::S1856C13_nt s1863c1f1;
  ::S1850C10_nt s1863c1f2;
  virtual  ~S1863C1(); // _ZN7S1863C1D1Ev
  virtual void  v1(); // _ZN7S1863C12v1Ev
  virtual void  v2(); // _ZN7S1863C12v2Ev
  virtual void  v3(); // _ZN7S1863C12v3Ev
  virtual void  v4(); // _ZN7S1863C12v4Ev
  virtual void  v5(); // _ZN7S1863C12v5Ev
  S1863C1(); // tgen
};
//SIG(1 S1863C1) C1{ BC2{ BC3{ BC4{ vd m} vd v6 v7 v8 v9 v10 v11 v12 Fp[2]} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] FC5{ BC6{ vd v24} v23 Fp} FC7{ BC8{ vd v26} v25 Fp} FC9{ m Fp} FC10{ m Fp} Fc FC11{ m Fi}} vd v1 v2 v3 v4 v5 Fp[3] FC12{ m Fp} FC13{ m Fp}}


 S1863C1 ::~S1863C1(){ note_dtor("S1863C1", this);}
void  S1863C1 ::v1(){vfunc_called(this, "_ZN7S1863C12v1Ev");}
void  S1863C1 ::v2(){vfunc_called(this, "_ZN7S1863C12v2Ev");}
void  S1863C1 ::v3(){vfunc_called(this, "_ZN7S1863C12v3Ev");}
void  S1863C1 ::v4(){vfunc_called(this, "_ZN7S1863C12v4Ev");}
void  S1863C1 ::v5(){vfunc_called(this, "_ZN7S1863C12v5Ev");}
S1863C1 ::S1863C1(){ note_ctor("S1863C1", this);} // tgen

static void Test_S1863C1()
{
  extern Class_Descriptor cd_S1863C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,19)];
    init_test(&cd_S1863C1, buf);
    S1863C1 *dp, &lv = *(dp=new (buf) S1863C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,72), "sizeof(S1863C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1863C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1863C3*)(S1863C2*), 0, "S1863C1");
    check_base_class_offset(lv, (S1863C3*)(S1863C2*), 0, "S1863C1");
    check_base_class_offset(lv, (S1863C2*), 0, "S1863C1");
    check_field_offset(lv, s1863c1f0, ABISELECT(88,52), "S1863C1.s1863c1f0");
    check_field_offset(lv, s1863c1f1, ABISELECT(112,64), "S1863C1.s1863c1f1");
    check_field_offset(lv, s1863c1f2, ABISELECT(120,68), "S1863C1.s1863c1f2");
    test_class_info(&lv, &cd_S1863C1);
    dp->~S1863C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1863C1(Test_S1863C1, "S1863C1", ABISELECT(128,72));

#else // __cplusplus

extern void _ZN7S1863C1C1Ev();
extern void _ZN7S1863C1D1Ev();
Name_Map name_map_S1863C1[] = {
  NSPAIR(_ZN7S1863C1C1Ev),
  NSPAIR(_ZN7S1863C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1863C3;
extern VTBL_ENTRY _ZTI7S1863C3[];
extern  VTBL_ENTRY _ZTV7S1863C3[];
extern Class_Descriptor cd_S1863C2;
extern VTBL_ENTRY _ZTI7S1863C2[];
extern  VTBL_ENTRY _ZTV7S1863C2[];
static Base_Class bases_S1863C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1863C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1863C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1863C1[];
extern void _ZN7S1863C1D1Ev();
extern void _ZN7S1863C1D0Ev();
extern void _ZN7S1863C32v6Ev();
extern void _ZN7S1863C32v7Ev();
extern void _ZN7S1863C32v8Ev();
extern void _ZN7S1863C32v9Ev();
extern void _ZN7S1863C33v10Ev();
extern void _ZN7S1863C33v11Ev();
extern void _ZN7S1863C33v12Ev();
extern void _ZN7S1863C23v13Ev();
extern void _ZN7S1863C23v14Ev();
extern void _ZN7S1863C23v15Ev();
extern void _ZN7S1863C23v16Ev();
extern void _ZN7S1863C23v17Ev();
extern void _ZN7S1863C23v18Ev();
extern void _ZN7S1863C23v19Ev();
extern void _ZN7S1863C23v20Ev();
extern void _ZN7S1863C23v21Ev();
extern void _ZN7S1863C23v22Ev();
extern void _ZN7S1863C12v1Ev();
extern void _ZN7S1863C12v2Ev();
extern void _ZN7S1863C12v3Ev();
extern void _ZN7S1863C12v4Ev();
extern void _ZN7S1863C12v5Ev();
static  VTBL_ENTRY vtc_S1863C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1863C1[0]),
  (VTBL_ENTRY)&_ZN7S1863C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1863C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1863C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1863C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1863C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1863C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1863C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1863C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1863C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1863C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1863C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1863C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1863C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1863C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1863C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1863C1[];
extern  VTBL_ENTRY _ZTV7S1863C1[];
Class_Descriptor cd_S1863C1 = {  "S1863C1", // class name
  bases_S1863C1, 3,
  &(vtc_S1863C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,72), // object size
  NSPAIRA(_ZTI7S1863C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1863C1),26, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1849C3  : S1850C4_nt {
  void *s1849c3f0[2];
  virtual  ~S1849C3(); // _ZN7S1849C3D1Ev
  virtual void  v10(); // _ZN7S1849C33v10Ev
  virtual void  v11(); // _ZN7S1849C33v11Ev
  virtual void  v12(); // _ZN7S1849C33v12Ev
  virtual void  v13(); // _ZN7S1849C33v13Ev
  virtual void  v14(); // _ZN7S1849C33v14Ev
  virtual void  v15(); // _ZN7S1849C33v15Ev
  virtual void  v16(); // _ZN7S1849C33v16Ev
  S1849C3(); // tgen
};
//SIG(-1 S1849C3) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S1849C3 ::~S1849C3(){ note_dtor("S1849C3", this);}
void  S1849C3 ::v10(){vfunc_called(this, "_ZN7S1849C33v10Ev");}
void  S1849C3 ::v11(){vfunc_called(this, "_ZN7S1849C33v11Ev");}
void  S1849C3 ::v12(){vfunc_called(this, "_ZN7S1849C33v12Ev");}
void  S1849C3 ::v13(){vfunc_called(this, "_ZN7S1849C33v13Ev");}
void  S1849C3 ::v14(){vfunc_called(this, "_ZN7S1849C33v14Ev");}
void  S1849C3 ::v15(){vfunc_called(this, "_ZN7S1849C33v15Ev");}
void  S1849C3 ::v16(){vfunc_called(this, "_ZN7S1849C33v16Ev");}
S1849C3 ::S1849C3(){ note_ctor("S1849C3", this);} // tgen

static void Test_S1849C3()
{
  extern Class_Descriptor cd_S1849C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1849C3, buf);
    S1849C3 *dp, &lv = *(dp=new (buf) S1849C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1849C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1849C3)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S1849C3");
    check_field_offset(lv, s1849c3f0, ABISELECT(8,4), "S1849C3.s1849c3f0");
    test_class_info(&lv, &cd_S1849C3);
    dp->~S1849C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1849C3(Test_S1849C3, "S1849C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1849C3C1Ev();
extern void _ZN7S1849C3D1Ev();
Name_Map name_map_S1849C3[] = {
  NSPAIR(_ZN7S1849C3C1Ev),
  NSPAIR(_ZN7S1849C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S1849C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1849C3[];
extern void _ZN7S1849C3D1Ev();
extern void _ZN7S1849C3D0Ev();
extern void _ZN7S1849C33v10Ev();
extern void _ZN7S1849C33v11Ev();
extern void _ZN7S1849C33v12Ev();
extern void _ZN7S1849C33v13Ev();
extern void _ZN7S1849C33v14Ev();
extern void _ZN7S1849C33v15Ev();
extern void _ZN7S1849C33v16Ev();
static  VTBL_ENTRY vtc_S1849C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1849C3[0]),
  (VTBL_ENTRY)&_ZN7S1849C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1849C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v16Ev,
};
extern VTBL_ENTRY _ZTI7S1849C3[];
extern  VTBL_ENTRY _ZTV7S1849C3[];
Class_Descriptor cd_S1849C3 = {  "S1849C3", // class name
  bases_S1849C3, 1,
  &(vtc_S1849C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1849C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1849C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1849C2_nt  : S1849C3 {
  int s1849c2f0;
  void *s1849c2f1;
  ::S1865C7 s1849c2f2;
  ::S1850C5_nt s1849c2f3;
  ::S3593C21_nt s1849c2f4;
  virtual  ~S1849C2_nt(); // _ZN10S1849C2_ntD1Ev
  virtual void  v17(); // _ZN10S1849C2_nt3v17Ev
  virtual void  v18(); // _ZN10S1849C2_nt3v18Ev
  virtual void  v19(); // _ZN10S1849C2_nt3v19Ev
  virtual void  v20(); // _ZN10S1849C2_nt3v20Ev
  virtual void  v21(); // _ZN10S1849C2_nt3v21Ev
  virtual void  v22(); // _ZN10S1849C2_nt3v22Ev
  virtual void  v23(); // _ZN10S1849C2_nt3v23Ev
  virtual void  v24(); // _ZN10S1849C2_nt3v24Ev
  virtual void  v25(); // _ZN10S1849C2_nt3v25Ev
  S1849C2_nt(); // tgen
};
//SIG(-1 S1849C2_nt) C1{ BC2{ BC3{ vd m} vd v10 v11 v12 v13 v14 v15 v16 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fi Fp FC4{ BC5{ vd v18} v17 Fp} FC6{ BC7{ vd v20} v19 Fp} FC8{ m Fp}}


 S1849C2_nt ::~S1849C2_nt(){ note_dtor("S1849C2_nt", this);}
void  S1849C2_nt ::v17(){vfunc_called(this, "_ZN10S1849C2_nt3v17Ev");}
void  S1849C2_nt ::v18(){vfunc_called(this, "_ZN10S1849C2_nt3v18Ev");}
void  S1849C2_nt ::v19(){vfunc_called(this, "_ZN10S1849C2_nt3v19Ev");}
void  S1849C2_nt ::v20(){vfunc_called(this, "_ZN10S1849C2_nt3v20Ev");}
void  S1849C2_nt ::v21(){vfunc_called(this, "_ZN10S1849C2_nt3v21Ev");}
void  S1849C2_nt ::v22(){vfunc_called(this, "_ZN10S1849C2_nt3v22Ev");}
void  S1849C2_nt ::v23(){vfunc_called(this, "_ZN10S1849C2_nt3v23Ev");}
void  S1849C2_nt ::v24(){vfunc_called(this, "_ZN10S1849C2_nt3v24Ev");}
void  S1849C2_nt ::v25(){vfunc_called(this, "_ZN10S1849C2_nt3v25Ev");}
S1849C2_nt ::S1849C2_nt(){ note_ctor("S1849C2_nt", this);} // tgen

//skip512 S1849C2_nt

#else // __cplusplus

extern void _ZN10S1849C2_ntC1Ev();
extern void _ZN10S1849C2_ntD1Ev();
Name_Map name_map_S1849C2_nt[] = {
  NSPAIR(_ZN10S1849C2_ntC1Ev),
  NSPAIR(_ZN10S1849C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1849C3;
extern VTBL_ENTRY _ZTI7S1849C3[];
extern  VTBL_ENTRY _ZTV7S1849C3[];
static Base_Class bases_S1849C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1849C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1849C2_nt[];
extern void _ZN10S1849C2_ntD1Ev();
extern void _ZN10S1849C2_ntD0Ev();
extern void _ZN7S1849C33v10Ev();
extern void _ZN7S1849C33v11Ev();
extern void _ZN7S1849C33v12Ev();
extern void _ZN7S1849C33v13Ev();
extern void _ZN7S1849C33v14Ev();
extern void _ZN7S1849C33v15Ev();
extern void _ZN7S1849C33v16Ev();
extern void _ZN10S1849C2_nt3v17Ev();
extern void _ZN10S1849C2_nt3v18Ev();
extern void _ZN10S1849C2_nt3v19Ev();
extern void _ZN10S1849C2_nt3v20Ev();
extern void _ZN10S1849C2_nt3v21Ev();
extern void _ZN10S1849C2_nt3v22Ev();
extern void _ZN10S1849C2_nt3v23Ev();
extern void _ZN10S1849C2_nt3v24Ev();
extern void _ZN10S1849C2_nt3v25Ev();
static  VTBL_ENTRY vtc_S1849C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1849C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1849C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1849C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v16Ev,
  (VTBL_ENTRY)&_ZN10S1849C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1849C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1849C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1849C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1849C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1849C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1849C2_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1849C2_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1849C2_nt3v25Ev,
};
extern VTBL_ENTRY _ZTI10S1849C2_nt[];
VTBL_ENTRY *P__ZTI10S1849C2_nt = _ZTI10S1849C2_nt; 
extern  VTBL_ENTRY _ZTV10S1849C2_nt[];
Class_Descriptor cd_S1849C2_nt = {  "S1849C2_nt", // class name
  bases_S1849C2_nt, 2,
  &(vtc_S1849C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI10S1849C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1849C2_nt),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1849C10  {
  virtual  ~S1849C10(); // _ZN8S1849C10D1Ev
  virtual void  v26(); // _ZN8S1849C103v26Ev
  virtual void  v27(); // _ZN8S1849C103v27Ev
  virtual void  v28(); // _ZN8S1849C103v28Ev
  S1849C10(); // tgen
};
//SIG(-1 S1849C10) C1{ vd v1 v2 v3}


 S1849C10 ::~S1849C10(){ note_dtor("S1849C10", this);}
void  S1849C10 ::v26(){vfunc_called(this, "_ZN8S1849C103v26Ev");}
void  S1849C10 ::v27(){vfunc_called(this, "_ZN8S1849C103v27Ev");}
void  S1849C10 ::v28(){vfunc_called(this, "_ZN8S1849C103v28Ev");}
S1849C10 ::S1849C10(){ note_ctor("S1849C10", this);} // tgen

static void Test_S1849C10()
{
  extern Class_Descriptor cd_S1849C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1849C10, buf);
    S1849C10 *dp, &lv = *(dp=new (buf) S1849C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1849C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1849C10)");
    test_class_info(&lv, &cd_S1849C10);
    dp->~S1849C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1849C10(Test_S1849C10, "S1849C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S1849C10C1Ev();
extern void _ZN8S1849C10D1Ev();
Name_Map name_map_S1849C10[] = {
  NSPAIR(_ZN8S1849C10C1Ev),
  NSPAIR(_ZN8S1849C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1849C10[];
extern void _ZN8S1849C10D1Ev();
extern void _ZN8S1849C10D0Ev();
extern void _ZN8S1849C103v26Ev();
extern void _ZN8S1849C103v27Ev();
extern void _ZN8S1849C103v28Ev();
static  VTBL_ENTRY vtc_S1849C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1849C10[0]),
  (VTBL_ENTRY)&_ZN8S1849C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1849C10D0Ev,
  (VTBL_ENTRY)&_ZN8S1849C103v26Ev,
  (VTBL_ENTRY)&_ZN8S1849C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1849C103v28Ev,
};
extern VTBL_ENTRY _ZTI8S1849C10[];
extern  VTBL_ENTRY _ZTV8S1849C10[];
Class_Descriptor cd_S1849C10 = {  "S1849C10", // class name
  0,0,//no base classes
  &(vtc_S1849C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S1849C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1849C10),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1849C1  : S1849C2_nt , S1849C10 {
  void *s1849c1f0;
  ::S1865C15 s1849c1f1;
  virtual  ~S1849C1(); // _ZN7S1849C1D1Ev
  virtual void  v1(); // _ZN7S1849C12v1Ev
  virtual void  v2(); // _ZN7S1849C12v2Ev
  virtual void  v3(); // _ZN7S1849C12v3Ev
  virtual void  v4(); // _ZN7S1849C12v4Ev
  virtual void  v5(); // _ZN7S1849C12v5Ev
  virtual void  v6(); // _ZN7S1849C12v6Ev
  virtual void  v7(); // _ZN7S1849C12v7Ev
  virtual void  v8(); // _ZN7S1849C12v8Ev
  virtual void  v9(); // _ZN7S1849C12v9Ev
  S1849C1(); // tgen
};
//SIG(1 S1849C1) C1{ BC2{ BC3{ BC4{ vd m} vd v10 v11 v12 v13 v14 v15 v16 Fp[2]} vd v17 v18 v19 v20 v21 v22 v23 v24 v25 Fi Fp FC5{ BC6{ vd v30} v29 Fp} FC7{ BC8{ vd v32} v31 Fp} FC9{ m Fp}} BC10{ vd v26 v27 v28} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp FC11{ m Fp}}


 S1849C1 ::~S1849C1(){ note_dtor("S1849C1", this);}
void  S1849C1 ::v1(){vfunc_called(this, "_ZN7S1849C12v1Ev");}
void  S1849C1 ::v2(){vfunc_called(this, "_ZN7S1849C12v2Ev");}
void  S1849C1 ::v3(){vfunc_called(this, "_ZN7S1849C12v3Ev");}
void  S1849C1 ::v4(){vfunc_called(this, "_ZN7S1849C12v4Ev");}
void  S1849C1 ::v5(){vfunc_called(this, "_ZN7S1849C12v5Ev");}
void  S1849C1 ::v6(){vfunc_called(this, "_ZN7S1849C12v6Ev");}
void  S1849C1 ::v7(){vfunc_called(this, "_ZN7S1849C12v7Ev");}
void  S1849C1 ::v8(){vfunc_called(this, "_ZN7S1849C12v8Ev");}
void  S1849C1 ::v9(){vfunc_called(this, "_ZN7S1849C12v9Ev");}
S1849C1 ::S1849C1(){ note_ctor("S1849C1", this);} // tgen

static void Test_S1849C1()
{
  extern Class_Descriptor cd_S1849C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[14];
    init_test(&cd_S1849C1, buf);
    S1849C1 *dp, &lv = *(dp=new (buf) S1849C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,52), "sizeof(S1849C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1849C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1849C3*)(S1849C2_nt*), 0, "S1849C1");
    check_base_class_offset(lv, (S1849C3*)(S1849C2_nt*), 0, "S1849C1");
    check_base_class_offset(lv, (S1849C2_nt*), 0, "S1849C1");
    check_base_class_offset(lv, (S1849C10*), ABISELECT(80,40), "S1849C1");
    check_field_offset(lv, s1849c1f0, ABISELECT(88,44), "S1849C1.s1849c1f0");
    check_field_offset(lv, s1849c1f1, ABISELECT(96,48), "S1849C1.s1849c1f1");
    test_class_info(&lv, &cd_S1849C1);
    dp->~S1849C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1849C1(Test_S1849C1, "S1849C1", ABISELECT(104,52));

#else // __cplusplus

extern void _ZN7S1849C1C1Ev();
extern void _ZN7S1849C1D1Ev();
Name_Map name_map_S1849C1[] = {
  NSPAIR(_ZN7S1849C1C1Ev),
  NSPAIR(_ZN7S1849C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1849C3;
extern VTBL_ENTRY _ZTI7S1849C3[];
extern  VTBL_ENTRY _ZTV7S1849C3[];
extern Class_Descriptor cd_S1849C2_nt;
extern VTBL_ENTRY _ZTI10S1849C2_nt[];
extern  VTBL_ENTRY _ZTV10S1849C2_nt[];
extern Class_Descriptor cd_S1849C10;
extern VTBL_ENTRY _ZTI8S1849C10[];
extern  VTBL_ENTRY _ZTV8S1849C10[];
static Base_Class bases_S1849C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1849C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1849C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1849C10,    ABISELECT(80,40), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1849C1[];
extern void _ZN7S1849C1D1Ev();
extern void _ZN7S1849C1D0Ev();
extern void _ZN7S1849C33v10Ev();
extern void _ZN7S1849C33v11Ev();
extern void _ZN7S1849C33v12Ev();
extern void _ZN7S1849C33v13Ev();
extern void _ZN7S1849C33v14Ev();
extern void _ZN7S1849C33v15Ev();
extern void _ZN7S1849C33v16Ev();
extern void _ZN10S1849C2_nt3v17Ev();
extern void _ZN10S1849C2_nt3v18Ev();
extern void _ZN10S1849C2_nt3v19Ev();
extern void _ZN10S1849C2_nt3v20Ev();
extern void _ZN10S1849C2_nt3v21Ev();
extern void _ZN10S1849C2_nt3v22Ev();
extern void _ZN10S1849C2_nt3v23Ev();
extern void _ZN10S1849C2_nt3v24Ev();
extern void _ZN10S1849C2_nt3v25Ev();
extern void _ZN7S1849C12v1Ev();
extern void _ZN7S1849C12v2Ev();
extern void _ZN7S1849C12v3Ev();
extern void _ZN7S1849C12v4Ev();
extern void _ZN7S1849C12v5Ev();
extern void _ZN7S1849C12v6Ev();
extern void _ZN7S1849C12v7Ev();
extern void _ZN7S1849C12v8Ev();
extern void _ZN7S1849C12v9Ev();
extern void ABISELECT(_ZThn80_N7S1849C1D1Ev,_ZThn40_N7S1849C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S1849C1D0Ev,_ZThn40_N7S1849C1D0Ev)();
extern void _ZN8S1849C103v26Ev();
extern void _ZN8S1849C103v27Ev();
extern void _ZN8S1849C103v28Ev();
static  VTBL_ENTRY vtc_S1849C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1849C1[0]),
  (VTBL_ENTRY)&_ZN7S1849C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1849C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1849C33v16Ev,
  (VTBL_ENTRY)&_ZN10S1849C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1849C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1849C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1849C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1849C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1849C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1849C2_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1849C2_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1849C2_nt3v25Ev,
  (VTBL_ENTRY)&_ZN7S1849C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1849C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1849C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1849C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1849C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1849C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1849C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1849C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1849C12v9Ev,
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S1849C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S1849C1D1Ev,_ZThn40_N7S1849C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S1849C1D0Ev,_ZThn40_N7S1849C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1849C103v26Ev,
  (VTBL_ENTRY)&_ZN8S1849C103v27Ev,
  (VTBL_ENTRY)&_ZN8S1849C103v28Ev,
};
extern VTBL_ENTRY _ZTI7S1849C1[];
extern  VTBL_ENTRY _ZTV7S1849C1[];
Class_Descriptor cd_S1849C1 = {  "S1849C1", // class name
  bases_S1849C1, 4,
  &(vtc_S1849C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,52), // object size
  NSPAIRA(_ZTI7S1849C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1849C1),36, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1864C3  : S1850C4_nt {
  void *s1864c3f0[2];
  virtual  ~S1864C3(); // _ZN7S1864C3D1Ev
  virtual void  v6(); // _ZN7S1864C32v6Ev
  virtual void  v7(); // _ZN7S1864C32v7Ev
  virtual void  v8(); // _ZN7S1864C32v8Ev
  virtual void  v9(); // _ZN7S1864C32v9Ev
  virtual void  v10(); // _ZN7S1864C33v10Ev
  virtual void  v11(); // _ZN7S1864C33v11Ev
  virtual void  v12(); // _ZN7S1864C33v12Ev
  S1864C3(); // tgen
};
//SIG(-1 S1864C3) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S1864C3 ::~S1864C3(){ note_dtor("S1864C3", this);}
void  S1864C3 ::v6(){vfunc_called(this, "_ZN7S1864C32v6Ev");}
void  S1864C3 ::v7(){vfunc_called(this, "_ZN7S1864C32v7Ev");}
void  S1864C3 ::v8(){vfunc_called(this, "_ZN7S1864C32v8Ev");}
void  S1864C3 ::v9(){vfunc_called(this, "_ZN7S1864C32v9Ev");}
void  S1864C3 ::v10(){vfunc_called(this, "_ZN7S1864C33v10Ev");}
void  S1864C3 ::v11(){vfunc_called(this, "_ZN7S1864C33v11Ev");}
void  S1864C3 ::v12(){vfunc_called(this, "_ZN7S1864C33v12Ev");}
S1864C3 ::S1864C3(){ note_ctor("S1864C3", this);} // tgen

static void Test_S1864C3()
{
  extern Class_Descriptor cd_S1864C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1864C3, buf);
    S1864C3 *dp, &lv = *(dp=new (buf) S1864C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1864C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1864C3)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S1864C3");
    check_field_offset(lv, s1864c3f0, ABISELECT(8,4), "S1864C3.s1864c3f0");
    test_class_info(&lv, &cd_S1864C3);
    dp->~S1864C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1864C3(Test_S1864C3, "S1864C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1864C3C1Ev();
extern void _ZN7S1864C3D1Ev();
Name_Map name_map_S1864C3[] = {
  NSPAIR(_ZN7S1864C3C1Ev),
  NSPAIR(_ZN7S1864C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S1864C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1864C3[];
extern void _ZN7S1864C3D1Ev();
extern void _ZN7S1864C3D0Ev();
extern void _ZN7S1864C32v6Ev();
extern void _ZN7S1864C32v7Ev();
extern void _ZN7S1864C32v8Ev();
extern void _ZN7S1864C32v9Ev();
extern void _ZN7S1864C33v10Ev();
extern void _ZN7S1864C33v11Ev();
extern void _ZN7S1864C33v12Ev();
static  VTBL_ENTRY vtc_S1864C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1864C3[0]),
  (VTBL_ENTRY)&_ZN7S1864C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1864C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1864C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1864C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1864C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1864C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1864C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1864C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1864C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S1864C3[];
extern  VTBL_ENTRY _ZTV7S1864C3[];
Class_Descriptor cd_S1864C3 = {  "S1864C3", // class name
  bases_S1864C3, 1,
  &(vtc_S1864C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1864C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1864C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1864C2  : S1864C3 {
  int s1864c2f0[2];
  ::S1865C7 s1864c2f1;
  ::S1850C5_nt s1864c2f2;
  ::S3593C21_nt s1864c2f3;
  ::S1865C15 s1864c2f4;
  char s1864c2f5;
  ::S16113C2_nt s1864c2f6;
  virtual  ~S1864C2(); // _ZN7S1864C2D1Ev
  virtual void  v13(); // _ZN7S1864C23v13Ev
  virtual void  v14(); // _ZN7S1864C23v14Ev
  virtual void  v15(); // _ZN7S1864C23v15Ev
  virtual void  v16(); // _ZN7S1864C23v16Ev
  virtual void  v17(); // _ZN7S1864C23v17Ev
  virtual void  v18(); // _ZN7S1864C23v18Ev
  virtual void  v19(); // _ZN7S1864C23v19Ev
  virtual void  v20(); // _ZN7S1864C23v20Ev
  virtual void  v21(); // _ZN7S1864C23v21Ev
  virtual void  v22(); // _ZN7S1864C23v22Ev
  S1864C2(); // tgen
};
//SIG(-1 S1864C2) C1{ BC2{ BC3{ vd m} vd v11 v12 v13 v14 v15 v16 v17 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] FC4{ BC5{ vd v19} v18 Fp} FC6{ BC7{ vd v21} v20 Fp} FC8{ m Fp} FC9{ m Fp} Fc FC10{ m Fi}}


 S1864C2 ::~S1864C2(){ note_dtor("S1864C2", this);}
void  S1864C2 ::v13(){vfunc_called(this, "_ZN7S1864C23v13Ev");}
void  S1864C2 ::v14(){vfunc_called(this, "_ZN7S1864C23v14Ev");}
void  S1864C2 ::v15(){vfunc_called(this, "_ZN7S1864C23v15Ev");}
void  S1864C2 ::v16(){vfunc_called(this, "_ZN7S1864C23v16Ev");}
void  S1864C2 ::v17(){vfunc_called(this, "_ZN7S1864C23v17Ev");}
void  S1864C2 ::v18(){vfunc_called(this, "_ZN7S1864C23v18Ev");}
void  S1864C2 ::v19(){vfunc_called(this, "_ZN7S1864C23v19Ev");}
void  S1864C2 ::v20(){vfunc_called(this, "_ZN7S1864C23v20Ev");}
void  S1864C2 ::v21(){vfunc_called(this, "_ZN7S1864C23v21Ev");}
void  S1864C2 ::v22(){vfunc_called(this, "_ZN7S1864C23v22Ev");}
S1864C2 ::S1864C2(){ note_ctor("S1864C2", this);} // tgen

static void Test_S1864C2()
{
  extern Class_Descriptor cd_S1864C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S1864C2, buf);
    S1864C2 *dp, &lv = *(dp=new (buf) S1864C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S1864C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1864C2)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1864C3*), 0, "S1864C2");
    check_base_class_offset(lv, (S1864C3*), 0, "S1864C2");
    check_field_offset(lv, s1864c2f0, ABISELECT(24,12), "S1864C2.s1864c2f0");
    check_field_offset(lv, s1864c2f1, ABISELECT(32,20), "S1864C2.s1864c2f1");
    check_field_offset(lv, s1864c2f2, ABISELECT(48,28), "S1864C2.s1864c2f2");
    check_field_offset(lv, s1864c2f3, ABISELECT(64,36), "S1864C2.s1864c2f3");
    check_field_offset(lv, s1864c2f4, ABISELECT(72,40), "S1864C2.s1864c2f4");
    check_field_offset(lv, s1864c2f5, ABISELECT(80,44), "S1864C2.s1864c2f5");
    check_field_offset(lv, s1864c2f6, ABISELECT(84,48), "S1864C2.s1864c2f6");
    test_class_info(&lv, &cd_S1864C2);
    dp->~S1864C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1864C2(Test_S1864C2, "S1864C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S1864C2C1Ev();
extern void _ZN7S1864C2D1Ev();
Name_Map name_map_S1864C2[] = {
  NSPAIR(_ZN7S1864C2C1Ev),
  NSPAIR(_ZN7S1864C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1864C3;
extern VTBL_ENTRY _ZTI7S1864C3[];
extern  VTBL_ENTRY _ZTV7S1864C3[];
static Base_Class bases_S1864C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1864C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1864C2[];
extern void _ZN7S1864C2D1Ev();
extern void _ZN7S1864C2D0Ev();
extern void _ZN7S1864C32v6Ev();
extern void _ZN7S1864C32v7Ev();
extern void _ZN7S1864C32v8Ev();
extern void _ZN7S1864C32v9Ev();
extern void _ZN7S1864C33v10Ev();
extern void _ZN7S1864C33v11Ev();
extern void _ZN7S1864C33v12Ev();
extern void _ZN7S1864C23v13Ev();
extern void _ZN7S1864C23v14Ev();
extern void _ZN7S1864C23v15Ev();
extern void _ZN7S1864C23v16Ev();
extern void _ZN7S1864C23v17Ev();
extern void _ZN7S1864C23v18Ev();
extern void _ZN7S1864C23v19Ev();
extern void _ZN7S1864C23v20Ev();
extern void _ZN7S1864C23v21Ev();
extern void _ZN7S1864C23v22Ev();
static  VTBL_ENTRY vtc_S1864C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1864C2[0]),
  (VTBL_ENTRY)&_ZN7S1864C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1864C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1864C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1864C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1864C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1864C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1864C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1864C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1864C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v22Ev,
};
extern VTBL_ENTRY _ZTI7S1864C2[];
extern  VTBL_ENTRY _ZTV7S1864C2[];
Class_Descriptor cd_S1864C2 = {  "S1864C2", // class name
  bases_S1864C2, 2,
  &(vtc_S1864C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S1864C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1864C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1864C1  : S1864C2 {
  void *s1864c1f0[6];
  int s1864c1f1;
  ::S1856C13_nt s1864c1f2;
  virtual  ~S1864C1(); // _ZN7S1864C1D1Ev
  virtual void  v1(); // _ZN7S1864C12v1Ev
  virtual void  v2(); // _ZN7S1864C12v2Ev
  virtual void  v3(); // _ZN7S1864C12v3Ev
  virtual void  v4(); // _ZN7S1864C12v4Ev
  virtual void  v5(); // _ZN7S1864C12v5Ev
  S1864C1(); // tgen
};
//SIG(1 S1864C1) C1{ BC2{ BC3{ BC4{ vd m} vd v6 v7 v8 v9 v10 v11 v12 Fp[2]} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] FC5{ BC6{ vd v24} v23 Fp} FC7{ BC8{ vd v26} v25 Fp} FC9{ m Fp} FC10{ m Fp} Fc FC11{ m Fi}} vd v1 v2 v3 v4 v5 Fp[6] Fi FC12{ m Fp}}


 S1864C1 ::~S1864C1(){ note_dtor("S1864C1", this);}
void  S1864C1 ::v1(){vfunc_called(this, "_ZN7S1864C12v1Ev");}
void  S1864C1 ::v2(){vfunc_called(this, "_ZN7S1864C12v2Ev");}
void  S1864C1 ::v3(){vfunc_called(this, "_ZN7S1864C12v3Ev");}
void  S1864C1 ::v4(){vfunc_called(this, "_ZN7S1864C12v4Ev");}
void  S1864C1 ::v5(){vfunc_called(this, "_ZN7S1864C12v5Ev");}
S1864C1 ::S1864C1(){ note_ctor("S1864C1", this);} // tgen

static void Test_S1864C1()
{
  extern Class_Descriptor cd_S1864C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S1864C1, buf);
    S1864C1 *dp, &lv = *(dp=new (buf) S1864C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S1864C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1864C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1864C3*)(S1864C2*), 0, "S1864C1");
    check_base_class_offset(lv, (S1864C3*)(S1864C2*), 0, "S1864C1");
    check_base_class_offset(lv, (S1864C2*), 0, "S1864C1");
    check_field_offset(lv, s1864c1f0, ABISELECT(88,52), "S1864C1.s1864c1f0");
    check_field_offset(lv, s1864c1f1, ABISELECT(136,76), "S1864C1.s1864c1f1");
    check_field_offset(lv, s1864c1f2, ABISELECT(144,80), "S1864C1.s1864c1f2");
    test_class_info(&lv, &cd_S1864C1);
    dp->~S1864C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1864C1(Test_S1864C1, "S1864C1", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN7S1864C1C1Ev();
extern void _ZN7S1864C1D1Ev();
Name_Map name_map_S1864C1[] = {
  NSPAIR(_ZN7S1864C1C1Ev),
  NSPAIR(_ZN7S1864C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1864C3;
extern VTBL_ENTRY _ZTI7S1864C3[];
extern  VTBL_ENTRY _ZTV7S1864C3[];
extern Class_Descriptor cd_S1864C2;
extern VTBL_ENTRY _ZTI7S1864C2[];
extern  VTBL_ENTRY _ZTV7S1864C2[];
static Base_Class bases_S1864C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1864C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1864C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1864C1[];
extern void _ZN7S1864C1D1Ev();
extern void _ZN7S1864C1D0Ev();
extern void _ZN7S1864C32v6Ev();
extern void _ZN7S1864C32v7Ev();
extern void _ZN7S1864C32v8Ev();
extern void _ZN7S1864C32v9Ev();
extern void _ZN7S1864C33v10Ev();
extern void _ZN7S1864C33v11Ev();
extern void _ZN7S1864C33v12Ev();
extern void _ZN7S1864C23v13Ev();
extern void _ZN7S1864C23v14Ev();
extern void _ZN7S1864C23v15Ev();
extern void _ZN7S1864C23v16Ev();
extern void _ZN7S1864C23v17Ev();
extern void _ZN7S1864C23v18Ev();
extern void _ZN7S1864C23v19Ev();
extern void _ZN7S1864C23v20Ev();
extern void _ZN7S1864C23v21Ev();
extern void _ZN7S1864C23v22Ev();
extern void _ZN7S1864C12v1Ev();
extern void _ZN7S1864C12v2Ev();
extern void _ZN7S1864C12v3Ev();
extern void _ZN7S1864C12v4Ev();
extern void _ZN7S1864C12v5Ev();
static  VTBL_ENTRY vtc_S1864C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1864C1[0]),
  (VTBL_ENTRY)&_ZN7S1864C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1864C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1864C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1864C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1864C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1864C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1864C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1864C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1864C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1864C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1864C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1864C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1864C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1864C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1864C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1864C1[];
extern  VTBL_ENTRY _ZTV7S1864C1[];
Class_Descriptor cd_S1864C1 = {  "S1864C1", // class name
  bases_S1864C1, 3,
  &(vtc_S1864C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI7S1864C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1864C1),26, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1858C3  : S1850C4_nt {
  void *s1858c3f0[2];
  virtual  ~S1858C3(); // _ZN7S1858C3D1Ev
  virtual void  v5(); // _ZN7S1858C32v5Ev
  virtual void  v6(); // _ZN7S1858C32v6Ev
  virtual void  v7(); // _ZN7S1858C32v7Ev
  virtual void  v8(); // _ZN7S1858C32v8Ev
  virtual void  v9(); // _ZN7S1858C32v9Ev
  virtual void  v10(); // _ZN7S1858C33v10Ev
  virtual void  v11(); // _ZN7S1858C33v11Ev
  S1858C3(); // tgen
};
//SIG(-1 S1858C3) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S1858C3 ::~S1858C3(){ note_dtor("S1858C3", this);}
void  S1858C3 ::v5(){vfunc_called(this, "_ZN7S1858C32v5Ev");}
void  S1858C3 ::v6(){vfunc_called(this, "_ZN7S1858C32v6Ev");}
void  S1858C3 ::v7(){vfunc_called(this, "_ZN7S1858C32v7Ev");}
void  S1858C3 ::v8(){vfunc_called(this, "_ZN7S1858C32v8Ev");}
void  S1858C3 ::v9(){vfunc_called(this, "_ZN7S1858C32v9Ev");}
void  S1858C3 ::v10(){vfunc_called(this, "_ZN7S1858C33v10Ev");}
void  S1858C3 ::v11(){vfunc_called(this, "_ZN7S1858C33v11Ev");}
S1858C3 ::S1858C3(){ note_ctor("S1858C3", this);} // tgen

static void Test_S1858C3()
{
  extern Class_Descriptor cd_S1858C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1858C3, buf);
    S1858C3 *dp, &lv = *(dp=new (buf) S1858C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1858C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1858C3)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S1858C3");
    check_field_offset(lv, s1858c3f0, ABISELECT(8,4), "S1858C3.s1858c3f0");
    test_class_info(&lv, &cd_S1858C3);
    dp->~S1858C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1858C3(Test_S1858C3, "S1858C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1858C3C1Ev();
extern void _ZN7S1858C3D1Ev();
Name_Map name_map_S1858C3[] = {
  NSPAIR(_ZN7S1858C3C1Ev),
  NSPAIR(_ZN7S1858C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S1858C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1858C3[];
extern void _ZN7S1858C3D1Ev();
extern void _ZN7S1858C3D0Ev();
extern void _ZN7S1858C32v5Ev();
extern void _ZN7S1858C32v6Ev();
extern void _ZN7S1858C32v7Ev();
extern void _ZN7S1858C32v8Ev();
extern void _ZN7S1858C32v9Ev();
extern void _ZN7S1858C33v10Ev();
extern void _ZN7S1858C33v11Ev();
static  VTBL_ENTRY vtc_S1858C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1858C3[0]),
  (VTBL_ENTRY)&_ZN7S1858C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1858C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1858C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1858C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1858C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1858C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1858C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1858C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1858C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S1858C3[];
extern  VTBL_ENTRY _ZTV7S1858C3[];
Class_Descriptor cd_S1858C3 = {  "S1858C3", // class name
  bases_S1858C3, 1,
  &(vtc_S1858C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1858C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1858C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1858C2  : S1858C3 {
  int s1858c2f0[2];
  ::S1865C7 s1858c2f1;
  ::S1850C5_nt s1858c2f2;
  ::S3593C21_nt s1858c2f3;
  ::S1865C15 s1858c2f4;
  char s1858c2f5;
  ::S16113C2_nt s1858c2f6;
  virtual  ~S1858C2(); // _ZN7S1858C2D1Ev
  virtual void  v12(); // _ZN7S1858C23v12Ev
  virtual void  v13(); // _ZN7S1858C23v13Ev
  virtual void  v14(); // _ZN7S1858C23v14Ev
  virtual void  v15(); // _ZN7S1858C23v15Ev
  virtual void  v16(); // _ZN7S1858C23v16Ev
  virtual void  v17(); // _ZN7S1858C23v17Ev
  virtual void  v18(); // _ZN7S1858C23v18Ev
  virtual void  v19(); // _ZN7S1858C23v19Ev
  virtual void  v20(); // _ZN7S1858C23v20Ev
  virtual void  v21(); // _ZN7S1858C23v21Ev
  S1858C2(); // tgen
};
//SIG(-1 S1858C2) C1{ BC2{ BC3{ vd m} vd v11 v12 v13 v14 v15 v16 v17 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] FC4{ BC5{ vd v19} v18 Fp} FC6{ BC7{ vd v21} v20 Fp} FC8{ m Fp} FC9{ m Fp} Fc FC10{ m Fi}}


 S1858C2 ::~S1858C2(){ note_dtor("S1858C2", this);}
void  S1858C2 ::v12(){vfunc_called(this, "_ZN7S1858C23v12Ev");}
void  S1858C2 ::v13(){vfunc_called(this, "_ZN7S1858C23v13Ev");}
void  S1858C2 ::v14(){vfunc_called(this, "_ZN7S1858C23v14Ev");}
void  S1858C2 ::v15(){vfunc_called(this, "_ZN7S1858C23v15Ev");}
void  S1858C2 ::v16(){vfunc_called(this, "_ZN7S1858C23v16Ev");}
void  S1858C2 ::v17(){vfunc_called(this, "_ZN7S1858C23v17Ev");}
void  S1858C2 ::v18(){vfunc_called(this, "_ZN7S1858C23v18Ev");}
void  S1858C2 ::v19(){vfunc_called(this, "_ZN7S1858C23v19Ev");}
void  S1858C2 ::v20(){vfunc_called(this, "_ZN7S1858C23v20Ev");}
void  S1858C2 ::v21(){vfunc_called(this, "_ZN7S1858C23v21Ev");}
S1858C2 ::S1858C2(){ note_ctor("S1858C2", this);} // tgen

static void Test_S1858C2()
{
  extern Class_Descriptor cd_S1858C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S1858C2, buf);
    S1858C2 *dp, &lv = *(dp=new (buf) S1858C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S1858C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1858C2)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1858C3*), 0, "S1858C2");
    check_base_class_offset(lv, (S1858C3*), 0, "S1858C2");
    check_field_offset(lv, s1858c2f0, ABISELECT(24,12), "S1858C2.s1858c2f0");
    check_field_offset(lv, s1858c2f1, ABISELECT(32,20), "S1858C2.s1858c2f1");
    check_field_offset(lv, s1858c2f2, ABISELECT(48,28), "S1858C2.s1858c2f2");
    check_field_offset(lv, s1858c2f3, ABISELECT(64,36), "S1858C2.s1858c2f3");
    check_field_offset(lv, s1858c2f4, ABISELECT(72,40), "S1858C2.s1858c2f4");
    check_field_offset(lv, s1858c2f5, ABISELECT(80,44), "S1858C2.s1858c2f5");
    check_field_offset(lv, s1858c2f6, ABISELECT(84,48), "S1858C2.s1858c2f6");
    test_class_info(&lv, &cd_S1858C2);
    dp->~S1858C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1858C2(Test_S1858C2, "S1858C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S1858C2C1Ev();
extern void _ZN7S1858C2D1Ev();
Name_Map name_map_S1858C2[] = {
  NSPAIR(_ZN7S1858C2C1Ev),
  NSPAIR(_ZN7S1858C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1858C3;
extern VTBL_ENTRY _ZTI7S1858C3[];
extern  VTBL_ENTRY _ZTV7S1858C3[];
static Base_Class bases_S1858C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1858C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1858C2[];
extern void _ZN7S1858C2D1Ev();
extern void _ZN7S1858C2D0Ev();
extern void _ZN7S1858C32v5Ev();
extern void _ZN7S1858C32v6Ev();
extern void _ZN7S1858C32v7Ev();
extern void _ZN7S1858C32v8Ev();
extern void _ZN7S1858C32v9Ev();
extern void _ZN7S1858C33v10Ev();
extern void _ZN7S1858C33v11Ev();
extern void _ZN7S1858C23v12Ev();
extern void _ZN7S1858C23v13Ev();
extern void _ZN7S1858C23v14Ev();
extern void _ZN7S1858C23v15Ev();
extern void _ZN7S1858C23v16Ev();
extern void _ZN7S1858C23v17Ev();
extern void _ZN7S1858C23v18Ev();
extern void _ZN7S1858C23v19Ev();
extern void _ZN7S1858C23v20Ev();
extern void _ZN7S1858C23v21Ev();
static  VTBL_ENTRY vtc_S1858C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1858C2[0]),
  (VTBL_ENTRY)&_ZN7S1858C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1858C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1858C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1858C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1858C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1858C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1858C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1858C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1858C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v21Ev,
};
extern VTBL_ENTRY _ZTI7S1858C2[];
extern  VTBL_ENTRY _ZTV7S1858C2[];
Class_Descriptor cd_S1858C2 = {  "S1858C2", // class name
  bases_S1858C2, 2,
  &(vtc_S1858C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S1858C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1858C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1858C1  : S1858C2 {
  int s1858c1f0[2];
  void *s1858c1f1[2];
  ::S1856C13_nt s1858c1f2;
  virtual  ~S1858C1(); // _ZN7S1858C1D1Ev
  virtual void  v1(); // _ZN7S1858C12v1Ev
  virtual void  v2(); // _ZN7S1858C12v2Ev
  virtual void  v3(); // _ZN7S1858C12v3Ev
  virtual void  v4(); // _ZN7S1858C12v4Ev
  S1858C1(); // tgen
};
//SIG(1 S1858C1) C1{ BC2{ BC3{ BC4{ vd m} vd v5 v6 v7 v8 v9 v10 v11 Fp[2]} vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fi[2] FC5{ BC6{ vd v23} v22 Fp} FC7{ BC8{ vd v25} v24 Fp} FC9{ m Fp} FC10{ m Fp} Fc FC11{ m Fi}} vd v1 v2 v3 v4 Fi[2] Fp[2] FC12{ m Fp}}


 S1858C1 ::~S1858C1(){ note_dtor("S1858C1", this);}
void  S1858C1 ::v1(){vfunc_called(this, "_ZN7S1858C12v1Ev");}
void  S1858C1 ::v2(){vfunc_called(this, "_ZN7S1858C12v2Ev");}
void  S1858C1 ::v3(){vfunc_called(this, "_ZN7S1858C12v3Ev");}
void  S1858C1 ::v4(){vfunc_called(this, "_ZN7S1858C12v4Ev");}
S1858C1 ::S1858C1(){ note_ctor("S1858C1", this);} // tgen

static void Test_S1858C1()
{
  extern Class_Descriptor cd_S1858C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S1858C1, buf);
    S1858C1 *dp, &lv = *(dp=new (buf) S1858C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S1858C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1858C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1858C3*)(S1858C2*), 0, "S1858C1");
    check_base_class_offset(lv, (S1858C3*)(S1858C2*), 0, "S1858C1");
    check_base_class_offset(lv, (S1858C2*), 0, "S1858C1");
    check_field_offset(lv, s1858c1f0, ABISELECT(88,52), "S1858C1.s1858c1f0");
    check_field_offset(lv, s1858c1f1, ABISELECT(96,60), "S1858C1.s1858c1f1");
    check_field_offset(lv, s1858c1f2, ABISELECT(112,68), "S1858C1.s1858c1f2");
    test_class_info(&lv, &cd_S1858C1);
    dp->~S1858C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1858C1(Test_S1858C1, "S1858C1", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S1858C1C1Ev();
extern void _ZN7S1858C1D1Ev();
Name_Map name_map_S1858C1[] = {
  NSPAIR(_ZN7S1858C1C1Ev),
  NSPAIR(_ZN7S1858C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1858C3;
extern VTBL_ENTRY _ZTI7S1858C3[];
extern  VTBL_ENTRY _ZTV7S1858C3[];
extern Class_Descriptor cd_S1858C2;
extern VTBL_ENTRY _ZTI7S1858C2[];
extern  VTBL_ENTRY _ZTV7S1858C2[];
static Base_Class bases_S1858C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1858C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1858C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1858C1[];
extern void _ZN7S1858C1D1Ev();
extern void _ZN7S1858C1D0Ev();
extern void _ZN7S1858C32v5Ev();
extern void _ZN7S1858C32v6Ev();
extern void _ZN7S1858C32v7Ev();
extern void _ZN7S1858C32v8Ev();
extern void _ZN7S1858C32v9Ev();
extern void _ZN7S1858C33v10Ev();
extern void _ZN7S1858C33v11Ev();
extern void _ZN7S1858C23v12Ev();
extern void _ZN7S1858C23v13Ev();
extern void _ZN7S1858C23v14Ev();
extern void _ZN7S1858C23v15Ev();
extern void _ZN7S1858C23v16Ev();
extern void _ZN7S1858C23v17Ev();
extern void _ZN7S1858C23v18Ev();
extern void _ZN7S1858C23v19Ev();
extern void _ZN7S1858C23v20Ev();
extern void _ZN7S1858C23v21Ev();
extern void _ZN7S1858C12v1Ev();
extern void _ZN7S1858C12v2Ev();
extern void _ZN7S1858C12v3Ev();
extern void _ZN7S1858C12v4Ev();
static  VTBL_ENTRY vtc_S1858C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1858C1[0]),
  (VTBL_ENTRY)&_ZN7S1858C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1858C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1858C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1858C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1858C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1858C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1858C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1858C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1858C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1858C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1858C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1858C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1858C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1858C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1858C1[];
extern  VTBL_ENTRY _ZTV7S1858C1[];
Class_Descriptor cd_S1858C1 = {  "S1858C1", // class name
  bases_S1858C1, 3,
  &(vtc_S1858C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S1858C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1858C1),25, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20272C2  {
  virtual void  v5(); // _ZN8S20272C22v5Ev
  virtual void  v6(); // _ZN8S20272C22v6Ev
  virtual void  v7(); // _ZN8S20272C22v7Ev
  virtual void  v8(); // _ZN8S20272C22v8Ev
  ~S20272C2(); // tgen
  S20272C2(); // tgen
};
//SIG(-1 S20272C2) C1{ v1 v2 v3 v4}


void  S20272C2 ::v5(){vfunc_called(this, "_ZN8S20272C22v5Ev");}
void  S20272C2 ::v6(){vfunc_called(this, "_ZN8S20272C22v6Ev");}
void  S20272C2 ::v7(){vfunc_called(this, "_ZN8S20272C22v7Ev");}
void  S20272C2 ::v8(){vfunc_called(this, "_ZN8S20272C22v8Ev");}
S20272C2 ::~S20272C2(){ note_dtor("S20272C2", this);} // tgen
S20272C2 ::S20272C2(){ note_ctor("S20272C2", this);} // tgen

static void Test_S20272C2()
{
  extern Class_Descriptor cd_S20272C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20272C2, buf);
    S20272C2 *dp, &lv = *(dp=new (buf) S20272C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20272C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20272C2)");
    test_class_info(&lv, &cd_S20272C2);
    dp->~S20272C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20272C2(Test_S20272C2, "S20272C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20272C2C1Ev();
extern void _ZN8S20272C2D1Ev();
Name_Map name_map_S20272C2[] = {
  NSPAIR(_ZN8S20272C2C1Ev),
  NSPAIR(_ZN8S20272C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20272C2[];
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
static  VTBL_ENTRY vtc_S20272C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20272C2[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
};
extern VTBL_ENTRY _ZTI8S20272C2[];
extern  VTBL_ENTRY _ZTV8S20272C2[];
Class_Descriptor cd_S20272C2 = {  "S20272C2", // class name
  0,0,//no base classes
  &(vtc_S20272C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20272C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20272C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20272C4  : S20272C2 {
  char s20272c4f0;
  virtual void  v9(); // _ZN8S20272C42v9Ev
  virtual void  v10(); // _ZN8S20272C43v10Ev
  ~S20272C4(); // tgen
  S20272C4(); // tgen
};
//SIG(-1 S20272C4) C1{ BC2{ v3 v4 v5 v6} v1 v2 Fc}


void  S20272C4 ::v9(){vfunc_called(this, "_ZN8S20272C42v9Ev");}
void  S20272C4 ::v10(){vfunc_called(this, "_ZN8S20272C43v10Ev");}
S20272C4 ::~S20272C4(){ note_dtor("S20272C4", this);} // tgen
S20272C4 ::S20272C4(){ note_ctor("S20272C4", this);} // tgen

static void Test_S20272C4()
{
  extern Class_Descriptor cd_S20272C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20272C4, buf);
    S20272C4 *dp, &lv = *(dp=new (buf) S20272C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20272C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20272C4)");
    check_base_class_offset(lv, (S20272C2*), 0, "S20272C4");
    check_field_offset(lv, s20272c4f0, ABISELECT(8,4), "S20272C4.s20272c4f0");
    test_class_info(&lv, &cd_S20272C4);
    dp->~S20272C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20272C4(Test_S20272C4, "S20272C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20272C4C1Ev();
extern void _ZN8S20272C4D1Ev();
Name_Map name_map_S20272C4[] = {
  NSPAIR(_ZN8S20272C4C1Ev),
  NSPAIR(_ZN8S20272C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20272C2;
extern VTBL_ENTRY _ZTI8S20272C2[];
extern  VTBL_ENTRY _ZTV8S20272C2[];
static Base_Class bases_S20272C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20272C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20272C4[];
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
static  VTBL_ENTRY vtc_S20272C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20272C4[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
};
extern VTBL_ENTRY _ZTI8S20272C4[];
extern  VTBL_ENTRY _ZTV8S20272C4[];
Class_Descriptor cd_S20272C4 = {  "S20272C4", // class name
  bases_S20272C4, 1,
  &(vtc_S20272C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20272C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20272C4),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20272C5  : S20272C2 , virtual S20272C4 {
  int s20272c5f0;
  ::S20272C4 s20272c5f1[4];
  void *s20272c5f2;
  virtual  ~S20272C5(); // _ZN8S20272C5D2Ev
  virtual void  v11(); // _ZN8S20272C53v11Ev
  virtual void  v12(); // _ZN8S20272C53v12Ev
  virtual void  v13(); // _ZN8S20272C53v13Ev
  virtual void  v14(); // _ZN8S20272C53v14Ev
  virtual void  v15(); // _ZN8S20272C53v15Ev
  virtual void  v16(); // _ZN8S20272C53v16Ev
  S20272C5(); // tgen
};
//SIG(-1 S20272C5) C1{ BC2{ v7 v8 v9 v10} VBC3{ BC2 v11 v12 Fc} vd v1 v2 v3 v4 v5 v6 Fi FC3[4] Fp}


 S20272C5 ::~S20272C5(){ note_dtor("S20272C5", this);}
void  S20272C5 ::v11(){vfunc_called(this, "_ZN8S20272C53v11Ev");}
void  S20272C5 ::v12(){vfunc_called(this, "_ZN8S20272C53v12Ev");}
void  S20272C5 ::v13(){vfunc_called(this, "_ZN8S20272C53v13Ev");}
void  S20272C5 ::v14(){vfunc_called(this, "_ZN8S20272C53v14Ev");}
void  S20272C5 ::v15(){vfunc_called(this, "_ZN8S20272C53v15Ev");}
void  S20272C5 ::v16(){vfunc_called(this, "_ZN8S20272C53v16Ev");}
S20272C5 ::S20272C5(){ note_ctor("S20272C5", this);} // tgen

static void Test_S20272C5()
{
  extern Class_Descriptor cd_S20272C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[14];
    init_test(&cd_S20272C5, buf);
    S20272C5 *dp, &lv = *(dp=new (buf) S20272C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,52), "sizeof(S20272C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20272C5)");
    /*is_ambiguous_... S20272C5::S20272C2 */ AMB_check_base_class_offset(lv, (S20272C2*), 0, "S20272C5");
    check_base_class_offset(lv, (S20272C2*)(S20272C4*), ABISELECT(88,44), "S20272C5");
    check_base_class_offset(lv, (S20272C4*), ABISELECT(88,44), "S20272C5");
    check_field_offset(lv, s20272c5f0, ABISELECT(8,4), "S20272C5.s20272c5f0");
    check_field_offset(lv, s20272c5f1, ABISELECT(16,8), "S20272C5.s20272c5f1");
    check_field_offset(lv, s20272c5f2, ABISELECT(80,40), "S20272C5.s20272c5f2");
    test_class_info(&lv, &cd_S20272C5);
    dp->~S20272C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20272C5(Test_S20272C5, "S20272C5", ABISELECT(104,52));

#else // __cplusplus

extern void _ZN8S20272C5C1Ev();
extern void _ZN8S20272C5D2Ev();
Name_Map name_map_S20272C5[] = {
  NSPAIR(_ZN8S20272C5C1Ev),
  NSPAIR(_ZN8S20272C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20272C2;
extern VTBL_ENTRY _ZTI8S20272C2[];
extern  VTBL_ENTRY _ZTV8S20272C2[];
extern Class_Descriptor cd_S20272C2;
extern VTBL_ENTRY _ZTI8S20272C2[];
extern  VTBL_ENTRY _ZTV8S20272C2[];
extern Class_Descriptor cd_S20272C4;
extern VTBL_ENTRY _ZTI8S20272C4[];
extern  VTBL_ENTRY _ZTV8S20272C4[];
static Base_Class bases_S20272C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20272C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20272C2,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20272C4,    ABISELECT(88,44), //bcp->offset
    15, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20272C5[];
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C5D1Ev();
extern void _ZN8S20272C5D0Ev();
extern void _ZN8S20272C53v11Ev();
extern void _ZN8S20272C53v12Ev();
extern void _ZN8S20272C53v13Ev();
extern void _ZN8S20272C53v14Ev();
extern void _ZN8S20272C53v15Ev();
extern void _ZN8S20272C53v16Ev();
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
static  VTBL_ENTRY vtc_S20272C5[] = {
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20272C5[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20272C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S20272C5[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
};
extern VTBL_ENTRY _ZTV8S20272C5[];
static  VTT_ENTRY vtt_S20272C5[] = {
  {&(_ZTV8S20272C5[3]),  3,29},
  {&(_ZTV8S20272C5[23]),  23,29},
};
extern VTBL_ENTRY _ZTI8S20272C5[];
extern  VTBL_ENTRY _ZTV8S20272C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20272C5[];
Class_Descriptor cd_S20272C5 = {  "S20272C5", // class name
  bases_S20272C5, 3,
  &(vtc_S20272C5[0]), // expected_vtbl_contents
  &(vtt_S20272C5[0]), // expected_vtt_contents
  ABISELECT(104,52), // object size
  NSPAIRA(_ZTI8S20272C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20272C5),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20272C5),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20272C3  : virtual S20272C2 , S20272C4 , S20272C5 {
  ::S2489C12_nt s20272c3f0;
  int s20272c3f1;
  short s20272c3f2[3];
  virtual  ~S20272C3(); // _ZN8S20272C3D2Ev
  virtual void  v17(); // _ZN8S20272C33v17Ev
  S20272C3(); // tgen
};
//SIG(-1 S20272C3) C1{ VBC2{ v2 v3 v4 v5} BC3{ BC2 v6 v7 Fc} BC4{ BC2 VBC3 vd v8 v9 v10 v11 v12 v13 Fi FC3[4] Fp} vd v1 FC5{} Fi Fs[3]}


 S20272C3 ::~S20272C3(){ note_dtor("S20272C3", this);}
void  S20272C3 ::v17(){vfunc_called(this, "_ZN8S20272C33v17Ev");}
S20272C3 ::S20272C3(){ note_ctor("S20272C3", this);} // tgen

static void Test_S20272C3()
{
  extern Class_Descriptor cd_S20272C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,21)];
    init_test(&cd_S20272C3, buf);
    S20272C3 *dp, &lv = *(dp=new (buf) S20272C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,80), "sizeof(S20272C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20272C3)");
    /*is_ambiguous_... S20272C3::S20272C2 */ AMB_check_base_class_offset(lv, (S20272C2*), ABISELECT(120,68), "S20272C3");
    /*is_ambiguous_... S20272C3::S20272C4 */ AMB_check_base_class_offset(lv, (S20272C2*)(S20272C4*), 0, "S20272C3");
    /*is_ambiguous_... S20272C3::S20272C4 */ AMB_check_base_class_offset(lv, (S20272C4*), 0, "S20272C3");
    /*is_ambiguous_... S20272C5::S20272C2 */ AMB_check_base_class_offset(lv, (S20272C2*)(S20272C5*), ABISELECT(16,8), "S20272C3");
    /*is_ambiguous_... S20272C3::S20272C4 */ AMB_check_base_class_offset(lv, (S20272C2*)(S20272C4*), ABISELECT(128,72), "S20272C3");
    check_base_class_offset(lv, (S20272C4*)(S20272C5*), ABISELECT(128,72), "S20272C3");
    check_base_class_offset(lv, (S20272C5*), ABISELECT(16,8), "S20272C3");
    check_field_offset(lv, s20272c3f0, ABISELECT(104,52), "S20272C3.s20272c3f0");
    check_field_offset(lv, s20272c3f1, ABISELECT(108,56), "S20272C3.s20272c3f1");
    check_field_offset(lv, s20272c3f2, ABISELECT(112,60), "S20272C3.s20272c3f2");
    test_class_info(&lv, &cd_S20272C3);
    dp->~S20272C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20272C3(Test_S20272C3, "S20272C3", ABISELECT(144,80));

#else // __cplusplus

extern void _ZN8S20272C3C1Ev();
extern void _ZN8S20272C3D2Ev();
Name_Map name_map_S20272C3[] = {
  NSPAIR(_ZN8S20272C3C1Ev),
  NSPAIR(_ZN8S20272C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20272C2;
extern VTBL_ENTRY _ZTI8S20272C2[];
extern  VTBL_ENTRY _ZTV8S20272C2[];
extern Class_Descriptor cd_S20272C2;
extern VTBL_ENTRY _ZTI8S20272C2[];
extern  VTBL_ENTRY _ZTV8S20272C2[];
extern Class_Descriptor cd_S20272C4;
extern VTBL_ENTRY _ZTI8S20272C4[];
extern  VTBL_ENTRY _ZTV8S20272C4[];
extern Class_Descriptor cd_S20272C2;
extern VTBL_ENTRY _ZTI8S20272C2[];
extern  VTBL_ENTRY _ZTV8S20272C2[];
extern Class_Descriptor cd_S20272C2;
extern VTBL_ENTRY _ZTI8S20272C2[];
extern  VTBL_ENTRY _ZTV8S20272C2[];
extern Class_Descriptor cd_S20272C4;
extern VTBL_ENTRY _ZTI8S20272C4[];
extern  VTBL_ENTRY _ZTV8S20272C4[];
extern Class_Descriptor cd_S20272C5;
extern VTBL_ENTRY _ZTI8S20272C5[];
extern  VTBL_ENTRY _ZTV8S20272C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20272C5[];
static Base_Class bases_S20272C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20272C2,    ABISELECT(120,68), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20272C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20272C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20272C2,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20272C2,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20272C4,    ABISELECT(128,72), //bcp->offset
    38, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20272C5,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20272C3[];
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
extern void _ZN8S20272C3D1Ev();
extern void _ZN8S20272C3D0Ev();
extern void _ZN8S20272C33v17Ev();
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void ABISELECT(_ZThn16_N8S20272C3D1Ev,_ZThn8_N8S20272C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20272C3D0Ev,_ZThn8_N8S20272C3D0Ev)();
extern void _ZN8S20272C53v11Ev();
extern void _ZN8S20272C53v12Ev();
extern void _ZN8S20272C53v13Ev();
extern void _ZN8S20272C53v14Ev();
extern void _ZN8S20272C53v15Ev();
extern void _ZN8S20272C53v16Ev();
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
static  VTBL_ENTRY vtc_S20272C3[] = {
  ABISELECT(128,72),
  ABISELECT(120,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20272C3[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20272C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20272C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20272C33v17Ev,
  ABISELECT(112,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20272C3[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20272C3D1Ev,_ZThn8_N8S20272C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20272C3D0Ev,_ZThn8_N8S20272C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20272C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI8S20272C3[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S20272C3[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
};
extern VTBL_ENTRY _ZTV8S20272C3[];
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C5D1Ev();
extern void _ZN8S20272C5D0Ev();
extern void _ZN8S20272C53v11Ev();
extern void _ZN8S20272C53v12Ev();
extern void _ZN8S20272C53v13Ev();
extern void _ZN8S20272C53v14Ev();
extern void _ZN8S20272C53v15Ev();
extern void _ZN8S20272C53v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C5__8S20272C3[] = {
  ABISELECT(112,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20272C5[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20272C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v16Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C4__8S20272C5__8S20272C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S20272C5[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
};
static  VTT_ENTRY vtt_S20272C3[] = {
  {&(_ZTV8S20272C3[4]),  4,52},
  {&(_tg__ZTV8S20272C5__8S20272C3[3]),  3,15},
  {&(_tg__ZTV8S20272C4__8S20272C5__8S20272C3[8]),  8,14},
  {&(_ZTV8S20272C3[34]),  34,52},
  {&(_ZTV8S20272C3[16]),  16,52},
  {&(_ZTV8S20272C3[46]),  46,52},
};
extern VTBL_ENTRY _ZTI8S20272C3[];
extern  VTBL_ENTRY _ZTV8S20272C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20272C3[];
Class_Descriptor cd_S20272C3 = {  "S20272C3", // class name
  bases_S20272C3, 7,
  &(vtc_S20272C3[0]), // expected_vtbl_contents
  &(vtt_S20272C3[0]), // expected_vtt_contents
  ABISELECT(144,80), // object size
  NSPAIRA(_ZTI8S20272C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20272C3),52, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20272C3),6, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20272C7  : virtual S20272C2 , S20272C5 , virtual S20272C3 {
  int s20272c7f0;
  virtual  ~S20272C7(); // _ZN8S20272C7D2Ev
  virtual void  v18(); // _ZN8S20272C73v18Ev
  virtual void  v19(); // _ZN8S20272C73v19Ev
  virtual void  v20(); // _ZN8S20272C73v20Ev
  virtual void  v21(); // _ZN8S20272C73v21Ev
  virtual void  v22(); // _ZN8S20272C73v22Ev
  virtual void  v23(); // _ZN8S20272C73v23Ev
  virtual void  v24(); // _ZN8S20272C73v24Ev
  S20272C7(); // tgen
};
//SIG(-1 S20272C7) C1{ VBC2{ v8 v9 v10 v11} BC3{ BC2 VBC4{ BC2 v12 v13 Fc} vd v14 v15 v16 v17 v18 v19 Fi FC4[4] Fp} VBC5{ VBC2 BC4 BC3 vd v20 FC6{} Fi Fs[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi}


 S20272C7 ::~S20272C7(){ note_dtor("S20272C7", this);}
void  S20272C7 ::v18(){vfunc_called(this, "_ZN8S20272C73v18Ev");}
void  S20272C7 ::v19(){vfunc_called(this, "_ZN8S20272C73v19Ev");}
void  S20272C7 ::v20(){vfunc_called(this, "_ZN8S20272C73v20Ev");}
void  S20272C7 ::v21(){vfunc_called(this, "_ZN8S20272C73v21Ev");}
void  S20272C7 ::v22(){vfunc_called(this, "_ZN8S20272C73v22Ev");}
void  S20272C7 ::v23(){vfunc_called(this, "_ZN8S20272C73v23Ev");}
void  S20272C7 ::v24(){vfunc_called(this, "_ZN8S20272C73v24Ev");}
S20272C7 ::S20272C7(){ note_ctor("S20272C7", this);} // tgen

static void Test_S20272C7()
{
  extern Class_Descriptor cd_S20272C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,33)];
    init_test(&cd_S20272C7, buf);
    S20272C7 *dp, &lv = *(dp=new (buf) S20272C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,128), "sizeof(S20272C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20272C7)");
    /*is_ambiguous_... S20272C7::S20272C2 */ AMB_check_base_class_offset(lv, (S20272C2*), ABISELECT(96,48), "S20272C7");
    /*is_ambiguous_... S20272C3::S20272C2 */ AMB_check_base_class_offset(lv, (S20272C2*)(S20272C3*), ABISELECT(96,48), "S20272C7");
    /*is_ambiguous_... S20272C7::S20272C5 */ AMB_check_base_class_offset(lv, (S20272C2*)(S20272C5*), 0, "S20272C7");
    /*is_ambiguous_... S20272C7::S20272C4 */ AMB_check_base_class_offset(lv, (S20272C2*)(S20272C4*), ABISELECT(104,52), "S20272C7");
    /*is_ambiguous_... S20272C7::S20272C5 */ AMB_check_base_class_offset(lv, (S20272C4*)(S20272C5*), ABISELECT(104,52), "S20272C7");
    check_base_class_offset(lv, (S20272C4*)(S20272C5*)(S20272C3*), ABISELECT(104,52), "S20272C7");
    /*is_ambiguous_... S20272C7::S20272C5 */ AMB_check_base_class_offset(lv, (S20272C5*), 0, "S20272C7");
    /*is_ambiguous_... S20272C3::S20272C4 */ AMB_check_base_class_offset(lv, (S20272C2*)(S20272C4*)(S20272C3*), ABISELECT(120,60), "S20272C7");
    /*is_ambiguous_... S20272C3::S20272C4 */ AMB_check_base_class_offset(lv, (S20272C4*)(S20272C3*), ABISELECT(120,60), "S20272C7");
    /*is_ambiguous_... S20272C5::S20272C2 */ AMB_check_base_class_offset(lv, (S20272C2*)(S20272C5*)(S20272C3*), ABISELECT(136,68), "S20272C7");
    check_base_class_offset(lv, (S20272C5*)(S20272C3*), ABISELECT(136,68), "S20272C7");
    check_base_class_offset(lv, (S20272C3*), ABISELECT(120,60), "S20272C7");
    check_field_offset(lv, s20272c7f0, ABISELECT(88,44), "S20272C7.s20272c7f0");
    test_class_info(&lv, &cd_S20272C7);
    dp->~S20272C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20272C7(Test_S20272C7, "S20272C7", ABISELECT(240,128));

#else // __cplusplus

extern void _ZN8S20272C7C1Ev();
extern void _ZN8S20272C7D2Ev();
Name_Map name_map_S20272C7[] = {
  NSPAIR(_ZN8S20272C7C1Ev),
  NSPAIR(_ZN8S20272C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20272C2;
extern VTBL_ENTRY _ZTI8S20272C2[];
extern  VTBL_ENTRY _ZTV8S20272C2[];
extern Class_Descriptor cd_S20272C2;
extern VTBL_ENTRY _ZTI8S20272C2[];
extern  VTBL_ENTRY _ZTV8S20272C2[];
extern Class_Descriptor cd_S20272C2;
extern VTBL_ENTRY _ZTI8S20272C2[];
extern  VTBL_ENTRY _ZTV8S20272C2[];
extern Class_Descriptor cd_S20272C4;
extern VTBL_ENTRY _ZTI8S20272C4[];
extern  VTBL_ENTRY _ZTV8S20272C4[];
extern Class_Descriptor cd_S20272C5;
extern VTBL_ENTRY _ZTI8S20272C5[];
extern  VTBL_ENTRY _ZTV8S20272C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20272C5[];
extern Class_Descriptor cd_S20272C2;
extern VTBL_ENTRY _ZTI8S20272C2[];
extern  VTBL_ENTRY _ZTV8S20272C2[];
extern Class_Descriptor cd_S20272C4;
extern VTBL_ENTRY _ZTI8S20272C4[];
extern  VTBL_ENTRY _ZTV8S20272C4[];
extern Class_Descriptor cd_S20272C2;
extern VTBL_ENTRY _ZTI8S20272C2[];
extern  VTBL_ENTRY _ZTV8S20272C2[];
extern Class_Descriptor cd_S20272C5;
extern VTBL_ENTRY _ZTI8S20272C5[];
extern  VTBL_ENTRY _ZTV8S20272C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20272C5[];
extern Class_Descriptor cd_S20272C3;
extern VTBL_ENTRY _ZTI8S20272C3[];
extern  VTBL_ENTRY _ZTV8S20272C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20272C3[];
static Base_Class bases_S20272C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20272C2,    ABISELECT(96,48), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20272C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20272C2,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20272C4,    ABISELECT(104,52), //bcp->offset
    34, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20272C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20272C2,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20272C4,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20272C2,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20272C5,    ABISELECT(136,68), //bcp->offset
    75, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20272C3,    ABISELECT(120,60), //bcp->offset
    48, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20272C7[];
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C7D1Ev();
extern void _ZN8S20272C7D0Ev();
extern void _ZN8S20272C53v11Ev();
extern void _ZN8S20272C53v12Ev();
extern void _ZN8S20272C53v13Ev();
extern void _ZN8S20272C53v14Ev();
extern void _ZN8S20272C53v15Ev();
extern void _ZN8S20272C53v16Ev();
extern void _ZN8S20272C73v18Ev();
extern void _ZN8S20272C73v19Ev();
extern void _ZN8S20272C73v20Ev();
extern void _ZN8S20272C73v21Ev();
extern void _ZN8S20272C73v22Ev();
extern void _ZN8S20272C73v23Ev();
extern void _ZN8S20272C73v24Ev();
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
extern void ABISELECT(_ZTv0_n88_N8S20272C7D1Ev,_ZTv0_n44_N8S20272C7D1Ev)();
extern void ABISELECT(_ZThn120_N8S20272C7D1Ev,_ZThn60_N8S20272C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20272C7D0Ev,_ZTv0_n44_N8S20272C7D0Ev)();
extern void ABISELECT(_ZThn120_N8S20272C7D0Ev,_ZThn60_N8S20272C7D0Ev)() __attribute__((weak));
extern void _ZN8S20272C33v17Ev();
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void ABISELECT(_ZTvn16_n88_N8S20272C7D1Ev,_ZTvn8_n44_N8S20272C7D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N8S20272C7D0Ev,_ZTvn8_n44_N8S20272C7D0Ev)();
extern void _ZN8S20272C53v11Ev();
extern void _ZN8S20272C53v12Ev();
extern void _ZN8S20272C53v13Ev();
extern void _ZN8S20272C53v14Ev();
extern void _ZN8S20272C53v15Ev();
extern void _ZN8S20272C53v16Ev();
static  VTBL_ENTRY vtc_S20272C7[] = {
  ABISELECT(120,60),
  ABISELECT(96,48),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20272C7[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20272C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v24Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S20272C7[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S20272C7[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(-120,-60),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S20272C7[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20272C7D1Ev,_ZTv0_n44_N8S20272C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20272C7D0Ev,_ZTv0_n44_N8S20272C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20272C33v17Ev,
  ABISELECT(-32,-16),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI8S20272C7[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N8S20272C7D1Ev,_ZTvn8_n44_N8S20272C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N8S20272C7D0Ev,_ZTvn8_n44_N8S20272C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20272C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v16Ev,
};
extern VTBL_ENTRY _ZTV8S20272C7[];
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C5D1Ev();
extern void _ZN8S20272C5D0Ev();
extern void _ZN8S20272C53v11Ev();
extern void _ZN8S20272C53v12Ev();
extern void _ZN8S20272C53v13Ev();
extern void _ZN8S20272C53v14Ev();
extern void _ZN8S20272C53v15Ev();
extern void _ZN8S20272C53v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C5__8S20272C7[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20272C5[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20272C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v16Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C4__8S20272C5__8S20272C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S20272C5[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
extern void _ZN8S20272C3D1Ev();
extern void _ZN8S20272C3D0Ev();
extern void _ZN8S20272C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C3__8S20272C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20272C3[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20272C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20272C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20272C33v17Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C5D1Ev();
extern void _ZN8S20272C5D0Ev();
extern void _ZN8S20272C53v11Ev();
extern void _ZN8S20272C53v12Ev();
extern void _ZN8S20272C53v13Ev();
extern void _ZN8S20272C53v14Ev();
extern void _ZN8S20272C53v15Ev();
extern void _ZN8S20272C53v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C58S20272C3__A1__8S20272C7[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20272C5[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20272C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v16Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C4__8S20272C58S20272C3__A1__8S20272C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S20272C5[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C2__8S20272C3__8S20272C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S20272C3[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void ABISELECT(_ZThn16_N8S20272C3D1Ev,_ZThn8_N8S20272C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20272C3D0Ev,_ZThn8_N8S20272C3D0Ev)();
extern void _ZN8S20272C53v11Ev();
extern void _ZN8S20272C53v12Ev();
extern void _ZN8S20272C53v13Ev();
extern void _ZN8S20272C53v14Ev();
extern void _ZN8S20272C53v15Ev();
extern void _ZN8S20272C53v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C5__8S20272C3__8S20272C7[] = {
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20272C3[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20272C3D1Ev,_ZThn8_N8S20272C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20272C3D0Ev,_ZThn8_N8S20272C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20272C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v16Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C4__A1__8S20272C3__8S20272C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20272C3[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
};
static  VTT_ENTRY vtt_S20272C7[] = {
  {&(_ZTV8S20272C7[5]),  5,90},
  {&(_tg__ZTV8S20272C5__8S20272C7[3]),  3,15},
  {&(_tg__ZTV8S20272C4__8S20272C5__8S20272C7[8]),  8,14},
  {&(_ZTV8S20272C7[30]),  30,90},
  {&(_ZTV8S20272C7[42]),  42,90},
  {&(_ZTV8S20272C7[66]),  66,90},
  {&(_ZTV8S20272C7[78]),  78,90},
  {&(_tg__ZTV8S20272C3__8S20272C7[4]),  4,13},
  {&(_tg__ZTV8S20272C58S20272C3__A1__8S20272C7[3]),  3,15},
  {&(_tg__ZTV8S20272C4__8S20272C58S20272C3__A1__8S20272C7[8]),  8,14},
  {&(_tg__ZTV8S20272C2__8S20272C3__8S20272C7[6]),  6,10},
  {&(_tg__ZTV8S20272C5__8S20272C3__8S20272C7[3]),  3,15},
  {&(_tg__ZTV8S20272C4__A1__8S20272C3__8S20272C7[8]),  8,14},
};
extern VTBL_ENTRY _ZTI8S20272C7[];
extern  VTBL_ENTRY _ZTV8S20272C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20272C7[];
static VTBL_ENTRY alt_thunk_names84[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20272C7D0Ev,_ZTv0_n44_N8S20272C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20272C7D0Ev,_ZThn60_N8S20272C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20272C7D1Ev,_ZTv0_n44_N8S20272C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20272C7D1Ev,_ZThn60_N8S20272C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20272C7 = {  "S20272C7", // class name
  bases_S20272C7, 10,
  &(vtc_S20272C7[0]), // expected_vtbl_contents
  &(vtt_S20272C7[0]), // expected_vtt_contents
  ABISELECT(240,128), // object size
  NSPAIRA(_ZTI8S20272C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20272C7),90, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20272C7),13, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names84,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20272C8_nt  {
  virtual void  v25(); // _ZN11S20272C8_nt3v25Ev
  virtual void  v26(); // _ZN11S20272C8_nt3v26Ev
  ~S20272C8_nt(); // tgen
  S20272C8_nt(); // tgen
};
//SIG(-1 S20272C8_nt) C1{ v1 v2}


void  S20272C8_nt ::v25(){vfunc_called(this, "_ZN11S20272C8_nt3v25Ev");}
void  S20272C8_nt ::v26(){vfunc_called(this, "_ZN11S20272C8_nt3v26Ev");}
S20272C8_nt ::~S20272C8_nt(){ note_dtor("S20272C8_nt", this);} // tgen
S20272C8_nt ::S20272C8_nt(){ note_ctor("S20272C8_nt", this);} // tgen

//skip512 S20272C8_nt

#else // __cplusplus

extern void _ZN11S20272C8_ntC1Ev();
extern void _ZN11S20272C8_ntD1Ev();
Name_Map name_map_S20272C8_nt[] = {
  NSPAIR(_ZN11S20272C8_ntC1Ev),
  NSPAIR(_ZN11S20272C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20272C8_nt[];
extern void _ZN11S20272C8_nt3v25Ev();
extern void _ZN11S20272C8_nt3v26Ev();
static  VTBL_ENTRY vtc_S20272C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20272C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20272C8_nt3v25Ev,
  (VTBL_ENTRY)&_ZN11S20272C8_nt3v26Ev,
};
extern VTBL_ENTRY _ZTI11S20272C8_nt[];
VTBL_ENTRY *P__ZTI11S20272C8_nt = _ZTI11S20272C8_nt; 
extern  VTBL_ENTRY _ZTV11S20272C8_nt[];
Class_Descriptor cd_S20272C8_nt = {  "S20272C8_nt", // class name
  0,0,//no base classes
  &(vtc_S20272C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S20272C8_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20272C8_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20272C1  : virtual S20272C2 , virtual S20272C3 , S20272C7 , S20272C5 , virtual S20272C8_nt {
  void *s20272c1f0;
  __tsi64 s20272c1f1[6];
  virtual  ~S20272C1(); // _ZN8S20272C1D2Ev
  virtual void  v1(); // _ZN8S20272C12v1Ev
  virtual void  v2(); // _ZN8S20272C12v2Ev
  virtual void  v3(); // _ZN8S20272C12v3Ev
  virtual void  v4(); // _ZN8S20272C12v4Ev
  S20272C1(); // tgen
};
//SIG(1 S20272C1) C1{ VBC2{ v5 v6 v7 v8} VBC3{ VBC2 BC4{ BC2 v9 v10 Fc} BC5{ BC2 VBC4 vd v11 v12 v13 v14 v15 v16 Fi FC4[4] Fp} vd v17 FC6{} Fi Fs[3]} BC7{ VBC2 BC5 VBC3 vd v18 v19 v20 v21 v22 v23 v24 Fi} BC5 VBC8{ v25 v26} vd v1 v2 v3 v4 Fp FL[6]}


 S20272C1 ::~S20272C1(){ note_dtor("S20272C1", this);}
void  S20272C1 ::v1(){vfunc_called(this, "_ZN8S20272C12v1Ev");}
void  S20272C1 ::v2(){vfunc_called(this, "_ZN8S20272C12v2Ev");}
void  S20272C1 ::v3(){vfunc_called(this, "_ZN8S20272C12v3Ev");}
void  S20272C1 ::v4(){vfunc_called(this, "_ZN8S20272C12v4Ev");}
S20272C1 ::S20272C1(){ note_ctor("S20272C1", this);} // tgen

static void Test_S20272C1()
{
  extern Class_Descriptor cd_S20272C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,58)];
    init_test(&cd_S20272C1, buf);
    S20272C1 *dp, &lv = *(dp=new (buf) S20272C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,228), "sizeof(S20272C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20272C1)");
    /*is_ambiguous_... S20272C1::S20272C2 */ AMB_check_base_class_offset(lv, (S20272C2*), ABISELECT(240,144), "S20272C1");
    /*is_ambiguous_... S20272C3::S20272C2 */ AMB_check_base_class_offset(lv, (S20272C2*)(S20272C3*), ABISELECT(240,144), "S20272C1");
    /*is_ambiguous_... S20272C7::S20272C2 */ AMB_check_base_class_offset(lv, (S20272C2*)(S20272C7*), ABISELECT(240,144), "S20272C1");
    /*is_ambiguous_... S20272C3::S20272C4 */ AMB_check_base_class_offset(lv, (S20272C2*)(S20272C4*)(S20272C3*), ABISELECT(248,148), "S20272C1");
    /*is_ambiguous_... S20272C3::S20272C4 */ AMB_check_base_class_offset(lv, (S20272C4*)(S20272C3*), ABISELECT(248,148), "S20272C1");
    /*is_ambiguous_... S20272C5::S20272C2 */ AMB_check_base_class_offset(lv, (S20272C2*)(S20272C5*)(S20272C3*), ABISELECT(264,156), "S20272C1");
    /*is_ambiguous_... S20272C1::S20272C4 */ AMB_check_base_class_offset(lv, (S20272C2*)(S20272C4*), ABISELECT(368,216), "S20272C1");
    check_base_class_offset(lv, (S20272C4*)(S20272C5*)(S20272C3*), ABISELECT(368,216), "S20272C1");
    /*is_ambiguous_... S20272C7::S20272C5 */ AMB_check_base_class_offset(lv, (S20272C4*)(S20272C5*)(S20272C7*), ABISELECT(368,216), "S20272C1");
    /*is_ambiguous_... S20272C1::S20272C5 */ AMB_check_base_class_offset(lv, (S20272C4*)(S20272C5*), ABISELECT(368,216), "S20272C1");
    check_base_class_offset(lv, (S20272C5*)(S20272C3*), ABISELECT(264,156), "S20272C1");
    check_base_class_offset(lv, (S20272C3*), ABISELECT(248,148), "S20272C1");
    check_base_class_offset(lv, (S20272C3*)(S20272C7*), ABISELECT(248,148), "S20272C1");
    /*is_ambiguous_... S20272C7::S20272C5 */ AMB_check_base_class_offset(lv, (S20272C2*)(S20272C5*)(S20272C7*), 0, "S20272C1");
    /*is_ambiguous_... S20272C7::S20272C5 */ AMB_check_base_class_offset(lv, (S20272C5*)(S20272C7*), 0, "S20272C1");
    check_base_class_offset(lv, (S20272C7*), 0, "S20272C1");
    /*is_ambiguous_... S20272C1::S20272C5 */ AMB_check_base_class_offset(lv, (S20272C2*)(S20272C5*), ABISELECT(96,48), "S20272C1");
    /*is_ambiguous_... S20272C1::S20272C5 */ AMB_check_base_class_offset(lv, (S20272C5*), ABISELECT(96,48), "S20272C1");
    check_base_class_offset(lv, (S20272C8_nt*), ABISELECT(384,224), "S20272C1");
    check_field_offset(lv, s20272c1f0, ABISELECT(184,92), "S20272C1.s20272c1f0");
    check_field_offset(lv, s20272c1f1, ABISELECT(192,96), "S20272C1.s20272c1f1");
    test_class_info(&lv, &cd_S20272C1);
    dp->~S20272C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20272C1(Test_S20272C1, "S20272C1", ABISELECT(392,228));

#else // __cplusplus

extern void _ZN8S20272C1C1Ev();
extern void _ZN8S20272C1D2Ev();
Name_Map name_map_S20272C1[] = {
  NSPAIR(_ZN8S20272C1C1Ev),
  NSPAIR(_ZN8S20272C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20272C2;
extern VTBL_ENTRY _ZTI8S20272C2[];
extern  VTBL_ENTRY _ZTV8S20272C2[];
extern Class_Descriptor cd_S20272C2;
extern VTBL_ENTRY _ZTI8S20272C2[];
extern  VTBL_ENTRY _ZTV8S20272C2[];
extern Class_Descriptor cd_S20272C4;
extern VTBL_ENTRY _ZTI8S20272C4[];
extern  VTBL_ENTRY _ZTV8S20272C4[];
extern Class_Descriptor cd_S20272C2;
extern VTBL_ENTRY _ZTI8S20272C2[];
extern  VTBL_ENTRY _ZTV8S20272C2[];
extern Class_Descriptor cd_S20272C2;
extern VTBL_ENTRY _ZTI8S20272C2[];
extern  VTBL_ENTRY _ZTV8S20272C2[];
extern Class_Descriptor cd_S20272C4;
extern VTBL_ENTRY _ZTI8S20272C4[];
extern  VTBL_ENTRY _ZTV8S20272C4[];
extern Class_Descriptor cd_S20272C5;
extern VTBL_ENTRY _ZTI8S20272C5[];
extern  VTBL_ENTRY _ZTV8S20272C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20272C5[];
extern Class_Descriptor cd_S20272C3;
extern VTBL_ENTRY _ZTI8S20272C3[];
extern  VTBL_ENTRY _ZTV8S20272C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20272C3[];
extern Class_Descriptor cd_S20272C2;
extern VTBL_ENTRY _ZTI8S20272C2[];
extern  VTBL_ENTRY _ZTV8S20272C2[];
extern Class_Descriptor cd_S20272C5;
extern VTBL_ENTRY _ZTI8S20272C5[];
extern  VTBL_ENTRY _ZTV8S20272C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20272C5[];
extern Class_Descriptor cd_S20272C7;
extern VTBL_ENTRY _ZTI8S20272C7[];
extern  VTBL_ENTRY _ZTV8S20272C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20272C7[];
extern Class_Descriptor cd_S20272C2;
extern VTBL_ENTRY _ZTI8S20272C2[];
extern  VTBL_ENTRY _ZTV8S20272C2[];
extern Class_Descriptor cd_S20272C5;
extern VTBL_ENTRY _ZTI8S20272C5[];
extern  VTBL_ENTRY _ZTV8S20272C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20272C5[];
extern Class_Descriptor cd_S20272C8_nt;
extern VTBL_ENTRY _ZTI11S20272C8_nt[];
extern  VTBL_ENTRY _ZTV11S20272C8_nt[];
static Base_Class bases_S20272C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20272C2,    ABISELECT(240,144), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20272C2,    ABISELECT(248,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20272C4,    ABISELECT(248,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20272C2,    ABISELECT(264,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20272C2,    ABISELECT(368,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20272C4,    ABISELECT(368,216), //bcp->offset
    96, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20272C5,    ABISELECT(264,156), //bcp->offset
    81, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20272C3,    ABISELECT(248,148), //bcp->offset
    54, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20272C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20272C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20272C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20272C2,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20272C5,    ABISELECT(96,48), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20272C8_nt,    ABISELECT(384,224), //bcp->offset
    110, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20272C1[];
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C1D1Ev();
extern void _ZN8S20272C1D0Ev();
extern void _ZN8S20272C53v11Ev();
extern void _ZN8S20272C53v12Ev();
extern void _ZN8S20272C53v13Ev();
extern void _ZN8S20272C53v14Ev();
extern void _ZN8S20272C53v15Ev();
extern void _ZN8S20272C53v16Ev();
extern void _ZN8S20272C73v18Ev();
extern void _ZN8S20272C73v19Ev();
extern void _ZN8S20272C73v20Ev();
extern void _ZN8S20272C73v21Ev();
extern void _ZN8S20272C73v22Ev();
extern void _ZN8S20272C73v23Ev();
extern void _ZN8S20272C73v24Ev();
extern void _ZN8S20272C12v1Ev();
extern void _ZN8S20272C12v2Ev();
extern void _ZN8S20272C12v3Ev();
extern void _ZN8S20272C12v4Ev();
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void ABISELECT(_ZThn96_N8S20272C1D1Ev,_ZThn48_N8S20272C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S20272C1D0Ev,_ZThn48_N8S20272C1D0Ev)();
extern void _ZN8S20272C53v11Ev();
extern void _ZN8S20272C53v12Ev();
extern void _ZN8S20272C53v13Ev();
extern void _ZN8S20272C53v14Ev();
extern void _ZN8S20272C53v15Ev();
extern void _ZN8S20272C53v16Ev();
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
extern void ABISELECT(_ZTv0_n88_N8S20272C1D1Ev,_ZTv0_n44_N8S20272C1D1Ev)();
extern void ABISELECT(_ZThn248_N8S20272C1D1Ev,_ZThn148_N8S20272C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20272C1D0Ev,_ZTv0_n44_N8S20272C1D0Ev)();
extern void ABISELECT(_ZThn248_N8S20272C1D0Ev,_ZThn148_N8S20272C1D0Ev)() __attribute__((weak));
extern void _ZN8S20272C33v17Ev();
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void ABISELECT(_ZTvn16_n88_N8S20272C1D1Ev,_ZTvn8_n44_N8S20272C1D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N8S20272C1D0Ev,_ZTvn8_n44_N8S20272C1D0Ev)();
extern void _ZN8S20272C53v11Ev();
extern void _ZN8S20272C53v12Ev();
extern void _ZN8S20272C53v13Ev();
extern void _ZN8S20272C53v14Ev();
extern void _ZN8S20272C53v15Ev();
extern void _ZN8S20272C53v16Ev();
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
extern void _ZN11S20272C8_nt3v25Ev();
extern void _ZN11S20272C8_nt3v26Ev();
static  VTBL_ENTRY vtc_S20272C1[] = {
  ABISELECT(384,224),
  ABISELECT(248,148),
  ABISELECT(240,144),
  ABISELECT(368,216),
  0,
  (VTBL_ENTRY)&(_ZTI8S20272C1[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20272C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20272C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20272C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20272C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20272C12v4Ev,
  ABISELECT(272,168),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S20272C1[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S20272C1D1Ev,_ZThn48_N8S20272C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N8S20272C1D0Ev,_ZThn48_N8S20272C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20272C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S20272C1[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(-248,-148),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,68),
  ABISELECT(-8,-4),
  ABISELECT(-248,-148),
  (VTBL_ENTRY)&(_ZTI8S20272C1[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20272C1D1Ev,_ZTv0_n44_N8S20272C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20272C1D0Ev,_ZTv0_n44_N8S20272C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20272C33v17Ev,
  ABISELECT(104,60),
  ABISELECT(-264,-156),
  (VTBL_ENTRY)&(_ZTI8S20272C1[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N8S20272C1D1Ev,_ZTvn8_n44_N8S20272C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N8S20272C1D0Ev,_ZTvn8_n44_N8S20272C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20272C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-216),
  (VTBL_ENTRY)&(_ZTI8S20272C1[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
  0,
  0,
  ABISELECT(-384,-224),
  (VTBL_ENTRY)&(_ZTI8S20272C1[0]),
  (VTBL_ENTRY)&_ZN11S20272C8_nt3v25Ev,
  (VTBL_ENTRY)&_ZN11S20272C8_nt3v26Ev,
};
extern VTBL_ENTRY _ZTV8S20272C1[];
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C7D1Ev();
extern void _ZN8S20272C7D0Ev();
extern void _ZN8S20272C53v11Ev();
extern void _ZN8S20272C53v12Ev();
extern void _ZN8S20272C53v13Ev();
extern void _ZN8S20272C53v14Ev();
extern void _ZN8S20272C53v15Ev();
extern void _ZN8S20272C53v16Ev();
extern void _ZN8S20272C73v18Ev();
extern void _ZN8S20272C73v19Ev();
extern void _ZN8S20272C73v20Ev();
extern void _ZN8S20272C73v21Ev();
extern void _ZN8S20272C73v22Ev();
extern void _ZN8S20272C73v23Ev();
extern void _ZN8S20272C73v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C7__8S20272C1[] = {
  ABISELECT(248,148),
  ABISELECT(240,144),
  ABISELECT(368,216),
  0,
  (VTBL_ENTRY)&(_ZTI8S20272C7[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20272C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20272C73v24Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C5D1Ev();
extern void _ZN8S20272C5D0Ev();
extern void _ZN8S20272C53v11Ev();
extern void _ZN8S20272C53v12Ev();
extern void _ZN8S20272C53v13Ev();
extern void _ZN8S20272C53v14Ev();
extern void _ZN8S20272C53v15Ev();
extern void _ZN8S20272C53v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C58S20272C7__A1__8S20272C1[] = {
  ABISELECT(368,216),
  0,
  (VTBL_ENTRY)&(_ZTI8S20272C5[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20272C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v16Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C4__8S20272C58S20272C7__A1__8S20272C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-216),
  (VTBL_ENTRY)&(_ZTI8S20272C5[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C2__8S20272C7__8S20272C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S20272C7[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C4__8S20272C7__8S20272C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-216),
  (VTBL_ENTRY)&(_ZTI8S20272C7[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
extern void ABISELECT(_ZTv0_n88_N8S20272C7D1Ev,_ZTv0_n44_N8S20272C7D1Ev)();
extern void ABISELECT(_ZThn248_N8S20272C7D1Ev,_ZThn148_N8S20272C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20272C7D0Ev,_ZTv0_n44_N8S20272C7D0Ev)();
extern void ABISELECT(_ZThn248_N8S20272C7D0Ev,_ZThn148_N8S20272C7D0Ev)() __attribute__((weak));
extern void _ZN8S20272C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C3__8S20272C7__8S20272C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(-248,-148),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,68),
  ABISELECT(-8,-4),
  ABISELECT(-248,-148),
  (VTBL_ENTRY)&(_ZTI8S20272C7[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20272C7D1Ev,_ZTv0_n44_N8S20272C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20272C7D0Ev,_ZTv0_n44_N8S20272C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20272C33v17Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void ABISELECT(_ZTvn16_n88_N8S20272C7D1Ev,_ZTvn8_n44_N8S20272C7D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N8S20272C7D0Ev,_ZTvn8_n44_N8S20272C7D0Ev)();
extern void _ZN8S20272C53v11Ev();
extern void _ZN8S20272C53v12Ev();
extern void _ZN8S20272C53v13Ev();
extern void _ZN8S20272C53v14Ev();
extern void _ZN8S20272C53v15Ev();
extern void _ZN8S20272C53v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C58S20272C3__A1__8S20272C7__8S20272C1[] = {
  ABISELECT(104,60),
  ABISELECT(-264,-156),
  (VTBL_ENTRY)&(_ZTI8S20272C7[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N8S20272C7D1Ev,_ZTvn8_n44_N8S20272C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N8S20272C7D0Ev,_ZTvn8_n44_N8S20272C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20272C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v16Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C5D1Ev();
extern void _ZN8S20272C5D0Ev();
extern void _ZN8S20272C53v11Ev();
extern void _ZN8S20272C53v12Ev();
extern void _ZN8S20272C53v13Ev();
extern void _ZN8S20272C53v14Ev();
extern void _ZN8S20272C53v15Ev();
extern void _ZN8S20272C53v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C5__A2__8S20272C1[] = {
  ABISELECT(272,168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20272C5[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20272C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v16Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C4__8S20272C5__A2__8S20272C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-272,-168),
  (VTBL_ENTRY)&(_ZTI8S20272C5[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
extern void _ZN8S20272C3D1Ev();
extern void _ZN8S20272C3D0Ev();
extern void _ZN8S20272C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C3__8S20272C1[] = {
  ABISELECT(120,68),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20272C3[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20272C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20272C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20272C33v17Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C5D1Ev();
extern void _ZN8S20272C5D0Ev();
extern void _ZN8S20272C53v11Ev();
extern void _ZN8S20272C53v12Ev();
extern void _ZN8S20272C53v13Ev();
extern void _ZN8S20272C53v14Ev();
extern void _ZN8S20272C53v15Ev();
extern void _ZN8S20272C53v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C58S20272C3__8S20272C1[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20272C5[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20272C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v16Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C4__8S20272C58S20272C3__8S20272C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S20272C5[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C2__8S20272C3__8S20272C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20272C3[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void ABISELECT(_ZThn16_N8S20272C3D1Ev,_ZThn8_N8S20272C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20272C3D0Ev,_ZThn8_N8S20272C3D0Ev)();
extern void _ZN8S20272C53v11Ev();
extern void _ZN8S20272C53v12Ev();
extern void _ZN8S20272C53v13Ev();
extern void _ZN8S20272C53v14Ev();
extern void _ZN8S20272C53v15Ev();
extern void _ZN8S20272C53v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C5__8S20272C3__8S20272C1[] = {
  ABISELECT(104,60),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20272C3[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20272C3D1Ev,_ZThn8_N8S20272C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20272C3D0Ev,_ZThn8_N8S20272C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20272C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20272C53v16Ev,
};
extern void _ZN8S20272C22v5Ev();
extern void _ZN8S20272C22v6Ev();
extern void _ZN8S20272C22v7Ev();
extern void _ZN8S20272C22v8Ev();
extern void _ZN8S20272C42v9Ev();
extern void _ZN8S20272C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20272C4__A1__8S20272C3__8S20272C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI8S20272C3[0]),
  (VTBL_ENTRY)&_ZN8S20272C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20272C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20272C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20272C43v10Ev,
};
static  VTT_ENTRY vtt_S20272C1[] = {
  {&(_ZTV8S20272C1[6]),  6,116},
  {&(_tg__ZTV8S20272C7__8S20272C1[5]),  5,24},
  {&(_tg__ZTV8S20272C58S20272C7__A1__8S20272C1[3]),  3,15},
  {&(_tg__ZTV8S20272C4__8S20272C58S20272C7__A1__8S20272C1[8]),  8,14},
  {&(_tg__ZTV8S20272C2__8S20272C7__8S20272C1[6]),  6,10},
  {&(_tg__ZTV8S20272C4__8S20272C7__8S20272C1[8]),  8,14},
  {&(_tg__ZTV8S20272C3__8S20272C7__8S20272C1[18]),  18,27},
  {&(_tg__ZTV8S20272C58S20272C3__A1__8S20272C7__8S20272C1[3]),  3,15},
  {&(_tg__ZTV8S20272C5__A2__8S20272C1[3]),  3,15},
  {&(_tg__ZTV8S20272C4__8S20272C5__A2__8S20272C1[8]),  8,14},
  {&(_ZTV8S20272C1[50]),  50,116},
  {&(_ZTV8S20272C1[72]),  72,116},
  {&(_ZTV8S20272C1[84]),  84,116},
  {&(_ZTV8S20272C1[104]),  104,116},
  {&(_ZTV8S20272C1[32]),  32,116},
  {&(_ZTV8S20272C1[114]),  114,116},
  {&(_tg__ZTV8S20272C3__8S20272C1[4]),  4,13},
  {&(_tg__ZTV8S20272C58S20272C3__8S20272C1[3]),  3,15},
  {&(_tg__ZTV8S20272C4__8S20272C58S20272C3__8S20272C1[8]),  8,14},
  {&(_tg__ZTV8S20272C2__8S20272C3__8S20272C1[6]),  6,10},
  {&(_tg__ZTV8S20272C5__8S20272C3__8S20272C1[3]),  3,15},
  {&(_tg__ZTV8S20272C4__A1__8S20272C3__8S20272C1[8]),  8,14},
};
extern VTBL_ENTRY _ZTI8S20272C1[];
extern  VTBL_ENTRY _ZTV8S20272C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20272C1[];
static VTBL_ENTRY alt_thunk_names85[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20272C7D0Ev,_ZTv0_n44_N8S20272C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20272C7D0Ev,_ZThn148_N8S20272C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20272C7D1Ev,_ZTv0_n44_N8S20272C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20272C7D1Ev,_ZThn148_N8S20272C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20272C1D0Ev,_ZTv0_n44_N8S20272C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20272C1D0Ev,_ZThn148_N8S20272C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20272C1D1Ev,_ZTv0_n44_N8S20272C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20272C1D1Ev,_ZThn148_N8S20272C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20272C1 = {  "S20272C1", // class name
  bases_S20272C1, 14,
  &(vtc_S20272C1[0]), // expected_vtbl_contents
  &(vtt_S20272C1[0]), // expected_vtt_contents
  ABISELECT(392,228), // object size
  NSPAIRA(_ZTI8S20272C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20272C1),116, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20272C1),22, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names85,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1855C3  : S1850C4_nt {
  void *s1855c3f0[2];
  virtual  ~S1855C3(); // _ZN7S1855C3D1Ev
  virtual void  v5(); // _ZN7S1855C32v5Ev
  virtual void  v6(); // _ZN7S1855C32v6Ev
  virtual void  v7(); // _ZN7S1855C32v7Ev
  virtual void  v8(); // _ZN7S1855C32v8Ev
  virtual void  v9(); // _ZN7S1855C32v9Ev
  virtual void  v10(); // _ZN7S1855C33v10Ev
  virtual void  v11(); // _ZN7S1855C33v11Ev
  S1855C3(); // tgen
};
//SIG(-1 S1855C3) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S1855C3 ::~S1855C3(){ note_dtor("S1855C3", this);}
void  S1855C3 ::v5(){vfunc_called(this, "_ZN7S1855C32v5Ev");}
void  S1855C3 ::v6(){vfunc_called(this, "_ZN7S1855C32v6Ev");}
void  S1855C3 ::v7(){vfunc_called(this, "_ZN7S1855C32v7Ev");}
void  S1855C3 ::v8(){vfunc_called(this, "_ZN7S1855C32v8Ev");}
void  S1855C3 ::v9(){vfunc_called(this, "_ZN7S1855C32v9Ev");}
void  S1855C3 ::v10(){vfunc_called(this, "_ZN7S1855C33v10Ev");}
void  S1855C3 ::v11(){vfunc_called(this, "_ZN7S1855C33v11Ev");}
S1855C3 ::S1855C3(){ note_ctor("S1855C3", this);} // tgen

static void Test_S1855C3()
{
  extern Class_Descriptor cd_S1855C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1855C3, buf);
    S1855C3 *dp, &lv = *(dp=new (buf) S1855C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1855C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1855C3)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S1855C3");
    check_field_offset(lv, s1855c3f0, ABISELECT(8,4), "S1855C3.s1855c3f0");
    test_class_info(&lv, &cd_S1855C3);
    dp->~S1855C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1855C3(Test_S1855C3, "S1855C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1855C3C1Ev();
extern void _ZN7S1855C3D1Ev();
Name_Map name_map_S1855C3[] = {
  NSPAIR(_ZN7S1855C3C1Ev),
  NSPAIR(_ZN7S1855C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S1855C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1855C3[];
extern void _ZN7S1855C3D1Ev();
extern void _ZN7S1855C3D0Ev();
extern void _ZN7S1855C32v5Ev();
extern void _ZN7S1855C32v6Ev();
extern void _ZN7S1855C32v7Ev();
extern void _ZN7S1855C32v8Ev();
extern void _ZN7S1855C32v9Ev();
extern void _ZN7S1855C33v10Ev();
extern void _ZN7S1855C33v11Ev();
static  VTBL_ENTRY vtc_S1855C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1855C3[0]),
  (VTBL_ENTRY)&_ZN7S1855C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1855C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1855C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1855C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1855C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1855C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1855C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1855C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1855C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S1855C3[];
extern  VTBL_ENTRY _ZTV7S1855C3[];
Class_Descriptor cd_S1855C3 = {  "S1855C3", // class name
  bases_S1855C3, 1,
  &(vtc_S1855C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1855C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1855C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1855C2  : S1855C3 {
  int s1855c2f0[2];
  ::S1865C7 s1855c2f1;
  ::S1850C5_nt s1855c2f2;
  ::S3593C21_nt s1855c2f3;
  ::S1865C15 s1855c2f4;
  char s1855c2f5;
  ::S16113C2_nt s1855c2f6;
  virtual  ~S1855C2(); // _ZN7S1855C2D1Ev
  virtual void  v12(); // _ZN7S1855C23v12Ev
  virtual void  v13(); // _ZN7S1855C23v13Ev
  virtual void  v14(); // _ZN7S1855C23v14Ev
  virtual void  v15(); // _ZN7S1855C23v15Ev
  virtual void  v16(); // _ZN7S1855C23v16Ev
  virtual void  v17(); // _ZN7S1855C23v17Ev
  virtual void  v18(); // _ZN7S1855C23v18Ev
  virtual void  v19(); // _ZN7S1855C23v19Ev
  virtual void  v20(); // _ZN7S1855C23v20Ev
  virtual void  v21(); // _ZN7S1855C23v21Ev
  S1855C2(); // tgen
};
//SIG(-1 S1855C2) C1{ BC2{ BC3{ vd m} vd v11 v12 v13 v14 v15 v16 v17 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] FC4{ BC5{ vd v19} v18 Fp} FC6{ BC7{ vd v21} v20 Fp} FC8{ m Fp} FC9{ m Fp} Fc FC10{ m Fi}}


 S1855C2 ::~S1855C2(){ note_dtor("S1855C2", this);}
void  S1855C2 ::v12(){vfunc_called(this, "_ZN7S1855C23v12Ev");}
void  S1855C2 ::v13(){vfunc_called(this, "_ZN7S1855C23v13Ev");}
void  S1855C2 ::v14(){vfunc_called(this, "_ZN7S1855C23v14Ev");}
void  S1855C2 ::v15(){vfunc_called(this, "_ZN7S1855C23v15Ev");}
void  S1855C2 ::v16(){vfunc_called(this, "_ZN7S1855C23v16Ev");}
void  S1855C2 ::v17(){vfunc_called(this, "_ZN7S1855C23v17Ev");}
void  S1855C2 ::v18(){vfunc_called(this, "_ZN7S1855C23v18Ev");}
void  S1855C2 ::v19(){vfunc_called(this, "_ZN7S1855C23v19Ev");}
void  S1855C2 ::v20(){vfunc_called(this, "_ZN7S1855C23v20Ev");}
void  S1855C2 ::v21(){vfunc_called(this, "_ZN7S1855C23v21Ev");}
S1855C2 ::S1855C2(){ note_ctor("S1855C2", this);} // tgen

static void Test_S1855C2()
{
  extern Class_Descriptor cd_S1855C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S1855C2, buf);
    S1855C2 *dp, &lv = *(dp=new (buf) S1855C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S1855C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1855C2)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1855C3*), 0, "S1855C2");
    check_base_class_offset(lv, (S1855C3*), 0, "S1855C2");
    check_field_offset(lv, s1855c2f0, ABISELECT(24,12), "S1855C2.s1855c2f0");
    check_field_offset(lv, s1855c2f1, ABISELECT(32,20), "S1855C2.s1855c2f1");
    check_field_offset(lv, s1855c2f2, ABISELECT(48,28), "S1855C2.s1855c2f2");
    check_field_offset(lv, s1855c2f3, ABISELECT(64,36), "S1855C2.s1855c2f3");
    check_field_offset(lv, s1855c2f4, ABISELECT(72,40), "S1855C2.s1855c2f4");
    check_field_offset(lv, s1855c2f5, ABISELECT(80,44), "S1855C2.s1855c2f5");
    check_field_offset(lv, s1855c2f6, ABISELECT(84,48), "S1855C2.s1855c2f6");
    test_class_info(&lv, &cd_S1855C2);
    dp->~S1855C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1855C2(Test_S1855C2, "S1855C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S1855C2C1Ev();
extern void _ZN7S1855C2D1Ev();
Name_Map name_map_S1855C2[] = {
  NSPAIR(_ZN7S1855C2C1Ev),
  NSPAIR(_ZN7S1855C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1855C3;
extern VTBL_ENTRY _ZTI7S1855C3[];
extern  VTBL_ENTRY _ZTV7S1855C3[];
static Base_Class bases_S1855C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1855C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1855C2[];
extern void _ZN7S1855C2D1Ev();
extern void _ZN7S1855C2D0Ev();
extern void _ZN7S1855C32v5Ev();
extern void _ZN7S1855C32v6Ev();
extern void _ZN7S1855C32v7Ev();
extern void _ZN7S1855C32v8Ev();
extern void _ZN7S1855C32v9Ev();
extern void _ZN7S1855C33v10Ev();
extern void _ZN7S1855C33v11Ev();
extern void _ZN7S1855C23v12Ev();
extern void _ZN7S1855C23v13Ev();
extern void _ZN7S1855C23v14Ev();
extern void _ZN7S1855C23v15Ev();
extern void _ZN7S1855C23v16Ev();
extern void _ZN7S1855C23v17Ev();
extern void _ZN7S1855C23v18Ev();
extern void _ZN7S1855C23v19Ev();
extern void _ZN7S1855C23v20Ev();
extern void _ZN7S1855C23v21Ev();
static  VTBL_ENTRY vtc_S1855C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1855C2[0]),
  (VTBL_ENTRY)&_ZN7S1855C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1855C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1855C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1855C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1855C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1855C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1855C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1855C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1855C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v21Ev,
};
extern VTBL_ENTRY _ZTI7S1855C2[];
extern  VTBL_ENTRY _ZTV7S1855C2[];
Class_Descriptor cd_S1855C2 = {  "S1855C2", // class name
  bases_S1855C2, 2,
  &(vtc_S1855C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S1855C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1855C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1855C1  : S1855C2 {
  ::S1856C13_nt s1855c1f0;
  ::S1850C10_nt s1855c1f1;
  virtual  ~S1855C1(); // _ZN7S1855C1D1Ev
  virtual void  v1(); // _ZN7S1855C12v1Ev
  virtual void  v2(); // _ZN7S1855C12v2Ev
  virtual void  v3(); // _ZN7S1855C12v3Ev
  virtual void  v4(); // _ZN7S1855C12v4Ev
  S1855C1(); // tgen
};
//SIG(1 S1855C1) C1{ BC2{ BC3{ BC4{ vd m} vd v5 v6 v7 v8 v9 v10 v11 Fp[2]} vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fi[2] FC5{ BC6{ vd v23} v22 Fp} FC7{ BC8{ vd v25} v24 Fp} FC9{ m Fp} FC10{ m Fp} Fc FC11{ m Fi}} vd v1 v2 v3 v4 FC12{ m Fp} FC13{ m Fp}}


 S1855C1 ::~S1855C1(){ note_dtor("S1855C1", this);}
void  S1855C1 ::v1(){vfunc_called(this, "_ZN7S1855C12v1Ev");}
void  S1855C1 ::v2(){vfunc_called(this, "_ZN7S1855C12v2Ev");}
void  S1855C1 ::v3(){vfunc_called(this, "_ZN7S1855C12v3Ev");}
void  S1855C1 ::v4(){vfunc_called(this, "_ZN7S1855C12v4Ev");}
S1855C1 ::S1855C1(){ note_ctor("S1855C1", this);} // tgen

static void Test_S1855C1()
{
  extern Class_Descriptor cd_S1855C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,16)];
    init_test(&cd_S1855C1, buf);
    S1855C1 *dp, &lv = *(dp=new (buf) S1855C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,60), "sizeof(S1855C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1855C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1855C3*)(S1855C2*), 0, "S1855C1");
    check_base_class_offset(lv, (S1855C3*)(S1855C2*), 0, "S1855C1");
    check_base_class_offset(lv, (S1855C2*), 0, "S1855C1");
    check_field_offset(lv, s1855c1f0, ABISELECT(88,52), "S1855C1.s1855c1f0");
    check_field_offset(lv, s1855c1f1, ABISELECT(96,56), "S1855C1.s1855c1f1");
    test_class_info(&lv, &cd_S1855C1);
    dp->~S1855C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1855C1(Test_S1855C1, "S1855C1", ABISELECT(104,60));

#else // __cplusplus

extern void _ZN7S1855C1C1Ev();
extern void _ZN7S1855C1D1Ev();
Name_Map name_map_S1855C1[] = {
  NSPAIR(_ZN7S1855C1C1Ev),
  NSPAIR(_ZN7S1855C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1855C3;
extern VTBL_ENTRY _ZTI7S1855C3[];
extern  VTBL_ENTRY _ZTV7S1855C3[];
extern Class_Descriptor cd_S1855C2;
extern VTBL_ENTRY _ZTI7S1855C2[];
extern  VTBL_ENTRY _ZTV7S1855C2[];
static Base_Class bases_S1855C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1855C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1855C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1855C1[];
extern void _ZN7S1855C1D1Ev();
extern void _ZN7S1855C1D0Ev();
extern void _ZN7S1855C32v5Ev();
extern void _ZN7S1855C32v6Ev();
extern void _ZN7S1855C32v7Ev();
extern void _ZN7S1855C32v8Ev();
extern void _ZN7S1855C32v9Ev();
extern void _ZN7S1855C33v10Ev();
extern void _ZN7S1855C33v11Ev();
extern void _ZN7S1855C23v12Ev();
extern void _ZN7S1855C23v13Ev();
extern void _ZN7S1855C23v14Ev();
extern void _ZN7S1855C23v15Ev();
extern void _ZN7S1855C23v16Ev();
extern void _ZN7S1855C23v17Ev();
extern void _ZN7S1855C23v18Ev();
extern void _ZN7S1855C23v19Ev();
extern void _ZN7S1855C23v20Ev();
extern void _ZN7S1855C23v21Ev();
extern void _ZN7S1855C12v1Ev();
extern void _ZN7S1855C12v2Ev();
extern void _ZN7S1855C12v3Ev();
extern void _ZN7S1855C12v4Ev();
static  VTBL_ENTRY vtc_S1855C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1855C1[0]),
  (VTBL_ENTRY)&_ZN7S1855C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1855C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1855C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1855C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1855C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1855C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1855C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1855C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1855C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1855C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1855C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1855C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1855C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1855C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1855C1[];
extern  VTBL_ENTRY _ZTV7S1855C1[];
Class_Descriptor cd_S1855C1 = {  "S1855C1", // class name
  bases_S1855C1, 3,
  &(vtc_S1855C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,60), // object size
  NSPAIRA(_ZTI7S1855C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1855C1),25, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1857C3  : S1850C4_nt {
  void *s1857c3f0[2];
  virtual  ~S1857C3(); // _ZN7S1857C3D1Ev
  virtual void  v5(); // _ZN7S1857C32v5Ev
  virtual void  v6(); // _ZN7S1857C32v6Ev
  virtual void  v7(); // _ZN7S1857C32v7Ev
  virtual void  v8(); // _ZN7S1857C32v8Ev
  virtual void  v9(); // _ZN7S1857C32v9Ev
  virtual void  v10(); // _ZN7S1857C33v10Ev
  virtual void  v11(); // _ZN7S1857C33v11Ev
  S1857C3(); // tgen
};
//SIG(-1 S1857C3) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S1857C3 ::~S1857C3(){ note_dtor("S1857C3", this);}
void  S1857C3 ::v5(){vfunc_called(this, "_ZN7S1857C32v5Ev");}
void  S1857C3 ::v6(){vfunc_called(this, "_ZN7S1857C32v6Ev");}
void  S1857C3 ::v7(){vfunc_called(this, "_ZN7S1857C32v7Ev");}
void  S1857C3 ::v8(){vfunc_called(this, "_ZN7S1857C32v8Ev");}
void  S1857C3 ::v9(){vfunc_called(this, "_ZN7S1857C32v9Ev");}
void  S1857C3 ::v10(){vfunc_called(this, "_ZN7S1857C33v10Ev");}
void  S1857C3 ::v11(){vfunc_called(this, "_ZN7S1857C33v11Ev");}
S1857C3 ::S1857C3(){ note_ctor("S1857C3", this);} // tgen

static void Test_S1857C3()
{
  extern Class_Descriptor cd_S1857C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1857C3, buf);
    S1857C3 *dp, &lv = *(dp=new (buf) S1857C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1857C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1857C3)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S1857C3");
    check_field_offset(lv, s1857c3f0, ABISELECT(8,4), "S1857C3.s1857c3f0");
    test_class_info(&lv, &cd_S1857C3);
    dp->~S1857C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1857C3(Test_S1857C3, "S1857C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1857C3C1Ev();
extern void _ZN7S1857C3D1Ev();
Name_Map name_map_S1857C3[] = {
  NSPAIR(_ZN7S1857C3C1Ev),
  NSPAIR(_ZN7S1857C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S1857C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1857C3[];
extern void _ZN7S1857C3D1Ev();
extern void _ZN7S1857C3D0Ev();
extern void _ZN7S1857C32v5Ev();
extern void _ZN7S1857C32v6Ev();
extern void _ZN7S1857C32v7Ev();
extern void _ZN7S1857C32v8Ev();
extern void _ZN7S1857C32v9Ev();
extern void _ZN7S1857C33v10Ev();
extern void _ZN7S1857C33v11Ev();
static  VTBL_ENTRY vtc_S1857C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1857C3[0]),
  (VTBL_ENTRY)&_ZN7S1857C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1857C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1857C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1857C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1857C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1857C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1857C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1857C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1857C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S1857C3[];
extern  VTBL_ENTRY _ZTV7S1857C3[];
Class_Descriptor cd_S1857C3 = {  "S1857C3", // class name
  bases_S1857C3, 1,
  &(vtc_S1857C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1857C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1857C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1857C2  : S1857C3 {
  int s1857c2f0[2];
  ::S1865C7 s1857c2f1;
  ::S1850C5_nt s1857c2f2;
  ::S3593C21_nt s1857c2f3;
  ::S1865C15 s1857c2f4;
  char s1857c2f5;
  ::S16113C2_nt s1857c2f6;
  virtual  ~S1857C2(); // _ZN7S1857C2D1Ev
  virtual void  v12(); // _ZN7S1857C23v12Ev
  virtual void  v13(); // _ZN7S1857C23v13Ev
  virtual void  v14(); // _ZN7S1857C23v14Ev
  virtual void  v15(); // _ZN7S1857C23v15Ev
  virtual void  v16(); // _ZN7S1857C23v16Ev
  virtual void  v17(); // _ZN7S1857C23v17Ev
  virtual void  v18(); // _ZN7S1857C23v18Ev
  virtual void  v19(); // _ZN7S1857C23v19Ev
  virtual void  v20(); // _ZN7S1857C23v20Ev
  virtual void  v21(); // _ZN7S1857C23v21Ev
  S1857C2(); // tgen
};
//SIG(-1 S1857C2) C1{ BC2{ BC3{ vd m} vd v11 v12 v13 v14 v15 v16 v17 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] FC4{ BC5{ vd v19} v18 Fp} FC6{ BC7{ vd v21} v20 Fp} FC8{ m Fp} FC9{ m Fp} Fc FC10{ m Fi}}


 S1857C2 ::~S1857C2(){ note_dtor("S1857C2", this);}
void  S1857C2 ::v12(){vfunc_called(this, "_ZN7S1857C23v12Ev");}
void  S1857C2 ::v13(){vfunc_called(this, "_ZN7S1857C23v13Ev");}
void  S1857C2 ::v14(){vfunc_called(this, "_ZN7S1857C23v14Ev");}
void  S1857C2 ::v15(){vfunc_called(this, "_ZN7S1857C23v15Ev");}
void  S1857C2 ::v16(){vfunc_called(this, "_ZN7S1857C23v16Ev");}
void  S1857C2 ::v17(){vfunc_called(this, "_ZN7S1857C23v17Ev");}
void  S1857C2 ::v18(){vfunc_called(this, "_ZN7S1857C23v18Ev");}
void  S1857C2 ::v19(){vfunc_called(this, "_ZN7S1857C23v19Ev");}
void  S1857C2 ::v20(){vfunc_called(this, "_ZN7S1857C23v20Ev");}
void  S1857C2 ::v21(){vfunc_called(this, "_ZN7S1857C23v21Ev");}
S1857C2 ::S1857C2(){ note_ctor("S1857C2", this);} // tgen

static void Test_S1857C2()
{
  extern Class_Descriptor cd_S1857C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S1857C2, buf);
    S1857C2 *dp, &lv = *(dp=new (buf) S1857C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S1857C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1857C2)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1857C3*), 0, "S1857C2");
    check_base_class_offset(lv, (S1857C3*), 0, "S1857C2");
    check_field_offset(lv, s1857c2f0, ABISELECT(24,12), "S1857C2.s1857c2f0");
    check_field_offset(lv, s1857c2f1, ABISELECT(32,20), "S1857C2.s1857c2f1");
    check_field_offset(lv, s1857c2f2, ABISELECT(48,28), "S1857C2.s1857c2f2");
    check_field_offset(lv, s1857c2f3, ABISELECT(64,36), "S1857C2.s1857c2f3");
    check_field_offset(lv, s1857c2f4, ABISELECT(72,40), "S1857C2.s1857c2f4");
    check_field_offset(lv, s1857c2f5, ABISELECT(80,44), "S1857C2.s1857c2f5");
    check_field_offset(lv, s1857c2f6, ABISELECT(84,48), "S1857C2.s1857c2f6");
    test_class_info(&lv, &cd_S1857C2);
    dp->~S1857C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1857C2(Test_S1857C2, "S1857C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S1857C2C1Ev();
extern void _ZN7S1857C2D1Ev();
Name_Map name_map_S1857C2[] = {
  NSPAIR(_ZN7S1857C2C1Ev),
  NSPAIR(_ZN7S1857C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1857C3;
extern VTBL_ENTRY _ZTI7S1857C3[];
extern  VTBL_ENTRY _ZTV7S1857C3[];
static Base_Class bases_S1857C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1857C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1857C2[];
extern void _ZN7S1857C2D1Ev();
extern void _ZN7S1857C2D0Ev();
extern void _ZN7S1857C32v5Ev();
extern void _ZN7S1857C32v6Ev();
extern void _ZN7S1857C32v7Ev();
extern void _ZN7S1857C32v8Ev();
extern void _ZN7S1857C32v9Ev();
extern void _ZN7S1857C33v10Ev();
extern void _ZN7S1857C33v11Ev();
extern void _ZN7S1857C23v12Ev();
extern void _ZN7S1857C23v13Ev();
extern void _ZN7S1857C23v14Ev();
extern void _ZN7S1857C23v15Ev();
extern void _ZN7S1857C23v16Ev();
extern void _ZN7S1857C23v17Ev();
extern void _ZN7S1857C23v18Ev();
extern void _ZN7S1857C23v19Ev();
extern void _ZN7S1857C23v20Ev();
extern void _ZN7S1857C23v21Ev();
static  VTBL_ENTRY vtc_S1857C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1857C2[0]),
  (VTBL_ENTRY)&_ZN7S1857C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1857C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1857C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1857C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1857C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1857C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1857C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1857C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1857C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v21Ev,
};
extern VTBL_ENTRY _ZTI7S1857C2[];
extern  VTBL_ENTRY _ZTV7S1857C2[];
Class_Descriptor cd_S1857C2 = {  "S1857C2", // class name
  bases_S1857C2, 2,
  &(vtc_S1857C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S1857C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1857C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1857C1  : S1857C2 {
  int s1857c1f0;
  void *s1857c1f1[2];
  ::S1856C13_nt s1857c1f2;
  virtual  ~S1857C1(); // _ZN7S1857C1D1Ev
  virtual void  v1(); // _ZN7S1857C12v1Ev
  virtual void  v2(); // _ZN7S1857C12v2Ev
  virtual void  v3(); // _ZN7S1857C12v3Ev
  virtual void  v4(); // _ZN7S1857C12v4Ev
  S1857C1(); // tgen
};
//SIG(1 S1857C1) C1{ BC2{ BC3{ BC4{ vd m} vd v5 v6 v7 v8 v9 v10 v11 Fp[2]} vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fi[2] FC5{ BC6{ vd v23} v22 Fp} FC7{ BC8{ vd v25} v24 Fp} FC9{ m Fp} FC10{ m Fp} Fc FC11{ m Fi}} vd v1 v2 v3 v4 Fi Fp[2] FC12{ m Fp}}


 S1857C1 ::~S1857C1(){ note_dtor("S1857C1", this);}
void  S1857C1 ::v1(){vfunc_called(this, "_ZN7S1857C12v1Ev");}
void  S1857C1 ::v2(){vfunc_called(this, "_ZN7S1857C12v2Ev");}
void  S1857C1 ::v3(){vfunc_called(this, "_ZN7S1857C12v3Ev");}
void  S1857C1 ::v4(){vfunc_called(this, "_ZN7S1857C12v4Ev");}
S1857C1 ::S1857C1(){ note_ctor("S1857C1", this);} // tgen

static void Test_S1857C1()
{
  extern Class_Descriptor cd_S1857C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,18)];
    init_test(&cd_S1857C1, buf);
    S1857C1 *dp, &lv = *(dp=new (buf) S1857C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,68), "sizeof(S1857C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1857C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1857C3*)(S1857C2*), 0, "S1857C1");
    check_base_class_offset(lv, (S1857C3*)(S1857C2*), 0, "S1857C1");
    check_base_class_offset(lv, (S1857C2*), 0, "S1857C1");
    check_field_offset(lv, s1857c1f0, ABISELECT(88,52), "S1857C1.s1857c1f0");
    check_field_offset(lv, s1857c1f1, ABISELECT(96,56), "S1857C1.s1857c1f1");
    check_field_offset(lv, s1857c1f2, ABISELECT(112,64), "S1857C1.s1857c1f2");
    test_class_info(&lv, &cd_S1857C1);
    dp->~S1857C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1857C1(Test_S1857C1, "S1857C1", ABISELECT(120,68));

#else // __cplusplus

extern void _ZN7S1857C1C1Ev();
extern void _ZN7S1857C1D1Ev();
Name_Map name_map_S1857C1[] = {
  NSPAIR(_ZN7S1857C1C1Ev),
  NSPAIR(_ZN7S1857C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1857C3;
extern VTBL_ENTRY _ZTI7S1857C3[];
extern  VTBL_ENTRY _ZTV7S1857C3[];
extern Class_Descriptor cd_S1857C2;
extern VTBL_ENTRY _ZTI7S1857C2[];
extern  VTBL_ENTRY _ZTV7S1857C2[];
static Base_Class bases_S1857C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1857C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1857C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1857C1[];
extern void _ZN7S1857C1D1Ev();
extern void _ZN7S1857C1D0Ev();
extern void _ZN7S1857C32v5Ev();
extern void _ZN7S1857C32v6Ev();
extern void _ZN7S1857C32v7Ev();
extern void _ZN7S1857C32v8Ev();
extern void _ZN7S1857C32v9Ev();
extern void _ZN7S1857C33v10Ev();
extern void _ZN7S1857C33v11Ev();
extern void _ZN7S1857C23v12Ev();
extern void _ZN7S1857C23v13Ev();
extern void _ZN7S1857C23v14Ev();
extern void _ZN7S1857C23v15Ev();
extern void _ZN7S1857C23v16Ev();
extern void _ZN7S1857C23v17Ev();
extern void _ZN7S1857C23v18Ev();
extern void _ZN7S1857C23v19Ev();
extern void _ZN7S1857C23v20Ev();
extern void _ZN7S1857C23v21Ev();
extern void _ZN7S1857C12v1Ev();
extern void _ZN7S1857C12v2Ev();
extern void _ZN7S1857C12v3Ev();
extern void _ZN7S1857C12v4Ev();
static  VTBL_ENTRY vtc_S1857C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1857C1[0]),
  (VTBL_ENTRY)&_ZN7S1857C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1857C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1857C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1857C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1857C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1857C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1857C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1857C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1857C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1857C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1857C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1857C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1857C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1857C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1857C1[];
extern  VTBL_ENTRY _ZTV7S1857C1[];
Class_Descriptor cd_S1857C1 = {  "S1857C1", // class name
  bases_S1857C1, 3,
  &(vtc_S1857C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,68), // object size
  NSPAIRA(_ZTI7S1857C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1857C1),25, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1862C3  : S1850C4_nt {
  void *s1862c3f0[2];
  virtual  ~S1862C3(); // _ZN7S1862C3D1Ev
  virtual void  v6(); // _ZN7S1862C32v6Ev
  virtual void  v7(); // _ZN7S1862C32v7Ev
  virtual void  v8(); // _ZN7S1862C32v8Ev
  virtual void  v9(); // _ZN7S1862C32v9Ev
  virtual void  v10(); // _ZN7S1862C33v10Ev
  virtual void  v11(); // _ZN7S1862C33v11Ev
  virtual void  v12(); // _ZN7S1862C33v12Ev
  S1862C3(); // tgen
};
//SIG(-1 S1862C3) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S1862C3 ::~S1862C3(){ note_dtor("S1862C3", this);}
void  S1862C3 ::v6(){vfunc_called(this, "_ZN7S1862C32v6Ev");}
void  S1862C3 ::v7(){vfunc_called(this, "_ZN7S1862C32v7Ev");}
void  S1862C3 ::v8(){vfunc_called(this, "_ZN7S1862C32v8Ev");}
void  S1862C3 ::v9(){vfunc_called(this, "_ZN7S1862C32v9Ev");}
void  S1862C3 ::v10(){vfunc_called(this, "_ZN7S1862C33v10Ev");}
void  S1862C3 ::v11(){vfunc_called(this, "_ZN7S1862C33v11Ev");}
void  S1862C3 ::v12(){vfunc_called(this, "_ZN7S1862C33v12Ev");}
S1862C3 ::S1862C3(){ note_ctor("S1862C3", this);} // tgen

static void Test_S1862C3()
{
  extern Class_Descriptor cd_S1862C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1862C3, buf);
    S1862C3 *dp, &lv = *(dp=new (buf) S1862C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1862C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1862C3)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S1862C3");
    check_field_offset(lv, s1862c3f0, ABISELECT(8,4), "S1862C3.s1862c3f0");
    test_class_info(&lv, &cd_S1862C3);
    dp->~S1862C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1862C3(Test_S1862C3, "S1862C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1862C3C1Ev();
extern void _ZN7S1862C3D1Ev();
Name_Map name_map_S1862C3[] = {
  NSPAIR(_ZN7S1862C3C1Ev),
  NSPAIR(_ZN7S1862C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S1862C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1862C3[];
extern void _ZN7S1862C3D1Ev();
extern void _ZN7S1862C3D0Ev();
extern void _ZN7S1862C32v6Ev();
extern void _ZN7S1862C32v7Ev();
extern void _ZN7S1862C32v8Ev();
extern void _ZN7S1862C32v9Ev();
extern void _ZN7S1862C33v10Ev();
extern void _ZN7S1862C33v11Ev();
extern void _ZN7S1862C33v12Ev();
static  VTBL_ENTRY vtc_S1862C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1862C3[0]),
  (VTBL_ENTRY)&_ZN7S1862C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1862C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1862C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1862C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1862C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1862C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1862C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1862C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1862C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S1862C3[];
extern  VTBL_ENTRY _ZTV7S1862C3[];
Class_Descriptor cd_S1862C3 = {  "S1862C3", // class name
  bases_S1862C3, 1,
  &(vtc_S1862C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1862C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1862C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1862C2  : S1862C3 {
  int s1862c2f0[2];
  ::S1865C7 s1862c2f1;
  ::S1850C5_nt s1862c2f2;
  ::S3593C21_nt s1862c2f3;
  ::S1865C15 s1862c2f4;
  char s1862c2f5;
  ::S16113C2_nt s1862c2f6;
  virtual  ~S1862C2(); // _ZN7S1862C2D1Ev
  virtual void  v13(); // _ZN7S1862C23v13Ev
  virtual void  v14(); // _ZN7S1862C23v14Ev
  virtual void  v15(); // _ZN7S1862C23v15Ev
  virtual void  v16(); // _ZN7S1862C23v16Ev
  virtual void  v17(); // _ZN7S1862C23v17Ev
  virtual void  v18(); // _ZN7S1862C23v18Ev
  virtual void  v19(); // _ZN7S1862C23v19Ev
  virtual void  v20(); // _ZN7S1862C23v20Ev
  virtual void  v21(); // _ZN7S1862C23v21Ev
  virtual void  v22(); // _ZN7S1862C23v22Ev
  S1862C2(); // tgen
};
//SIG(-1 S1862C2) C1{ BC2{ BC3{ vd m} vd v11 v12 v13 v14 v15 v16 v17 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] FC4{ BC5{ vd v19} v18 Fp} FC6{ BC7{ vd v21} v20 Fp} FC8{ m Fp} FC9{ m Fp} Fc FC10{ m Fi}}


 S1862C2 ::~S1862C2(){ note_dtor("S1862C2", this);}
void  S1862C2 ::v13(){vfunc_called(this, "_ZN7S1862C23v13Ev");}
void  S1862C2 ::v14(){vfunc_called(this, "_ZN7S1862C23v14Ev");}
void  S1862C2 ::v15(){vfunc_called(this, "_ZN7S1862C23v15Ev");}
void  S1862C2 ::v16(){vfunc_called(this, "_ZN7S1862C23v16Ev");}
void  S1862C2 ::v17(){vfunc_called(this, "_ZN7S1862C23v17Ev");}
void  S1862C2 ::v18(){vfunc_called(this, "_ZN7S1862C23v18Ev");}
void  S1862C2 ::v19(){vfunc_called(this, "_ZN7S1862C23v19Ev");}
void  S1862C2 ::v20(){vfunc_called(this, "_ZN7S1862C23v20Ev");}
void  S1862C2 ::v21(){vfunc_called(this, "_ZN7S1862C23v21Ev");}
void  S1862C2 ::v22(){vfunc_called(this, "_ZN7S1862C23v22Ev");}
S1862C2 ::S1862C2(){ note_ctor("S1862C2", this);} // tgen

static void Test_S1862C2()
{
  extern Class_Descriptor cd_S1862C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S1862C2, buf);
    S1862C2 *dp, &lv = *(dp=new (buf) S1862C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S1862C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1862C2)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1862C3*), 0, "S1862C2");
    check_base_class_offset(lv, (S1862C3*), 0, "S1862C2");
    check_field_offset(lv, s1862c2f0, ABISELECT(24,12), "S1862C2.s1862c2f0");
    check_field_offset(lv, s1862c2f1, ABISELECT(32,20), "S1862C2.s1862c2f1");
    check_field_offset(lv, s1862c2f2, ABISELECT(48,28), "S1862C2.s1862c2f2");
    check_field_offset(lv, s1862c2f3, ABISELECT(64,36), "S1862C2.s1862c2f3");
    check_field_offset(lv, s1862c2f4, ABISELECT(72,40), "S1862C2.s1862c2f4");
    check_field_offset(lv, s1862c2f5, ABISELECT(80,44), "S1862C2.s1862c2f5");
    check_field_offset(lv, s1862c2f6, ABISELECT(84,48), "S1862C2.s1862c2f6");
    test_class_info(&lv, &cd_S1862C2);
    dp->~S1862C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1862C2(Test_S1862C2, "S1862C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S1862C2C1Ev();
extern void _ZN7S1862C2D1Ev();
Name_Map name_map_S1862C2[] = {
  NSPAIR(_ZN7S1862C2C1Ev),
  NSPAIR(_ZN7S1862C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1862C3;
extern VTBL_ENTRY _ZTI7S1862C3[];
extern  VTBL_ENTRY _ZTV7S1862C3[];
static Base_Class bases_S1862C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1862C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1862C2[];
extern void _ZN7S1862C2D1Ev();
extern void _ZN7S1862C2D0Ev();
extern void _ZN7S1862C32v6Ev();
extern void _ZN7S1862C32v7Ev();
extern void _ZN7S1862C32v8Ev();
extern void _ZN7S1862C32v9Ev();
extern void _ZN7S1862C33v10Ev();
extern void _ZN7S1862C33v11Ev();
extern void _ZN7S1862C33v12Ev();
extern void _ZN7S1862C23v13Ev();
extern void _ZN7S1862C23v14Ev();
extern void _ZN7S1862C23v15Ev();
extern void _ZN7S1862C23v16Ev();
extern void _ZN7S1862C23v17Ev();
extern void _ZN7S1862C23v18Ev();
extern void _ZN7S1862C23v19Ev();
extern void _ZN7S1862C23v20Ev();
extern void _ZN7S1862C23v21Ev();
extern void _ZN7S1862C23v22Ev();
static  VTBL_ENTRY vtc_S1862C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1862C2[0]),
  (VTBL_ENTRY)&_ZN7S1862C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1862C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1862C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1862C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1862C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1862C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1862C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1862C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1862C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v22Ev,
};
extern VTBL_ENTRY _ZTI7S1862C2[];
extern  VTBL_ENTRY _ZTV7S1862C2[];
Class_Descriptor cd_S1862C2 = {  "S1862C2", // class name
  bases_S1862C2, 2,
  &(vtc_S1862C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S1862C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1862C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1862C1  : S1862C2 {
  ::S1856C13_nt s1862c1f0;
  virtual  ~S1862C1(); // _ZN7S1862C1D1Ev
  virtual void  v1(); // _ZN7S1862C12v1Ev
  virtual void  v2(); // _ZN7S1862C12v2Ev
  virtual void  v3(); // _ZN7S1862C12v3Ev
  virtual void  v4(); // _ZN7S1862C12v4Ev
  virtual void  v5(); // _ZN7S1862C12v5Ev
  S1862C1(); // tgen
};
//SIG(1 S1862C1) C1{ BC2{ BC3{ BC4{ vd m} vd v6 v7 v8 v9 v10 v11 v12 Fp[2]} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] FC5{ BC6{ vd v24} v23 Fp} FC7{ BC8{ vd v26} v25 Fp} FC9{ m Fp} FC10{ m Fp} Fc FC11{ m Fi}} vd v1 v2 v3 v4 v5 FC12{ m Fp}}


 S1862C1 ::~S1862C1(){ note_dtor("S1862C1", this);}
void  S1862C1 ::v1(){vfunc_called(this, "_ZN7S1862C12v1Ev");}
void  S1862C1 ::v2(){vfunc_called(this, "_ZN7S1862C12v2Ev");}
void  S1862C1 ::v3(){vfunc_called(this, "_ZN7S1862C12v3Ev");}
void  S1862C1 ::v4(){vfunc_called(this, "_ZN7S1862C12v4Ev");}
void  S1862C1 ::v5(){vfunc_called(this, "_ZN7S1862C12v5Ev");}
S1862C1 ::S1862C1(){ note_ctor("S1862C1", this);} // tgen

static void Test_S1862C1()
{
  extern Class_Descriptor cd_S1862C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,15)];
    init_test(&cd_S1862C1, buf);
    S1862C1 *dp, &lv = *(dp=new (buf) S1862C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S1862C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1862C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1862C3*)(S1862C2*), 0, "S1862C1");
    check_base_class_offset(lv, (S1862C3*)(S1862C2*), 0, "S1862C1");
    check_base_class_offset(lv, (S1862C2*), 0, "S1862C1");
    check_field_offset(lv, s1862c1f0, ABISELECT(88,52), "S1862C1.s1862c1f0");
    test_class_info(&lv, &cd_S1862C1);
    dp->~S1862C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1862C1(Test_S1862C1, "S1862C1", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S1862C1C1Ev();
extern void _ZN7S1862C1D1Ev();
Name_Map name_map_S1862C1[] = {
  NSPAIR(_ZN7S1862C1C1Ev),
  NSPAIR(_ZN7S1862C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1862C3;
extern VTBL_ENTRY _ZTI7S1862C3[];
extern  VTBL_ENTRY _ZTV7S1862C3[];
extern Class_Descriptor cd_S1862C2;
extern VTBL_ENTRY _ZTI7S1862C2[];
extern  VTBL_ENTRY _ZTV7S1862C2[];
static Base_Class bases_S1862C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1862C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1862C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1862C1[];
extern void _ZN7S1862C1D1Ev();
extern void _ZN7S1862C1D0Ev();
extern void _ZN7S1862C32v6Ev();
extern void _ZN7S1862C32v7Ev();
extern void _ZN7S1862C32v8Ev();
extern void _ZN7S1862C32v9Ev();
extern void _ZN7S1862C33v10Ev();
extern void _ZN7S1862C33v11Ev();
extern void _ZN7S1862C33v12Ev();
extern void _ZN7S1862C23v13Ev();
extern void _ZN7S1862C23v14Ev();
extern void _ZN7S1862C23v15Ev();
extern void _ZN7S1862C23v16Ev();
extern void _ZN7S1862C23v17Ev();
extern void _ZN7S1862C23v18Ev();
extern void _ZN7S1862C23v19Ev();
extern void _ZN7S1862C23v20Ev();
extern void _ZN7S1862C23v21Ev();
extern void _ZN7S1862C23v22Ev();
extern void _ZN7S1862C12v1Ev();
extern void _ZN7S1862C12v2Ev();
extern void _ZN7S1862C12v3Ev();
extern void _ZN7S1862C12v4Ev();
extern void _ZN7S1862C12v5Ev();
static  VTBL_ENTRY vtc_S1862C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1862C1[0]),
  (VTBL_ENTRY)&_ZN7S1862C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1862C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1862C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1862C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1862C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1862C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1862C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1862C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1862C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1862C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1862C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1862C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1862C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1862C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1862C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1862C1[];
extern  VTBL_ENTRY _ZTV7S1862C1[];
Class_Descriptor cd_S1862C1 = {  "S1862C1", // class name
  bases_S1862C1, 3,
  &(vtc_S1862C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S1862C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1862C1),26, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1854C3  : S1850C4_nt {
  void *s1854c3f0[2];
  virtual  ~S1854C3(); // _ZN7S1854C3D1Ev
  virtual void  v5(); // _ZN7S1854C32v5Ev
  virtual void  v6(); // _ZN7S1854C32v6Ev
  virtual void  v7(); // _ZN7S1854C32v7Ev
  virtual void  v8(); // _ZN7S1854C32v8Ev
  virtual void  v9(); // _ZN7S1854C32v9Ev
  virtual void  v10(); // _ZN7S1854C33v10Ev
  virtual void  v11(); // _ZN7S1854C33v11Ev
  S1854C3(); // tgen
};
//SIG(-1 S1854C3) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S1854C3 ::~S1854C3(){ note_dtor("S1854C3", this);}
void  S1854C3 ::v5(){vfunc_called(this, "_ZN7S1854C32v5Ev");}
void  S1854C3 ::v6(){vfunc_called(this, "_ZN7S1854C32v6Ev");}
void  S1854C3 ::v7(){vfunc_called(this, "_ZN7S1854C32v7Ev");}
void  S1854C3 ::v8(){vfunc_called(this, "_ZN7S1854C32v8Ev");}
void  S1854C3 ::v9(){vfunc_called(this, "_ZN7S1854C32v9Ev");}
void  S1854C3 ::v10(){vfunc_called(this, "_ZN7S1854C33v10Ev");}
void  S1854C3 ::v11(){vfunc_called(this, "_ZN7S1854C33v11Ev");}
S1854C3 ::S1854C3(){ note_ctor("S1854C3", this);} // tgen

static void Test_S1854C3()
{
  extern Class_Descriptor cd_S1854C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1854C3, buf);
    S1854C3 *dp, &lv = *(dp=new (buf) S1854C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1854C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1854C3)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S1854C3");
    check_field_offset(lv, s1854c3f0, ABISELECT(8,4), "S1854C3.s1854c3f0");
    test_class_info(&lv, &cd_S1854C3);
    dp->~S1854C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1854C3(Test_S1854C3, "S1854C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1854C3C1Ev();
extern void _ZN7S1854C3D1Ev();
Name_Map name_map_S1854C3[] = {
  NSPAIR(_ZN7S1854C3C1Ev),
  NSPAIR(_ZN7S1854C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S1854C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1854C3[];
extern void _ZN7S1854C3D1Ev();
extern void _ZN7S1854C3D0Ev();
extern void _ZN7S1854C32v5Ev();
extern void _ZN7S1854C32v6Ev();
extern void _ZN7S1854C32v7Ev();
extern void _ZN7S1854C32v8Ev();
extern void _ZN7S1854C32v9Ev();
extern void _ZN7S1854C33v10Ev();
extern void _ZN7S1854C33v11Ev();
static  VTBL_ENTRY vtc_S1854C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1854C3[0]),
  (VTBL_ENTRY)&_ZN7S1854C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1854C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1854C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1854C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1854C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1854C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1854C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1854C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1854C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S1854C3[];
extern  VTBL_ENTRY _ZTV7S1854C3[];
Class_Descriptor cd_S1854C3 = {  "S1854C3", // class name
  bases_S1854C3, 1,
  &(vtc_S1854C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1854C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1854C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1854C2  : S1854C3 {
  int s1854c2f0[2];
  ::S1865C7 s1854c2f1;
  ::S1850C5_nt s1854c2f2;
  ::S3593C21_nt s1854c2f3;
  ::S1865C15 s1854c2f4;
  char s1854c2f5;
  ::S16113C2_nt s1854c2f6;
  virtual  ~S1854C2(); // _ZN7S1854C2D1Ev
  virtual void  v12(); // _ZN7S1854C23v12Ev
  virtual void  v13(); // _ZN7S1854C23v13Ev
  virtual void  v14(); // _ZN7S1854C23v14Ev
  virtual void  v15(); // _ZN7S1854C23v15Ev
  virtual void  v16(); // _ZN7S1854C23v16Ev
  virtual void  v17(); // _ZN7S1854C23v17Ev
  virtual void  v18(); // _ZN7S1854C23v18Ev
  virtual void  v19(); // _ZN7S1854C23v19Ev
  virtual void  v20(); // _ZN7S1854C23v20Ev
  virtual void  v21(); // _ZN7S1854C23v21Ev
  S1854C2(); // tgen
};
//SIG(-1 S1854C2) C1{ BC2{ BC3{ vd m} vd v11 v12 v13 v14 v15 v16 v17 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] FC4{ BC5{ vd v19} v18 Fp} FC6{ BC7{ vd v21} v20 Fp} FC8{ m Fp} FC9{ m Fp} Fc FC10{ m Fi}}


 S1854C2 ::~S1854C2(){ note_dtor("S1854C2", this);}
void  S1854C2 ::v12(){vfunc_called(this, "_ZN7S1854C23v12Ev");}
void  S1854C2 ::v13(){vfunc_called(this, "_ZN7S1854C23v13Ev");}
void  S1854C2 ::v14(){vfunc_called(this, "_ZN7S1854C23v14Ev");}
void  S1854C2 ::v15(){vfunc_called(this, "_ZN7S1854C23v15Ev");}
void  S1854C2 ::v16(){vfunc_called(this, "_ZN7S1854C23v16Ev");}
void  S1854C2 ::v17(){vfunc_called(this, "_ZN7S1854C23v17Ev");}
void  S1854C2 ::v18(){vfunc_called(this, "_ZN7S1854C23v18Ev");}
void  S1854C2 ::v19(){vfunc_called(this, "_ZN7S1854C23v19Ev");}
void  S1854C2 ::v20(){vfunc_called(this, "_ZN7S1854C23v20Ev");}
void  S1854C2 ::v21(){vfunc_called(this, "_ZN7S1854C23v21Ev");}
S1854C2 ::S1854C2(){ note_ctor("S1854C2", this);} // tgen

static void Test_S1854C2()
{
  extern Class_Descriptor cd_S1854C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S1854C2, buf);
    S1854C2 *dp, &lv = *(dp=new (buf) S1854C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S1854C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1854C2)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1854C3*), 0, "S1854C2");
    check_base_class_offset(lv, (S1854C3*), 0, "S1854C2");
    check_field_offset(lv, s1854c2f0, ABISELECT(24,12), "S1854C2.s1854c2f0");
    check_field_offset(lv, s1854c2f1, ABISELECT(32,20), "S1854C2.s1854c2f1");
    check_field_offset(lv, s1854c2f2, ABISELECT(48,28), "S1854C2.s1854c2f2");
    check_field_offset(lv, s1854c2f3, ABISELECT(64,36), "S1854C2.s1854c2f3");
    check_field_offset(lv, s1854c2f4, ABISELECT(72,40), "S1854C2.s1854c2f4");
    check_field_offset(lv, s1854c2f5, ABISELECT(80,44), "S1854C2.s1854c2f5");
    check_field_offset(lv, s1854c2f6, ABISELECT(84,48), "S1854C2.s1854c2f6");
    test_class_info(&lv, &cd_S1854C2);
    dp->~S1854C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1854C2(Test_S1854C2, "S1854C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S1854C2C1Ev();
extern void _ZN7S1854C2D1Ev();
Name_Map name_map_S1854C2[] = {
  NSPAIR(_ZN7S1854C2C1Ev),
  NSPAIR(_ZN7S1854C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1854C3;
extern VTBL_ENTRY _ZTI7S1854C3[];
extern  VTBL_ENTRY _ZTV7S1854C3[];
static Base_Class bases_S1854C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1854C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1854C2[];
extern void _ZN7S1854C2D1Ev();
extern void _ZN7S1854C2D0Ev();
extern void _ZN7S1854C32v5Ev();
extern void _ZN7S1854C32v6Ev();
extern void _ZN7S1854C32v7Ev();
extern void _ZN7S1854C32v8Ev();
extern void _ZN7S1854C32v9Ev();
extern void _ZN7S1854C33v10Ev();
extern void _ZN7S1854C33v11Ev();
extern void _ZN7S1854C23v12Ev();
extern void _ZN7S1854C23v13Ev();
extern void _ZN7S1854C23v14Ev();
extern void _ZN7S1854C23v15Ev();
extern void _ZN7S1854C23v16Ev();
extern void _ZN7S1854C23v17Ev();
extern void _ZN7S1854C23v18Ev();
extern void _ZN7S1854C23v19Ev();
extern void _ZN7S1854C23v20Ev();
extern void _ZN7S1854C23v21Ev();
static  VTBL_ENTRY vtc_S1854C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1854C2[0]),
  (VTBL_ENTRY)&_ZN7S1854C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1854C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1854C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1854C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1854C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1854C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1854C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1854C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1854C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v21Ev,
};
extern VTBL_ENTRY _ZTI7S1854C2[];
extern  VTBL_ENTRY _ZTV7S1854C2[];
Class_Descriptor cd_S1854C2 = {  "S1854C2", // class name
  bases_S1854C2, 2,
  &(vtc_S1854C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S1854C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1854C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1854C1  : S1854C2 {
  char s1854c1f0[2];
  int s1854c1f1;
  virtual  ~S1854C1(); // _ZN7S1854C1D1Ev
  virtual void  v1(); // _ZN7S1854C12v1Ev
  virtual void  v2(); // _ZN7S1854C12v2Ev
  virtual void  v3(); // _ZN7S1854C12v3Ev
  virtual void  v4(); // _ZN7S1854C12v4Ev
  S1854C1(); // tgen
};
//SIG(1 S1854C1) C1{ BC2{ BC3{ BC4{ vd m} vd v5 v6 v7 v8 v9 v10 v11 Fp[2]} vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fi[2] FC5{ BC6{ vd v23} v22 Fp} FC7{ BC8{ vd v25} v24 Fp} FC9{ m Fp} FC10{ m Fp} Fc FC11{ m Fi}} vd v1 v2 v3 v4 Fc[2] Fi}


 S1854C1 ::~S1854C1(){ note_dtor("S1854C1", this);}
void  S1854C1 ::v1(){vfunc_called(this, "_ZN7S1854C12v1Ev");}
void  S1854C1 ::v2(){vfunc_called(this, "_ZN7S1854C12v2Ev");}
void  S1854C1 ::v3(){vfunc_called(this, "_ZN7S1854C12v3Ev");}
void  S1854C1 ::v4(){vfunc_called(this, "_ZN7S1854C12v4Ev");}
S1854C1 ::S1854C1(){ note_ctor("S1854C1", this);} // tgen

static void Test_S1854C1()
{
  extern Class_Descriptor cd_S1854C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1854C1, buf);
    S1854C1 *dp, &lv = *(dp=new (buf) S1854C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1854C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1854C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1854C3*)(S1854C2*), 0, "S1854C1");
    check_base_class_offset(lv, (S1854C3*)(S1854C2*), 0, "S1854C1");
    check_base_class_offset(lv, (S1854C2*), 0, "S1854C1");
    check_field_offset(lv, s1854c1f0, ABISELECT(88,52), "S1854C1.s1854c1f0");
    check_field_offset(lv, s1854c1f1, ABISELECT(92,56), "S1854C1.s1854c1f1");
    test_class_info(&lv, &cd_S1854C1);
    dp->~S1854C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1854C1(Test_S1854C1, "S1854C1", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1854C1C1Ev();
extern void _ZN7S1854C1D1Ev();
Name_Map name_map_S1854C1[] = {
  NSPAIR(_ZN7S1854C1C1Ev),
  NSPAIR(_ZN7S1854C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1854C3;
extern VTBL_ENTRY _ZTI7S1854C3[];
extern  VTBL_ENTRY _ZTV7S1854C3[];
extern Class_Descriptor cd_S1854C2;
extern VTBL_ENTRY _ZTI7S1854C2[];
extern  VTBL_ENTRY _ZTV7S1854C2[];
static Base_Class bases_S1854C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1854C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1854C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1854C1[];
extern void _ZN7S1854C1D1Ev();
extern void _ZN7S1854C1D0Ev();
extern void _ZN7S1854C32v5Ev();
extern void _ZN7S1854C32v6Ev();
extern void _ZN7S1854C32v7Ev();
extern void _ZN7S1854C32v8Ev();
extern void _ZN7S1854C32v9Ev();
extern void _ZN7S1854C33v10Ev();
extern void _ZN7S1854C33v11Ev();
extern void _ZN7S1854C23v12Ev();
extern void _ZN7S1854C23v13Ev();
extern void _ZN7S1854C23v14Ev();
extern void _ZN7S1854C23v15Ev();
extern void _ZN7S1854C23v16Ev();
extern void _ZN7S1854C23v17Ev();
extern void _ZN7S1854C23v18Ev();
extern void _ZN7S1854C23v19Ev();
extern void _ZN7S1854C23v20Ev();
extern void _ZN7S1854C23v21Ev();
extern void _ZN7S1854C12v1Ev();
extern void _ZN7S1854C12v2Ev();
extern void _ZN7S1854C12v3Ev();
extern void _ZN7S1854C12v4Ev();
static  VTBL_ENTRY vtc_S1854C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1854C1[0]),
  (VTBL_ENTRY)&_ZN7S1854C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1854C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1854C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1854C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1854C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1854C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1854C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1854C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1854C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1854C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1854C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1854C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1854C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1854C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1854C1[];
extern  VTBL_ENTRY _ZTV7S1854C1[];
Class_Descriptor cd_S1854C1 = {  "S1854C1", // class name
  bases_S1854C1, 3,
  &(vtc_S1854C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1854C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1854C1),25, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1852C3  : S1850C4_nt {
  void *s1852c3f0[2];
  virtual  ~S1852C3(); // _ZN7S1852C3D1Ev
  virtual void  v4(); // _ZN7S1852C32v4Ev
  virtual void  v5(); // _ZN7S1852C32v5Ev
  virtual void  v6(); // _ZN7S1852C32v6Ev
  virtual void  v7(); // _ZN7S1852C32v7Ev
  virtual void  v8(); // _ZN7S1852C32v8Ev
  virtual void  v9(); // _ZN7S1852C32v9Ev
  virtual void  v10(); // _ZN7S1852C33v10Ev
  S1852C3(); // tgen
};
//SIG(-1 S1852C3) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S1852C3 ::~S1852C3(){ note_dtor("S1852C3", this);}
void  S1852C3 ::v4(){vfunc_called(this, "_ZN7S1852C32v4Ev");}
void  S1852C3 ::v5(){vfunc_called(this, "_ZN7S1852C32v5Ev");}
void  S1852C3 ::v6(){vfunc_called(this, "_ZN7S1852C32v6Ev");}
void  S1852C3 ::v7(){vfunc_called(this, "_ZN7S1852C32v7Ev");}
void  S1852C3 ::v8(){vfunc_called(this, "_ZN7S1852C32v8Ev");}
void  S1852C3 ::v9(){vfunc_called(this, "_ZN7S1852C32v9Ev");}
void  S1852C3 ::v10(){vfunc_called(this, "_ZN7S1852C33v10Ev");}
S1852C3 ::S1852C3(){ note_ctor("S1852C3", this);} // tgen

static void Test_S1852C3()
{
  extern Class_Descriptor cd_S1852C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1852C3, buf);
    S1852C3 *dp, &lv = *(dp=new (buf) S1852C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1852C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1852C3)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S1852C3");
    check_field_offset(lv, s1852c3f0, ABISELECT(8,4), "S1852C3.s1852c3f0");
    test_class_info(&lv, &cd_S1852C3);
    dp->~S1852C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1852C3(Test_S1852C3, "S1852C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1852C3C1Ev();
extern void _ZN7S1852C3D1Ev();
Name_Map name_map_S1852C3[] = {
  NSPAIR(_ZN7S1852C3C1Ev),
  NSPAIR(_ZN7S1852C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S1852C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1852C3[];
extern void _ZN7S1852C3D1Ev();
extern void _ZN7S1852C3D0Ev();
extern void _ZN7S1852C32v4Ev();
extern void _ZN7S1852C32v5Ev();
extern void _ZN7S1852C32v6Ev();
extern void _ZN7S1852C32v7Ev();
extern void _ZN7S1852C32v8Ev();
extern void _ZN7S1852C32v9Ev();
extern void _ZN7S1852C33v10Ev();
static  VTBL_ENTRY vtc_S1852C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1852C3[0]),
  (VTBL_ENTRY)&_ZN7S1852C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1852C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1852C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1852C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1852C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1852C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1852C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1852C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1852C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S1852C3[];
extern  VTBL_ENTRY _ZTV7S1852C3[];
Class_Descriptor cd_S1852C3 = {  "S1852C3", // class name
  bases_S1852C3, 1,
  &(vtc_S1852C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1852C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1852C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1852C2  : S1852C3 {
  int s1852c2f0[2];
  ::S1865C7 s1852c2f1;
  ::S1850C5_nt s1852c2f2;
  ::S3593C21_nt s1852c2f3;
  ::S1865C15 s1852c2f4;
  char s1852c2f5;
  ::S16113C2_nt s1852c2f6;
  virtual  ~S1852C2(); // _ZN7S1852C2D1Ev
  virtual void  v11(); // _ZN7S1852C23v11Ev
  virtual void  v12(); // _ZN7S1852C23v12Ev
  virtual void  v13(); // _ZN7S1852C23v13Ev
  virtual void  v14(); // _ZN7S1852C23v14Ev
  virtual void  v15(); // _ZN7S1852C23v15Ev
  virtual void  v16(); // _ZN7S1852C23v16Ev
  virtual void  v17(); // _ZN7S1852C23v17Ev
  virtual void  v18(); // _ZN7S1852C23v18Ev
  virtual void  v19(); // _ZN7S1852C23v19Ev
  virtual void  v20(); // _ZN7S1852C23v20Ev
  S1852C2(); // tgen
};
//SIG(-1 S1852C2) C1{ BC2{ BC3{ vd m} vd v11 v12 v13 v14 v15 v16 v17 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] FC4{ BC5{ vd v19} v18 Fp} FC6{ BC7{ vd v21} v20 Fp} FC8{ m Fp} FC9{ m Fp} Fc FC10{ m Fi}}


 S1852C2 ::~S1852C2(){ note_dtor("S1852C2", this);}
void  S1852C2 ::v11(){vfunc_called(this, "_ZN7S1852C23v11Ev");}
void  S1852C2 ::v12(){vfunc_called(this, "_ZN7S1852C23v12Ev");}
void  S1852C2 ::v13(){vfunc_called(this, "_ZN7S1852C23v13Ev");}
void  S1852C2 ::v14(){vfunc_called(this, "_ZN7S1852C23v14Ev");}
void  S1852C2 ::v15(){vfunc_called(this, "_ZN7S1852C23v15Ev");}
void  S1852C2 ::v16(){vfunc_called(this, "_ZN7S1852C23v16Ev");}
void  S1852C2 ::v17(){vfunc_called(this, "_ZN7S1852C23v17Ev");}
void  S1852C2 ::v18(){vfunc_called(this, "_ZN7S1852C23v18Ev");}
void  S1852C2 ::v19(){vfunc_called(this, "_ZN7S1852C23v19Ev");}
void  S1852C2 ::v20(){vfunc_called(this, "_ZN7S1852C23v20Ev");}
S1852C2 ::S1852C2(){ note_ctor("S1852C2", this);} // tgen

static void Test_S1852C2()
{
  extern Class_Descriptor cd_S1852C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S1852C2, buf);
    S1852C2 *dp, &lv = *(dp=new (buf) S1852C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S1852C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1852C2)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1852C3*), 0, "S1852C2");
    check_base_class_offset(lv, (S1852C3*), 0, "S1852C2");
    check_field_offset(lv, s1852c2f0, ABISELECT(24,12), "S1852C2.s1852c2f0");
    check_field_offset(lv, s1852c2f1, ABISELECT(32,20), "S1852C2.s1852c2f1");
    check_field_offset(lv, s1852c2f2, ABISELECT(48,28), "S1852C2.s1852c2f2");
    check_field_offset(lv, s1852c2f3, ABISELECT(64,36), "S1852C2.s1852c2f3");
    check_field_offset(lv, s1852c2f4, ABISELECT(72,40), "S1852C2.s1852c2f4");
    check_field_offset(lv, s1852c2f5, ABISELECT(80,44), "S1852C2.s1852c2f5");
    check_field_offset(lv, s1852c2f6, ABISELECT(84,48), "S1852C2.s1852c2f6");
    test_class_info(&lv, &cd_S1852C2);
    dp->~S1852C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1852C2(Test_S1852C2, "S1852C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S1852C2C1Ev();
extern void _ZN7S1852C2D1Ev();
Name_Map name_map_S1852C2[] = {
  NSPAIR(_ZN7S1852C2C1Ev),
  NSPAIR(_ZN7S1852C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1852C3;
extern VTBL_ENTRY _ZTI7S1852C3[];
extern  VTBL_ENTRY _ZTV7S1852C3[];
static Base_Class bases_S1852C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1852C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1852C2[];
extern void _ZN7S1852C2D1Ev();
extern void _ZN7S1852C2D0Ev();
extern void _ZN7S1852C32v4Ev();
extern void _ZN7S1852C32v5Ev();
extern void _ZN7S1852C32v6Ev();
extern void _ZN7S1852C32v7Ev();
extern void _ZN7S1852C32v8Ev();
extern void _ZN7S1852C32v9Ev();
extern void _ZN7S1852C33v10Ev();
extern void _ZN7S1852C23v11Ev();
extern void _ZN7S1852C23v12Ev();
extern void _ZN7S1852C23v13Ev();
extern void _ZN7S1852C23v14Ev();
extern void _ZN7S1852C23v15Ev();
extern void _ZN7S1852C23v16Ev();
extern void _ZN7S1852C23v17Ev();
extern void _ZN7S1852C23v18Ev();
extern void _ZN7S1852C23v19Ev();
extern void _ZN7S1852C23v20Ev();
static  VTBL_ENTRY vtc_S1852C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1852C2[0]),
  (VTBL_ENTRY)&_ZN7S1852C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1852C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1852C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1852C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1852C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1852C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1852C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1852C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1852C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S1852C2[];
extern  VTBL_ENTRY _ZTV7S1852C2[];
Class_Descriptor cd_S1852C2 = {  "S1852C2", // class name
  bases_S1852C2, 2,
  &(vtc_S1852C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S1852C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1852C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1852C1  : S1852C2 {
  char s1852c1f0[2];
  int s1852c1f1;
  virtual  ~S1852C1(); // _ZN7S1852C1D1Ev
  virtual void  v1(); // _ZN7S1852C12v1Ev
  virtual void  v2(); // _ZN7S1852C12v2Ev
  virtual void  v3(); // _ZN7S1852C12v3Ev
  S1852C1(); // tgen
};
//SIG(1 S1852C1) C1{ BC2{ BC3{ BC4{ vd m} vd v4 v5 v6 v7 v8 v9 v10 Fp[2]} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi[2] FC5{ BC6{ vd v22} v21 Fp} FC7{ BC8{ vd v24} v23 Fp} FC9{ m Fp} FC10{ m Fp} Fc FC11{ m Fi}} vd v1 v2 v3 Fc[2] Fi}


 S1852C1 ::~S1852C1(){ note_dtor("S1852C1", this);}
void  S1852C1 ::v1(){vfunc_called(this, "_ZN7S1852C12v1Ev");}
void  S1852C1 ::v2(){vfunc_called(this, "_ZN7S1852C12v2Ev");}
void  S1852C1 ::v3(){vfunc_called(this, "_ZN7S1852C12v3Ev");}
S1852C1 ::S1852C1(){ note_ctor("S1852C1", this);} // tgen

static void Test_S1852C1()
{
  extern Class_Descriptor cd_S1852C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1852C1, buf);
    S1852C1 *dp, &lv = *(dp=new (buf) S1852C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1852C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1852C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1852C3*)(S1852C2*), 0, "S1852C1");
    check_base_class_offset(lv, (S1852C3*)(S1852C2*), 0, "S1852C1");
    check_base_class_offset(lv, (S1852C2*), 0, "S1852C1");
    check_field_offset(lv, s1852c1f0, ABISELECT(88,52), "S1852C1.s1852c1f0");
    check_field_offset(lv, s1852c1f1, ABISELECT(92,56), "S1852C1.s1852c1f1");
    test_class_info(&lv, &cd_S1852C1);
    dp->~S1852C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1852C1(Test_S1852C1, "S1852C1", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1852C1C1Ev();
extern void _ZN7S1852C1D1Ev();
Name_Map name_map_S1852C1[] = {
  NSPAIR(_ZN7S1852C1C1Ev),
  NSPAIR(_ZN7S1852C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1852C3;
extern VTBL_ENTRY _ZTI7S1852C3[];
extern  VTBL_ENTRY _ZTV7S1852C3[];
extern Class_Descriptor cd_S1852C2;
extern VTBL_ENTRY _ZTI7S1852C2[];
extern  VTBL_ENTRY _ZTV7S1852C2[];
static Base_Class bases_S1852C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1852C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1852C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1852C1[];
extern void _ZN7S1852C1D1Ev();
extern void _ZN7S1852C1D0Ev();
extern void _ZN7S1852C32v4Ev();
extern void _ZN7S1852C32v5Ev();
extern void _ZN7S1852C32v6Ev();
extern void _ZN7S1852C32v7Ev();
extern void _ZN7S1852C32v8Ev();
extern void _ZN7S1852C32v9Ev();
extern void _ZN7S1852C33v10Ev();
extern void _ZN7S1852C23v11Ev();
extern void _ZN7S1852C23v12Ev();
extern void _ZN7S1852C23v13Ev();
extern void _ZN7S1852C23v14Ev();
extern void _ZN7S1852C23v15Ev();
extern void _ZN7S1852C23v16Ev();
extern void _ZN7S1852C23v17Ev();
extern void _ZN7S1852C23v18Ev();
extern void _ZN7S1852C23v19Ev();
extern void _ZN7S1852C23v20Ev();
extern void _ZN7S1852C12v1Ev();
extern void _ZN7S1852C12v2Ev();
extern void _ZN7S1852C12v3Ev();
static  VTBL_ENTRY vtc_S1852C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1852C1[0]),
  (VTBL_ENTRY)&_ZN7S1852C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1852C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1852C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1852C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1852C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1852C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1852C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1852C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1852C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1852C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1852C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1852C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1852C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1852C1[];
extern  VTBL_ENTRY _ZTV7S1852C1[];
Class_Descriptor cd_S1852C1 = {  "S1852C1", // class name
  bases_S1852C1, 3,
  &(vtc_S1852C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1852C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1852C1),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1859C3  : S1850C4_nt {
  void *s1859c3f0[2];
  virtual  ~S1859C3(); // _ZN7S1859C3D1Ev
  virtual void  v5(); // _ZN7S1859C32v5Ev
  virtual void  v6(); // _ZN7S1859C32v6Ev
  virtual void  v7(); // _ZN7S1859C32v7Ev
  virtual void  v8(); // _ZN7S1859C32v8Ev
  virtual void  v9(); // _ZN7S1859C32v9Ev
  virtual void  v10(); // _ZN7S1859C33v10Ev
  virtual void  v11(); // _ZN7S1859C33v11Ev
  S1859C3(); // tgen
};
//SIG(-1 S1859C3) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S1859C3 ::~S1859C3(){ note_dtor("S1859C3", this);}
void  S1859C3 ::v5(){vfunc_called(this, "_ZN7S1859C32v5Ev");}
void  S1859C3 ::v6(){vfunc_called(this, "_ZN7S1859C32v6Ev");}
void  S1859C3 ::v7(){vfunc_called(this, "_ZN7S1859C32v7Ev");}
void  S1859C3 ::v8(){vfunc_called(this, "_ZN7S1859C32v8Ev");}
void  S1859C3 ::v9(){vfunc_called(this, "_ZN7S1859C32v9Ev");}
void  S1859C3 ::v10(){vfunc_called(this, "_ZN7S1859C33v10Ev");}
void  S1859C3 ::v11(){vfunc_called(this, "_ZN7S1859C33v11Ev");}
S1859C3 ::S1859C3(){ note_ctor("S1859C3", this);} // tgen

static void Test_S1859C3()
{
  extern Class_Descriptor cd_S1859C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1859C3, buf);
    S1859C3 *dp, &lv = *(dp=new (buf) S1859C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1859C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1859C3)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S1859C3");
    check_field_offset(lv, s1859c3f0, ABISELECT(8,4), "S1859C3.s1859c3f0");
    test_class_info(&lv, &cd_S1859C3);
    dp->~S1859C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1859C3(Test_S1859C3, "S1859C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1859C3C1Ev();
extern void _ZN7S1859C3D1Ev();
Name_Map name_map_S1859C3[] = {
  NSPAIR(_ZN7S1859C3C1Ev),
  NSPAIR(_ZN7S1859C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S1859C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1859C3[];
extern void _ZN7S1859C3D1Ev();
extern void _ZN7S1859C3D0Ev();
extern void _ZN7S1859C32v5Ev();
extern void _ZN7S1859C32v6Ev();
extern void _ZN7S1859C32v7Ev();
extern void _ZN7S1859C32v8Ev();
extern void _ZN7S1859C32v9Ev();
extern void _ZN7S1859C33v10Ev();
extern void _ZN7S1859C33v11Ev();
static  VTBL_ENTRY vtc_S1859C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1859C3[0]),
  (VTBL_ENTRY)&_ZN7S1859C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1859C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1859C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1859C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1859C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1859C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1859C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1859C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1859C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S1859C3[];
extern  VTBL_ENTRY _ZTV7S1859C3[];
Class_Descriptor cd_S1859C3 = {  "S1859C3", // class name
  bases_S1859C3, 1,
  &(vtc_S1859C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1859C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1859C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1859C2  : S1859C3 {
  int s1859c2f0[2];
  ::S1865C7 s1859c2f1;
  ::S1850C5_nt s1859c2f2;
  ::S3593C21_nt s1859c2f3;
  ::S1865C15 s1859c2f4;
  char s1859c2f5;
  ::S16113C2_nt s1859c2f6;
  virtual  ~S1859C2(); // _ZN7S1859C2D1Ev
  virtual void  v12(); // _ZN7S1859C23v12Ev
  virtual void  v13(); // _ZN7S1859C23v13Ev
  virtual void  v14(); // _ZN7S1859C23v14Ev
  virtual void  v15(); // _ZN7S1859C23v15Ev
  virtual void  v16(); // _ZN7S1859C23v16Ev
  virtual void  v17(); // _ZN7S1859C23v17Ev
  virtual void  v18(); // _ZN7S1859C23v18Ev
  virtual void  v19(); // _ZN7S1859C23v19Ev
  virtual void  v20(); // _ZN7S1859C23v20Ev
  virtual void  v21(); // _ZN7S1859C23v21Ev
  S1859C2(); // tgen
};
//SIG(-1 S1859C2) C1{ BC2{ BC3{ vd m} vd v11 v12 v13 v14 v15 v16 v17 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] FC4{ BC5{ vd v19} v18 Fp} FC6{ BC7{ vd v21} v20 Fp} FC8{ m Fp} FC9{ m Fp} Fc FC10{ m Fi}}


 S1859C2 ::~S1859C2(){ note_dtor("S1859C2", this);}
void  S1859C2 ::v12(){vfunc_called(this, "_ZN7S1859C23v12Ev");}
void  S1859C2 ::v13(){vfunc_called(this, "_ZN7S1859C23v13Ev");}
void  S1859C2 ::v14(){vfunc_called(this, "_ZN7S1859C23v14Ev");}
void  S1859C2 ::v15(){vfunc_called(this, "_ZN7S1859C23v15Ev");}
void  S1859C2 ::v16(){vfunc_called(this, "_ZN7S1859C23v16Ev");}
void  S1859C2 ::v17(){vfunc_called(this, "_ZN7S1859C23v17Ev");}
void  S1859C2 ::v18(){vfunc_called(this, "_ZN7S1859C23v18Ev");}
void  S1859C2 ::v19(){vfunc_called(this, "_ZN7S1859C23v19Ev");}
void  S1859C2 ::v20(){vfunc_called(this, "_ZN7S1859C23v20Ev");}
void  S1859C2 ::v21(){vfunc_called(this, "_ZN7S1859C23v21Ev");}
S1859C2 ::S1859C2(){ note_ctor("S1859C2", this);} // tgen

static void Test_S1859C2()
{
  extern Class_Descriptor cd_S1859C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S1859C2, buf);
    S1859C2 *dp, &lv = *(dp=new (buf) S1859C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S1859C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1859C2)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1859C3*), 0, "S1859C2");
    check_base_class_offset(lv, (S1859C3*), 0, "S1859C2");
    check_field_offset(lv, s1859c2f0, ABISELECT(24,12), "S1859C2.s1859c2f0");
    check_field_offset(lv, s1859c2f1, ABISELECT(32,20), "S1859C2.s1859c2f1");
    check_field_offset(lv, s1859c2f2, ABISELECT(48,28), "S1859C2.s1859c2f2");
    check_field_offset(lv, s1859c2f3, ABISELECT(64,36), "S1859C2.s1859c2f3");
    check_field_offset(lv, s1859c2f4, ABISELECT(72,40), "S1859C2.s1859c2f4");
    check_field_offset(lv, s1859c2f5, ABISELECT(80,44), "S1859C2.s1859c2f5");
    check_field_offset(lv, s1859c2f6, ABISELECT(84,48), "S1859C2.s1859c2f6");
    test_class_info(&lv, &cd_S1859C2);
    dp->~S1859C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1859C2(Test_S1859C2, "S1859C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S1859C2C1Ev();
extern void _ZN7S1859C2D1Ev();
Name_Map name_map_S1859C2[] = {
  NSPAIR(_ZN7S1859C2C1Ev),
  NSPAIR(_ZN7S1859C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1859C3;
extern VTBL_ENTRY _ZTI7S1859C3[];
extern  VTBL_ENTRY _ZTV7S1859C3[];
static Base_Class bases_S1859C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1859C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1859C2[];
extern void _ZN7S1859C2D1Ev();
extern void _ZN7S1859C2D0Ev();
extern void _ZN7S1859C32v5Ev();
extern void _ZN7S1859C32v6Ev();
extern void _ZN7S1859C32v7Ev();
extern void _ZN7S1859C32v8Ev();
extern void _ZN7S1859C32v9Ev();
extern void _ZN7S1859C33v10Ev();
extern void _ZN7S1859C33v11Ev();
extern void _ZN7S1859C23v12Ev();
extern void _ZN7S1859C23v13Ev();
extern void _ZN7S1859C23v14Ev();
extern void _ZN7S1859C23v15Ev();
extern void _ZN7S1859C23v16Ev();
extern void _ZN7S1859C23v17Ev();
extern void _ZN7S1859C23v18Ev();
extern void _ZN7S1859C23v19Ev();
extern void _ZN7S1859C23v20Ev();
extern void _ZN7S1859C23v21Ev();
static  VTBL_ENTRY vtc_S1859C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1859C2[0]),
  (VTBL_ENTRY)&_ZN7S1859C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1859C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1859C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1859C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1859C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1859C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1859C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1859C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1859C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v21Ev,
};
extern VTBL_ENTRY _ZTI7S1859C2[];
extern  VTBL_ENTRY _ZTV7S1859C2[];
Class_Descriptor cd_S1859C2 = {  "S1859C2", // class name
  bases_S1859C2, 2,
  &(vtc_S1859C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S1859C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1859C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1859C1  : S1859C2 {
  virtual  ~S1859C1(); // _ZN7S1859C1D1Ev
  virtual void  v1(); // _ZN7S1859C12v1Ev
  virtual void  v2(); // _ZN7S1859C12v2Ev
  virtual void  v3(); // _ZN7S1859C12v3Ev
  virtual void  v4(); // _ZN7S1859C12v4Ev
  S1859C1(); // tgen
};
//SIG(1 S1859C1) C1{ BC2{ BC3{ BC4{ vd m} vd v5 v6 v7 v8 v9 v10 v11 Fp[2]} vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fi[2] FC5{ BC6{ vd v23} v22 Fp} FC7{ BC8{ vd v25} v24 Fp} FC9{ m Fp} FC10{ m Fp} Fc FC11{ m Fi}} vd v1 v2 v3 v4}


 S1859C1 ::~S1859C1(){ note_dtor("S1859C1", this);}
void  S1859C1 ::v1(){vfunc_called(this, "_ZN7S1859C12v1Ev");}
void  S1859C1 ::v2(){vfunc_called(this, "_ZN7S1859C12v2Ev");}
void  S1859C1 ::v3(){vfunc_called(this, "_ZN7S1859C12v3Ev");}
void  S1859C1 ::v4(){vfunc_called(this, "_ZN7S1859C12v4Ev");}
S1859C1 ::S1859C1(){ note_ctor("S1859C1", this);} // tgen

static void Test_S1859C1()
{
  extern Class_Descriptor cd_S1859C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S1859C1, buf);
    S1859C1 *dp, &lv = *(dp=new (buf) S1859C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S1859C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1859C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1859C3*)(S1859C2*), 0, "S1859C1");
    check_base_class_offset(lv, (S1859C3*)(S1859C2*), 0, "S1859C1");
    check_base_class_offset(lv, (S1859C2*), 0, "S1859C1");
    test_class_info(&lv, &cd_S1859C1);
    dp->~S1859C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1859C1(Test_S1859C1, "S1859C1", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S1859C1C1Ev();
extern void _ZN7S1859C1D1Ev();
Name_Map name_map_S1859C1[] = {
  NSPAIR(_ZN7S1859C1C1Ev),
  NSPAIR(_ZN7S1859C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1859C3;
extern VTBL_ENTRY _ZTI7S1859C3[];
extern  VTBL_ENTRY _ZTV7S1859C3[];
extern Class_Descriptor cd_S1859C2;
extern VTBL_ENTRY _ZTI7S1859C2[];
extern  VTBL_ENTRY _ZTV7S1859C2[];
static Base_Class bases_S1859C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1859C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1859C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1859C1[];
extern void _ZN7S1859C1D1Ev();
extern void _ZN7S1859C1D0Ev();
extern void _ZN7S1859C32v5Ev();
extern void _ZN7S1859C32v6Ev();
extern void _ZN7S1859C32v7Ev();
extern void _ZN7S1859C32v8Ev();
extern void _ZN7S1859C32v9Ev();
extern void _ZN7S1859C33v10Ev();
extern void _ZN7S1859C33v11Ev();
extern void _ZN7S1859C23v12Ev();
extern void _ZN7S1859C23v13Ev();
extern void _ZN7S1859C23v14Ev();
extern void _ZN7S1859C23v15Ev();
extern void _ZN7S1859C23v16Ev();
extern void _ZN7S1859C23v17Ev();
extern void _ZN7S1859C23v18Ev();
extern void _ZN7S1859C23v19Ev();
extern void _ZN7S1859C23v20Ev();
extern void _ZN7S1859C23v21Ev();
extern void _ZN7S1859C12v1Ev();
extern void _ZN7S1859C12v2Ev();
extern void _ZN7S1859C12v3Ev();
extern void _ZN7S1859C12v4Ev();
static  VTBL_ENTRY vtc_S1859C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1859C1[0]),
  (VTBL_ENTRY)&_ZN7S1859C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1859C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1859C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1859C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1859C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1859C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1859C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1859C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1859C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1859C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1859C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1859C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1859C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1859C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1859C1[];
extern  VTBL_ENTRY _ZTV7S1859C1[];
Class_Descriptor cd_S1859C1 = {  "S1859C1", // class name
  bases_S1859C1, 3,
  &(vtc_S1859C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S1859C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1859C1),25, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19385C3  {
  virtual void  v6(); // _ZN8S19385C32v6Ev
  virtual void  v7(); // _ZN8S19385C32v7Ev
  virtual void  v8(); // _ZN8S19385C32v8Ev
  virtual void  v9(); // _ZN8S19385C32v9Ev
  ~S19385C3(); // tgen
  S19385C3(); // tgen
};
//SIG(-1 S19385C3) C1{ v1 v2 v3 v4}


void  S19385C3 ::v6(){vfunc_called(this, "_ZN8S19385C32v6Ev");}
void  S19385C3 ::v7(){vfunc_called(this, "_ZN8S19385C32v7Ev");}
void  S19385C3 ::v8(){vfunc_called(this, "_ZN8S19385C32v8Ev");}
void  S19385C3 ::v9(){vfunc_called(this, "_ZN8S19385C32v9Ev");}
S19385C3 ::~S19385C3(){ note_dtor("S19385C3", this);} // tgen
S19385C3 ::S19385C3(){ note_ctor("S19385C3", this);} // tgen

static void Test_S19385C3()
{
  extern Class_Descriptor cd_S19385C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19385C3, buf);
    S19385C3 *dp, &lv = *(dp=new (buf) S19385C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19385C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19385C3)");
    test_class_info(&lv, &cd_S19385C3);
    dp->~S19385C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19385C3(Test_S19385C3, "S19385C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19385C3C1Ev();
extern void _ZN8S19385C3D1Ev();
Name_Map name_map_S19385C3[] = {
  NSPAIR(_ZN8S19385C3C1Ev),
  NSPAIR(_ZN8S19385C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19385C3[];
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
static  VTBL_ENTRY vtc_S19385C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19385C3[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
};
extern VTBL_ENTRY _ZTI8S19385C3[];
extern  VTBL_ENTRY _ZTV8S19385C3[];
Class_Descriptor cd_S19385C3 = {  "S19385C3", // class name
  0,0,//no base classes
  &(vtc_S19385C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19385C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19385C3),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19385C4  : S19385C3 {
  char s19385c4f0;
  virtual void  v10(); // _ZN8S19385C43v10Ev
  virtual void  v11(); // _ZN8S19385C43v11Ev
  ~S19385C4(); // tgen
  S19385C4(); // tgen
};
//SIG(-1 S19385C4) C1{ BC2{ v3 v4 v5 v6} v1 v2 Fc}


void  S19385C4 ::v10(){vfunc_called(this, "_ZN8S19385C43v10Ev");}
void  S19385C4 ::v11(){vfunc_called(this, "_ZN8S19385C43v11Ev");}
S19385C4 ::~S19385C4(){ note_dtor("S19385C4", this);} // tgen
S19385C4 ::S19385C4(){ note_ctor("S19385C4", this);} // tgen

static void Test_S19385C4()
{
  extern Class_Descriptor cd_S19385C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19385C4, buf);
    S19385C4 *dp, &lv = *(dp=new (buf) S19385C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19385C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19385C4)");
    check_base_class_offset(lv, (S19385C3*), 0, "S19385C4");
    check_field_offset(lv, s19385c4f0, ABISELECT(8,4), "S19385C4.s19385c4f0");
    test_class_info(&lv, &cd_S19385C4);
    dp->~S19385C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19385C4(Test_S19385C4, "S19385C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19385C4C1Ev();
extern void _ZN8S19385C4D1Ev();
Name_Map name_map_S19385C4[] = {
  NSPAIR(_ZN8S19385C4C1Ev),
  NSPAIR(_ZN8S19385C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19385C3;
extern VTBL_ENTRY _ZTI8S19385C3[];
extern  VTBL_ENTRY _ZTV8S19385C3[];
static Base_Class bases_S19385C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19385C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19385C4[];
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
static  VTBL_ENTRY vtc_S19385C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19385C4[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
};
extern VTBL_ENTRY _ZTI8S19385C4[];
extern  VTBL_ENTRY _ZTV8S19385C4[];
Class_Descriptor cd_S19385C4 = {  "S19385C4", // class name
  bases_S19385C4, 1,
  &(vtc_S19385C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19385C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19385C4),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19385C2  : S19385C3 , virtual S19385C4 {
  int s19385c2f0;
  ::S19385C4 s19385c2f1[4];
  void *s19385c2f2;
  virtual  ~S19385C2(); // _ZN8S19385C2D2Ev
  virtual void  v12(); // _ZN8S19385C23v12Ev
  virtual void  v13(); // _ZN8S19385C23v13Ev
  virtual void  v14(); // _ZN8S19385C23v14Ev
  virtual void  v15(); // _ZN8S19385C23v15Ev
  virtual void  v16(); // _ZN8S19385C23v16Ev
  virtual void  v17(); // _ZN8S19385C23v17Ev
  S19385C2(); // tgen
};
//SIG(-1 S19385C2) C1{ BC2{ v7 v8 v9 v10} VBC3{ BC2 v11 v12 Fc} vd v1 v2 v3 v4 v5 v6 Fi FC3[4] Fp}


 S19385C2 ::~S19385C2(){ note_dtor("S19385C2", this);}
void  S19385C2 ::v12(){vfunc_called(this, "_ZN8S19385C23v12Ev");}
void  S19385C2 ::v13(){vfunc_called(this, "_ZN8S19385C23v13Ev");}
void  S19385C2 ::v14(){vfunc_called(this, "_ZN8S19385C23v14Ev");}
void  S19385C2 ::v15(){vfunc_called(this, "_ZN8S19385C23v15Ev");}
void  S19385C2 ::v16(){vfunc_called(this, "_ZN8S19385C23v16Ev");}
void  S19385C2 ::v17(){vfunc_called(this, "_ZN8S19385C23v17Ev");}
S19385C2 ::S19385C2(){ note_ctor("S19385C2", this);} // tgen

static void Test_S19385C2()
{
  extern Class_Descriptor cd_S19385C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[14];
    init_test(&cd_S19385C2, buf);
    S19385C2 *dp, &lv = *(dp=new (buf) S19385C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,52), "sizeof(S19385C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19385C2)");
    /*is_ambiguous_... S19385C2::S19385C3 */ AMB_check_base_class_offset(lv, (S19385C3*), 0, "S19385C2");
    check_base_class_offset(lv, (S19385C3*)(S19385C4*), ABISELECT(88,44), "S19385C2");
    check_base_class_offset(lv, (S19385C4*), ABISELECT(88,44), "S19385C2");
    check_field_offset(lv, s19385c2f0, ABISELECT(8,4), "S19385C2.s19385c2f0");
    check_field_offset(lv, s19385c2f1, ABISELECT(16,8), "S19385C2.s19385c2f1");
    check_field_offset(lv, s19385c2f2, ABISELECT(80,40), "S19385C2.s19385c2f2");
    test_class_info(&lv, &cd_S19385C2);
    dp->~S19385C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19385C2(Test_S19385C2, "S19385C2", ABISELECT(104,52));

#else // __cplusplus

extern void _ZN8S19385C2C1Ev();
extern void _ZN8S19385C2D2Ev();
Name_Map name_map_S19385C2[] = {
  NSPAIR(_ZN8S19385C2C1Ev),
  NSPAIR(_ZN8S19385C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19385C3;
extern VTBL_ENTRY _ZTI8S19385C3[];
extern  VTBL_ENTRY _ZTV8S19385C3[];
extern Class_Descriptor cd_S19385C3;
extern VTBL_ENTRY _ZTI8S19385C3[];
extern  VTBL_ENTRY _ZTV8S19385C3[];
extern Class_Descriptor cd_S19385C4;
extern VTBL_ENTRY _ZTI8S19385C4[];
extern  VTBL_ENTRY _ZTV8S19385C4[];
static Base_Class bases_S19385C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19385C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19385C3,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19385C4,    ABISELECT(88,44), //bcp->offset
    15, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19385C2[];
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C2D1Ev();
extern void _ZN8S19385C2D0Ev();
extern void _ZN8S19385C23v12Ev();
extern void _ZN8S19385C23v13Ev();
extern void _ZN8S19385C23v14Ev();
extern void _ZN8S19385C23v15Ev();
extern void _ZN8S19385C23v16Ev();
extern void _ZN8S19385C23v17Ev();
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
static  VTBL_ENTRY vtc_S19385C2[] = {
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19385C2[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19385C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S19385C2[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
};
extern VTBL_ENTRY _ZTV8S19385C2[];
static  VTT_ENTRY vtt_S19385C2[] = {
  {&(_ZTV8S19385C2[3]),  3,29},
  {&(_ZTV8S19385C2[23]),  23,29},
};
extern VTBL_ENTRY _ZTI8S19385C2[];
extern  VTBL_ENTRY _ZTV8S19385C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19385C2[];
Class_Descriptor cd_S19385C2 = {  "S19385C2", // class name
  bases_S19385C2, 3,
  &(vtc_S19385C2[0]), // expected_vtbl_contents
  &(vtt_S19385C2[0]), // expected_vtt_contents
  ABISELECT(104,52), // object size
  NSPAIRA(_ZTI8S19385C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19385C2),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19385C2),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19385C6  : virtual S19385C3 , S19385C4 , S19385C2 {
  ::S2489C12_nt s19385c6f0;
  int s19385c6f1;
  short s19385c6f2[3];
  virtual  ~S19385C6(); // _ZN8S19385C6D2Ev
  virtual void  v18(); // _ZN8S19385C63v18Ev
  S19385C6(); // tgen
};
//SIG(-1 S19385C6) C1{ VBC2{ v2 v3 v4 v5} BC3{ BC2 v6 v7 Fc} BC4{ BC2 VBC3 vd v8 v9 v10 v11 v12 v13 Fi FC3[4] Fp} vd v1 FC5{} Fi Fs[3]}


 S19385C6 ::~S19385C6(){ note_dtor("S19385C6", this);}
void  S19385C6 ::v18(){vfunc_called(this, "_ZN8S19385C63v18Ev");}
S19385C6 ::S19385C6(){ note_ctor("S19385C6", this);} // tgen

static void Test_S19385C6()
{
  extern Class_Descriptor cd_S19385C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,21)];
    init_test(&cd_S19385C6, buf);
    S19385C6 *dp, &lv = *(dp=new (buf) S19385C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,80), "sizeof(S19385C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19385C6)");
    /*is_ambiguous_... S19385C6::S19385C3 */ AMB_check_base_class_offset(lv, (S19385C3*), ABISELECT(120,68), "S19385C6");
    /*is_ambiguous_... S19385C6::S19385C4 */ AMB_check_base_class_offset(lv, (S19385C3*)(S19385C4*), 0, "S19385C6");
    /*is_ambiguous_... S19385C6::S19385C4 */ AMB_check_base_class_offset(lv, (S19385C4*), 0, "S19385C6");
    /*is_ambiguous_... S19385C2::S19385C3 */ AMB_check_base_class_offset(lv, (S19385C3*)(S19385C2*), ABISELECT(16,8), "S19385C6");
    /*is_ambiguous_... S19385C6::S19385C4 */ AMB_check_base_class_offset(lv, (S19385C3*)(S19385C4*), ABISELECT(128,72), "S19385C6");
    check_base_class_offset(lv, (S19385C4*)(S19385C2*), ABISELECT(128,72), "S19385C6");
    check_base_class_offset(lv, (S19385C2*), ABISELECT(16,8), "S19385C6");
    check_field_offset(lv, s19385c6f0, ABISELECT(104,52), "S19385C6.s19385c6f0");
    check_field_offset(lv, s19385c6f1, ABISELECT(108,56), "S19385C6.s19385c6f1");
    check_field_offset(lv, s19385c6f2, ABISELECT(112,60), "S19385C6.s19385c6f2");
    test_class_info(&lv, &cd_S19385C6);
    dp->~S19385C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19385C6(Test_S19385C6, "S19385C6", ABISELECT(144,80));

#else // __cplusplus

extern void _ZN8S19385C6C1Ev();
extern void _ZN8S19385C6D2Ev();
Name_Map name_map_S19385C6[] = {
  NSPAIR(_ZN8S19385C6C1Ev),
  NSPAIR(_ZN8S19385C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19385C3;
extern VTBL_ENTRY _ZTI8S19385C3[];
extern  VTBL_ENTRY _ZTV8S19385C3[];
extern Class_Descriptor cd_S19385C3;
extern VTBL_ENTRY _ZTI8S19385C3[];
extern  VTBL_ENTRY _ZTV8S19385C3[];
extern Class_Descriptor cd_S19385C4;
extern VTBL_ENTRY _ZTI8S19385C4[];
extern  VTBL_ENTRY _ZTV8S19385C4[];
extern Class_Descriptor cd_S19385C3;
extern VTBL_ENTRY _ZTI8S19385C3[];
extern  VTBL_ENTRY _ZTV8S19385C3[];
extern Class_Descriptor cd_S19385C3;
extern VTBL_ENTRY _ZTI8S19385C3[];
extern  VTBL_ENTRY _ZTV8S19385C3[];
extern Class_Descriptor cd_S19385C4;
extern VTBL_ENTRY _ZTI8S19385C4[];
extern  VTBL_ENTRY _ZTV8S19385C4[];
extern Class_Descriptor cd_S19385C2;
extern VTBL_ENTRY _ZTI8S19385C2[];
extern  VTBL_ENTRY _ZTV8S19385C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19385C2[];
static Base_Class bases_S19385C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19385C3,    ABISELECT(120,68), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19385C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19385C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19385C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19385C3,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19385C4,    ABISELECT(128,72), //bcp->offset
    38, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19385C2,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19385C6[];
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
extern void _ZN8S19385C6D1Ev();
extern void _ZN8S19385C6D0Ev();
extern void _ZN8S19385C63v18Ev();
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void ABISELECT(_ZThn16_N8S19385C6D1Ev,_ZThn8_N8S19385C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S19385C6D0Ev,_ZThn8_N8S19385C6D0Ev)();
extern void _ZN8S19385C23v12Ev();
extern void _ZN8S19385C23v13Ev();
extern void _ZN8S19385C23v14Ev();
extern void _ZN8S19385C23v15Ev();
extern void _ZN8S19385C23v16Ev();
extern void _ZN8S19385C23v17Ev();
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
static  VTBL_ENTRY vtc_S19385C6[] = {
  ABISELECT(128,72),
  ABISELECT(120,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S19385C6[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19385C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19385C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19385C63v18Ev,
  ABISELECT(112,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19385C6[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19385C6D1Ev,_ZThn8_N8S19385C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19385C6D0Ev,_ZThn8_N8S19385C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19385C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI8S19385C6[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S19385C6[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
};
extern VTBL_ENTRY _ZTV8S19385C6[];
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C2D1Ev();
extern void _ZN8S19385C2D0Ev();
extern void _ZN8S19385C23v12Ev();
extern void _ZN8S19385C23v13Ev();
extern void _ZN8S19385C23v14Ev();
extern void _ZN8S19385C23v15Ev();
extern void _ZN8S19385C23v16Ev();
extern void _ZN8S19385C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C2__8S19385C6[] = {
  ABISELECT(112,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19385C2[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19385C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v17Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C4__8S19385C2__8S19385C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S19385C2[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
};
static  VTT_ENTRY vtt_S19385C6[] = {
  {&(_ZTV8S19385C6[4]),  4,52},
  {&(_tg__ZTV8S19385C2__8S19385C6[3]),  3,15},
  {&(_tg__ZTV8S19385C4__8S19385C2__8S19385C6[8]),  8,14},
  {&(_ZTV8S19385C6[34]),  34,52},
  {&(_ZTV8S19385C6[16]),  16,52},
  {&(_ZTV8S19385C6[46]),  46,52},
};
extern VTBL_ENTRY _ZTI8S19385C6[];
extern  VTBL_ENTRY _ZTV8S19385C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19385C6[];
Class_Descriptor cd_S19385C6 = {  "S19385C6", // class name
  bases_S19385C6, 7,
  &(vtc_S19385C6[0]), // expected_vtbl_contents
  &(vtt_S19385C6[0]), // expected_vtt_contents
  ABISELECT(144,80), // object size
  NSPAIRA(_ZTI8S19385C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19385C6),52, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19385C6),6, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19385C5  : virtual S19385C3 , S19385C2 , virtual S19385C6 {
  int s19385c5f0;
  virtual  ~S19385C5(); // _ZN8S19385C5D2Ev
  virtual void  v19(); // _ZN8S19385C53v19Ev
  virtual void  v20(); // _ZN8S19385C53v20Ev
  virtual void  v21(); // _ZN8S19385C53v21Ev
  virtual void  v22(); // _ZN8S19385C53v22Ev
  virtual void  v23(); // _ZN8S19385C53v23Ev
  virtual void  v24(); // _ZN8S19385C53v24Ev
  virtual void  v25(); // _ZN8S19385C53v25Ev
  S19385C5(); // tgen
};
//SIG(-1 S19385C5) C1{ VBC2{ v8 v9 v10 v11} BC3{ BC2 VBC4{ BC2 v12 v13 Fc} vd v14 v15 v16 v17 v18 v19 Fi FC4[4] Fp} VBC5{ VBC2 BC4 BC3 vd v20 FC6{} Fi Fs[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi}


 S19385C5 ::~S19385C5(){ note_dtor("S19385C5", this);}
void  S19385C5 ::v19(){vfunc_called(this, "_ZN8S19385C53v19Ev");}
void  S19385C5 ::v20(){vfunc_called(this, "_ZN8S19385C53v20Ev");}
void  S19385C5 ::v21(){vfunc_called(this, "_ZN8S19385C53v21Ev");}
void  S19385C5 ::v22(){vfunc_called(this, "_ZN8S19385C53v22Ev");}
void  S19385C5 ::v23(){vfunc_called(this, "_ZN8S19385C53v23Ev");}
void  S19385C5 ::v24(){vfunc_called(this, "_ZN8S19385C53v24Ev");}
void  S19385C5 ::v25(){vfunc_called(this, "_ZN8S19385C53v25Ev");}
S19385C5 ::S19385C5(){ note_ctor("S19385C5", this);} // tgen

static void Test_S19385C5()
{
  extern Class_Descriptor cd_S19385C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,33)];
    init_test(&cd_S19385C5, buf);
    S19385C5 *dp, &lv = *(dp=new (buf) S19385C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,128), "sizeof(S19385C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19385C5)");
    /*is_ambiguous_... S19385C5::S19385C3 */ AMB_check_base_class_offset(lv, (S19385C3*), ABISELECT(96,48), "S19385C5");
    /*is_ambiguous_... S19385C6::S19385C3 */ AMB_check_base_class_offset(lv, (S19385C3*)(S19385C6*), ABISELECT(96,48), "S19385C5");
    /*is_ambiguous_... S19385C5::S19385C2 */ AMB_check_base_class_offset(lv, (S19385C3*)(S19385C2*), 0, "S19385C5");
    /*is_ambiguous_... S19385C5::S19385C4 */ AMB_check_base_class_offset(lv, (S19385C3*)(S19385C4*), ABISELECT(104,52), "S19385C5");
    /*is_ambiguous_... S19385C5::S19385C2 */ AMB_check_base_class_offset(lv, (S19385C4*)(S19385C2*), ABISELECT(104,52), "S19385C5");
    check_base_class_offset(lv, (S19385C4*)(S19385C2*)(S19385C6*), ABISELECT(104,52), "S19385C5");
    /*is_ambiguous_... S19385C5::S19385C2 */ AMB_check_base_class_offset(lv, (S19385C2*), 0, "S19385C5");
    /*is_ambiguous_... S19385C6::S19385C4 */ AMB_check_base_class_offset(lv, (S19385C3*)(S19385C4*)(S19385C6*), ABISELECT(120,60), "S19385C5");
    /*is_ambiguous_... S19385C6::S19385C4 */ AMB_check_base_class_offset(lv, (S19385C4*)(S19385C6*), ABISELECT(120,60), "S19385C5");
    /*is_ambiguous_... S19385C2::S19385C3 */ AMB_check_base_class_offset(lv, (S19385C3*)(S19385C2*)(S19385C6*), ABISELECT(136,68), "S19385C5");
    check_base_class_offset(lv, (S19385C2*)(S19385C6*), ABISELECT(136,68), "S19385C5");
    check_base_class_offset(lv, (S19385C6*), ABISELECT(120,60), "S19385C5");
    check_field_offset(lv, s19385c5f0, ABISELECT(88,44), "S19385C5.s19385c5f0");
    test_class_info(&lv, &cd_S19385C5);
    dp->~S19385C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19385C5(Test_S19385C5, "S19385C5", ABISELECT(240,128));

#else // __cplusplus

extern void _ZN8S19385C5C1Ev();
extern void _ZN8S19385C5D2Ev();
Name_Map name_map_S19385C5[] = {
  NSPAIR(_ZN8S19385C5C1Ev),
  NSPAIR(_ZN8S19385C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19385C3;
extern VTBL_ENTRY _ZTI8S19385C3[];
extern  VTBL_ENTRY _ZTV8S19385C3[];
extern Class_Descriptor cd_S19385C3;
extern VTBL_ENTRY _ZTI8S19385C3[];
extern  VTBL_ENTRY _ZTV8S19385C3[];
extern Class_Descriptor cd_S19385C3;
extern VTBL_ENTRY _ZTI8S19385C3[];
extern  VTBL_ENTRY _ZTV8S19385C3[];
extern Class_Descriptor cd_S19385C4;
extern VTBL_ENTRY _ZTI8S19385C4[];
extern  VTBL_ENTRY _ZTV8S19385C4[];
extern Class_Descriptor cd_S19385C2;
extern VTBL_ENTRY _ZTI8S19385C2[];
extern  VTBL_ENTRY _ZTV8S19385C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19385C2[];
extern Class_Descriptor cd_S19385C3;
extern VTBL_ENTRY _ZTI8S19385C3[];
extern  VTBL_ENTRY _ZTV8S19385C3[];
extern Class_Descriptor cd_S19385C4;
extern VTBL_ENTRY _ZTI8S19385C4[];
extern  VTBL_ENTRY _ZTV8S19385C4[];
extern Class_Descriptor cd_S19385C3;
extern VTBL_ENTRY _ZTI8S19385C3[];
extern  VTBL_ENTRY _ZTV8S19385C3[];
extern Class_Descriptor cd_S19385C2;
extern VTBL_ENTRY _ZTI8S19385C2[];
extern  VTBL_ENTRY _ZTV8S19385C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19385C2[];
extern Class_Descriptor cd_S19385C6;
extern VTBL_ENTRY _ZTI8S19385C6[];
extern  VTBL_ENTRY _ZTV8S19385C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19385C6[];
static Base_Class bases_S19385C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19385C3,    ABISELECT(96,48), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19385C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19385C3,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19385C4,    ABISELECT(104,52), //bcp->offset
    34, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19385C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19385C3,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19385C4,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19385C3,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19385C2,    ABISELECT(136,68), //bcp->offset
    75, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19385C6,    ABISELECT(120,60), //bcp->offset
    48, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19385C5[];
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C5D1Ev();
extern void _ZN8S19385C5D0Ev();
extern void _ZN8S19385C23v12Ev();
extern void _ZN8S19385C23v13Ev();
extern void _ZN8S19385C23v14Ev();
extern void _ZN8S19385C23v15Ev();
extern void _ZN8S19385C23v16Ev();
extern void _ZN8S19385C23v17Ev();
extern void _ZN8S19385C53v19Ev();
extern void _ZN8S19385C53v20Ev();
extern void _ZN8S19385C53v21Ev();
extern void _ZN8S19385C53v22Ev();
extern void _ZN8S19385C53v23Ev();
extern void _ZN8S19385C53v24Ev();
extern void _ZN8S19385C53v25Ev();
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
extern void ABISELECT(_ZTv0_n88_N8S19385C5D1Ev,_ZTv0_n44_N8S19385C5D1Ev)();
extern void ABISELECT(_ZThn120_N8S19385C5D1Ev,_ZThn60_N8S19385C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19385C5D0Ev,_ZTv0_n44_N8S19385C5D0Ev)();
extern void ABISELECT(_ZThn120_N8S19385C5D0Ev,_ZThn60_N8S19385C5D0Ev)() __attribute__((weak));
extern void _ZN8S19385C63v18Ev();
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void ABISELECT(_ZTvn16_n88_N8S19385C5D1Ev,_ZTvn8_n44_N8S19385C5D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N8S19385C5D0Ev,_ZTvn8_n44_N8S19385C5D0Ev)();
extern void _ZN8S19385C23v12Ev();
extern void _ZN8S19385C23v13Ev();
extern void _ZN8S19385C23v14Ev();
extern void _ZN8S19385C23v15Ev();
extern void _ZN8S19385C23v16Ev();
extern void _ZN8S19385C23v17Ev();
static  VTBL_ENTRY vtc_S19385C5[] = {
  ABISELECT(120,60),
  ABISELECT(96,48),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19385C5[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19385C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v17Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v21Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v23Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v24Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v25Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S19385C5[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S19385C5[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(-120,-60),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S19385C5[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19385C5D1Ev,_ZTv0_n44_N8S19385C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19385C5D0Ev,_ZTv0_n44_N8S19385C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19385C63v18Ev,
  ABISELECT(-32,-16),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI8S19385C5[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N8S19385C5D1Ev,_ZTvn8_n44_N8S19385C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N8S19385C5D0Ev,_ZTvn8_n44_N8S19385C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19385C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v17Ev,
};
extern VTBL_ENTRY _ZTV8S19385C5[];
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C2D1Ev();
extern void _ZN8S19385C2D0Ev();
extern void _ZN8S19385C23v12Ev();
extern void _ZN8S19385C23v13Ev();
extern void _ZN8S19385C23v14Ev();
extern void _ZN8S19385C23v15Ev();
extern void _ZN8S19385C23v16Ev();
extern void _ZN8S19385C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C2__8S19385C5[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19385C2[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19385C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v17Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C4__8S19385C2__8S19385C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S19385C2[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
extern void _ZN8S19385C6D1Ev();
extern void _ZN8S19385C6D0Ev();
extern void _ZN8S19385C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C6__8S19385C5[] = {
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19385C6[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19385C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19385C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19385C63v18Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C2D1Ev();
extern void _ZN8S19385C2D0Ev();
extern void _ZN8S19385C23v12Ev();
extern void _ZN8S19385C23v13Ev();
extern void _ZN8S19385C23v14Ev();
extern void _ZN8S19385C23v15Ev();
extern void _ZN8S19385C23v16Ev();
extern void _ZN8S19385C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C28S19385C6__A1__8S19385C5[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19385C2[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19385C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v17Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C4__8S19385C28S19385C6__A1__8S19385C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19385C2[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C3__8S19385C6__8S19385C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S19385C6[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void ABISELECT(_ZThn16_N8S19385C6D1Ev,_ZThn8_N8S19385C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S19385C6D0Ev,_ZThn8_N8S19385C6D0Ev)();
extern void _ZN8S19385C23v12Ev();
extern void _ZN8S19385C23v13Ev();
extern void _ZN8S19385C23v14Ev();
extern void _ZN8S19385C23v15Ev();
extern void _ZN8S19385C23v16Ev();
extern void _ZN8S19385C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C2__8S19385C6__8S19385C5[] = {
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19385C6[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19385C6D1Ev,_ZThn8_N8S19385C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19385C6D0Ev,_ZThn8_N8S19385C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19385C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v17Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C4__A1__8S19385C6__8S19385C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19385C6[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
};
static  VTT_ENTRY vtt_S19385C5[] = {
  {&(_ZTV8S19385C5[5]),  5,90},
  {&(_tg__ZTV8S19385C2__8S19385C5[3]),  3,15},
  {&(_tg__ZTV8S19385C4__8S19385C2__8S19385C5[8]),  8,14},
  {&(_ZTV8S19385C5[30]),  30,90},
  {&(_ZTV8S19385C5[42]),  42,90},
  {&(_ZTV8S19385C5[66]),  66,90},
  {&(_ZTV8S19385C5[78]),  78,90},
  {&(_tg__ZTV8S19385C6__8S19385C5[4]),  4,13},
  {&(_tg__ZTV8S19385C28S19385C6__A1__8S19385C5[3]),  3,15},
  {&(_tg__ZTV8S19385C4__8S19385C28S19385C6__A1__8S19385C5[8]),  8,14},
  {&(_tg__ZTV8S19385C3__8S19385C6__8S19385C5[6]),  6,10},
  {&(_tg__ZTV8S19385C2__8S19385C6__8S19385C5[3]),  3,15},
  {&(_tg__ZTV8S19385C4__A1__8S19385C6__8S19385C5[8]),  8,14},
};
extern VTBL_ENTRY _ZTI8S19385C5[];
extern  VTBL_ENTRY _ZTV8S19385C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19385C5[];
static VTBL_ENTRY alt_thunk_names86[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19385C5D0Ev,_ZTv0_n44_N8S19385C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19385C5D0Ev,_ZThn60_N8S19385C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19385C5D1Ev,_ZTv0_n44_N8S19385C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19385C5D1Ev,_ZThn60_N8S19385C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19385C5 = {  "S19385C5", // class name
  bases_S19385C5, 10,
  &(vtc_S19385C5[0]), // expected_vtbl_contents
  &(vtt_S19385C5[0]), // expected_vtt_contents
  ABISELECT(240,128), // object size
  NSPAIRA(_ZTI8S19385C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19385C5),90, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19385C5),13, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names86,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19385C1  : virtual S19385C2 , virtual S19385C5 {
  int s19385c1f0;
  ::S19385C3 s19385c1f1;
  virtual void  v1(); // _ZN8S19385C12v1Ev
  virtual void  v2(); // _ZN8S19385C12v2Ev
  virtual void  v3(); // _ZN8S19385C12v3Ev
  virtual void  v4(); // _ZN8S19385C12v4Ev
  virtual void  v5(); // _ZN8S19385C12v5Ev
  ~S19385C1(); // tgen
  S19385C1(); // tgen
};
//SIG(1 S19385C1) C1{ VBC2{ BC3{ v6 v7 v8 v9} VBC4{ BC3 v10 v11 Fc} vd v12 v13 v14 v15 v16 v17 Fi FC4[4] Fp} VBC5{ VBC3 BC2 VBC6{ VBC3 BC4 BC2 vd v18 FC7{} Fi Fs[3]} vd v19 v20 v21 v22 v23 v24 v25 Fi} v1 v2 v3 v4 v5 Fi FC3}


void  S19385C1 ::v1(){vfunc_called(this, "_ZN8S19385C12v1Ev");}
void  S19385C1 ::v2(){vfunc_called(this, "_ZN8S19385C12v2Ev");}
void  S19385C1 ::v3(){vfunc_called(this, "_ZN8S19385C12v3Ev");}
void  S19385C1 ::v4(){vfunc_called(this, "_ZN8S19385C12v4Ev");}
void  S19385C1 ::v5(){vfunc_called(this, "_ZN8S19385C12v5Ev");}
S19385C1 ::~S19385C1(){ note_dtor("S19385C1", this);} // tgen
S19385C1 ::S19385C1(){ note_ctor("S19385C1", this);} // tgen

static void Test_S19385C1()
{
  extern Class_Descriptor cd_S19385C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,46)];
    init_test(&cd_S19385C1, buf);
    S19385C1 *dp, &lv = *(dp=new (buf) S19385C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,180), "sizeof(S19385C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19385C1)");
    /*is_ambiguous_... S19385C1::S19385C2 */ AMB_check_base_class_offset(lv, (S19385C3*)(S19385C2*), ABISELECT(24,12), "S19385C1");
    /*is_ambiguous_... S19385C1::S19385C4 */ AMB_check_base_class_offset(lv, (S19385C3*)(S19385C4*), ABISELECT(112,56), "S19385C1");
    /*is_ambiguous_... S19385C1::S19385C2 */ AMB_check_base_class_offset(lv, (S19385C4*)(S19385C2*), ABISELECT(112,56), "S19385C1");
    /*is_ambiguous_... S19385C5::S19385C2 */ AMB_check_base_class_offset(lv, (S19385C4*)(S19385C2*)(S19385C5*), ABISELECT(112,56), "S19385C1");
    check_base_class_offset(lv, (S19385C4*)(S19385C2*)(S19385C6*), ABISELECT(112,56), "S19385C1");
    /*is_ambiguous_... S19385C1::S19385C2 */ AMB_check_base_class_offset(lv, (S19385C2*), ABISELECT(24,12), "S19385C1");
    /*is_ambiguous_... S19385C5::S19385C3 */ AMB_check_base_class_offset(lv, (S19385C3*)(S19385C5*), 0, "S19385C1");
    /*is_ambiguous_... S19385C6::S19385C3 */ AMB_check_base_class_offset(lv, (S19385C3*)(S19385C6*), 0, "S19385C1");
    /*is_ambiguous_... S19385C5::S19385C2 */ AMB_check_base_class_offset(lv, (S19385C3*)(S19385C2*)(S19385C5*), ABISELECT(128,64), "S19385C1");
    /*is_ambiguous_... S19385C5::S19385C2 */ AMB_check_base_class_offset(lv, (S19385C2*)(S19385C5*), ABISELECT(128,64), "S19385C1");
    /*is_ambiguous_... S19385C6::S19385C4 */ AMB_check_base_class_offset(lv, (S19385C3*)(S19385C4*)(S19385C6*), ABISELECT(224,112), "S19385C1");
    /*is_ambiguous_... S19385C6::S19385C4 */ AMB_check_base_class_offset(lv, (S19385C4*)(S19385C6*), ABISELECT(224,112), "S19385C1");
    /*is_ambiguous_... S19385C2::S19385C3 */ AMB_check_base_class_offset(lv, (S19385C3*)(S19385C2*)(S19385C6*), ABISELECT(240,120), "S19385C1");
    check_base_class_offset(lv, (S19385C2*)(S19385C6*), ABISELECT(240,120), "S19385C1");
    check_base_class_offset(lv, (S19385C6*)(S19385C5*), ABISELECT(224,112), "S19385C1");
    check_base_class_offset(lv, (S19385C5*), ABISELECT(128,64), "S19385C1");
    check_field_offset(lv, s19385c1f0, ABISELECT(8,4), "S19385C1.s19385c1f0");
    check_field_offset(lv, s19385c1f1, ABISELECT(16,8), "S19385C1.s19385c1f1");
    test_class_info(&lv, &cd_S19385C1);
    dp->~S19385C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19385C1(Test_S19385C1, "S19385C1", ABISELECT(344,180));

#else // __cplusplus

extern void _ZN8S19385C1C1Ev();
extern void _ZN8S19385C1D1Ev();
Name_Map name_map_S19385C1[] = {
  NSPAIR(_ZN8S19385C1C1Ev),
  NSPAIR(_ZN8S19385C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19385C3;
extern VTBL_ENTRY _ZTI8S19385C3[];
extern  VTBL_ENTRY _ZTV8S19385C3[];
extern Class_Descriptor cd_S19385C3;
extern VTBL_ENTRY _ZTI8S19385C3[];
extern  VTBL_ENTRY _ZTV8S19385C3[];
extern Class_Descriptor cd_S19385C4;
extern VTBL_ENTRY _ZTI8S19385C4[];
extern  VTBL_ENTRY _ZTV8S19385C4[];
extern Class_Descriptor cd_S19385C2;
extern VTBL_ENTRY _ZTI8S19385C2[];
extern  VTBL_ENTRY _ZTV8S19385C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19385C2[];
extern Class_Descriptor cd_S19385C3;
extern VTBL_ENTRY _ZTI8S19385C3[];
extern  VTBL_ENTRY _ZTV8S19385C3[];
extern Class_Descriptor cd_S19385C3;
extern VTBL_ENTRY _ZTI8S19385C3[];
extern  VTBL_ENTRY _ZTV8S19385C3[];
extern Class_Descriptor cd_S19385C2;
extern VTBL_ENTRY _ZTI8S19385C2[];
extern  VTBL_ENTRY _ZTV8S19385C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19385C2[];
extern Class_Descriptor cd_S19385C3;
extern VTBL_ENTRY _ZTI8S19385C3[];
extern  VTBL_ENTRY _ZTV8S19385C3[];
extern Class_Descriptor cd_S19385C4;
extern VTBL_ENTRY _ZTI8S19385C4[];
extern  VTBL_ENTRY _ZTV8S19385C4[];
extern Class_Descriptor cd_S19385C3;
extern VTBL_ENTRY _ZTI8S19385C3[];
extern  VTBL_ENTRY _ZTV8S19385C3[];
extern Class_Descriptor cd_S19385C2;
extern VTBL_ENTRY _ZTI8S19385C2[];
extern  VTBL_ENTRY _ZTV8S19385C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19385C2[];
extern Class_Descriptor cd_S19385C6;
extern VTBL_ENTRY _ZTI8S19385C6[];
extern  VTBL_ENTRY _ZTV8S19385C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19385C6[];
extern Class_Descriptor cd_S19385C5;
extern VTBL_ENTRY _ZTI8S19385C5[];
extern  VTBL_ENTRY _ZTV8S19385C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19385C5[];
static Base_Class bases_S19385C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19385C3,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19385C3,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19385C4,    ABISELECT(112,56), //bcp->offset
    48, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19385C2,    ABISELECT(24,12), //bcp->offset
    22, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19385C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19385C3,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19385C2,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19385C3,    ABISELECT(224,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19385C4,    ABISELECT(224,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19385C3,    ABISELECT(240,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19385C2,    ABISELECT(240,120), //bcp->offset
    131, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19385C6,    ABISELECT(224,112), //bcp->offset
    104, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19385C5,    ABISELECT(128,64), //bcp->offset
    62, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19385C1[];
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C12v1Ev();
extern void _ZN8S19385C12v2Ev();
extern void _ZN8S19385C12v3Ev();
extern void _ZN8S19385C12v4Ev();
extern void _ZN8S19385C12v5Ev();
extern void _ZN8S19385C1D1Ev();
extern void _ZN8S19385C1D0Ev();
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void ABISELECT(_ZTv0_n64_N8S19385C1D1Ev,_ZTv0_n32_N8S19385C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S19385C1D1Ev,_ZThn12_N8S19385C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19385C1D0Ev,_ZTv0_n32_N8S19385C1D0Ev)();
extern void ABISELECT(_ZThn24_N8S19385C1D0Ev,_ZThn12_N8S19385C1D0Ev)() __attribute__((weak));
extern void _ZN8S19385C23v12Ev();
extern void _ZN8S19385C23v13Ev();
extern void _ZN8S19385C23v14Ev();
extern void _ZN8S19385C23v15Ev();
extern void _ZN8S19385C23v16Ev();
extern void _ZN8S19385C23v17Ev();
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void ABISELECT(_ZTv0_n80_N8S19385C1D1Ev,_ZTv0_n40_N8S19385C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S19385C1D1Ev,_ZThn64_N8S19385C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19385C1D0Ev,_ZTv0_n40_N8S19385C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S19385C1D0Ev,_ZThn64_N8S19385C1D0Ev)() __attribute__((weak));
extern void _ZN8S19385C23v12Ev();
extern void _ZN8S19385C23v13Ev();
extern void _ZN8S19385C23v14Ev();
extern void _ZN8S19385C23v15Ev();
extern void _ZN8S19385C23v16Ev();
extern void _ZN8S19385C23v17Ev();
extern void _ZN8S19385C53v19Ev();
extern void _ZN8S19385C53v20Ev();
extern void _ZN8S19385C53v21Ev();
extern void _ZN8S19385C53v22Ev();
extern void _ZN8S19385C53v23Ev();
extern void _ZN8S19385C53v24Ev();
extern void _ZN8S19385C53v25Ev();
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
extern void ABISELECT(_ZTv0_n88_N8S19385C1D1Ev,_ZTv0_n44_N8S19385C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S19385C1D1Ev,_ZThn112_N8S19385C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19385C1D0Ev,_ZTv0_n44_N8S19385C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S19385C1D0Ev,_ZThn112_N8S19385C1D0Ev)() __attribute__((weak));
extern void _ZN8S19385C63v18Ev();
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void ABISELECT(_ZTvn16_n88_N8S19385C1D1Ev,_ZTvn8_n44_N8S19385C1D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N8S19385C1D0Ev,_ZTvn8_n44_N8S19385C1D0Ev)();
extern void _ZN8S19385C23v12Ev();
extern void _ZN8S19385C23v13Ev();
extern void _ZN8S19385C23v14Ev();
extern void _ZN8S19385C23v15Ev();
extern void _ZN8S19385C23v16Ev();
extern void _ZN8S19385C23v17Ev();
static  VTBL_ENTRY vtc_S19385C1[] = {
  ABISELECT(224,112),
  0,
  ABISELECT(128,64),
  ABISELECT(112,56),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19385C1[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19385C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19385C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19385C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19385C12v5Ev,
  (VTBL_ENTRY)&_ZN8S19385C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19385C1D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  ABISELECT(88,44),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19385C1[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19385C1D1Ev,_ZTv0_n32_N8S19385C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19385C1D0Ev,_ZTv0_n32_N8S19385C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19385C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S19385C1[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  0,
  0,
  0,
  0,
  ABISELECT(96,48),
  ABISELECT(-128,-64),
  ABISELECT(-16,-8),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S19385C1[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19385C1D1Ev,_ZTv0_n40_N8S19385C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19385C1D0Ev,_ZTv0_n40_N8S19385C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19385C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v17Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v21Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v23Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v24Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v25Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(-224,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI8S19385C1[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19385C1D1Ev,_ZTv0_n44_N8S19385C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19385C1D0Ev,_ZTv0_n44_N8S19385C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19385C63v18Ev,
  ABISELECT(-128,-64),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19385C1[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N8S19385C1D1Ev,_ZTvn8_n44_N8S19385C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N8S19385C1D0Ev,_ZTvn8_n44_N8S19385C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19385C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v17Ev,
};
extern VTBL_ENTRY _ZTV8S19385C1[];
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C2D1Ev();
extern void _ZN8S19385C2D0Ev();
extern void _ZN8S19385C23v12Ev();
extern void _ZN8S19385C23v13Ev();
extern void _ZN8S19385C23v14Ev();
extern void _ZN8S19385C23v15Ev();
extern void _ZN8S19385C23v16Ev();
extern void _ZN8S19385C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C2__8S19385C1[] = {
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19385C2[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19385C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v17Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C4__8S19385C2__8S19385C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S19385C2[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C5D1Ev();
extern void _ZN8S19385C5D0Ev();
extern void _ZN8S19385C23v12Ev();
extern void _ZN8S19385C23v13Ev();
extern void _ZN8S19385C23v14Ev();
extern void _ZN8S19385C23v15Ev();
extern void _ZN8S19385C23v16Ev();
extern void _ZN8S19385C23v17Ev();
extern void _ZN8S19385C53v19Ev();
extern void _ZN8S19385C53v20Ev();
extern void _ZN8S19385C53v21Ev();
extern void _ZN8S19385C53v22Ev();
extern void _ZN8S19385C53v23Ev();
extern void _ZN8S19385C53v24Ev();
extern void _ZN8S19385C53v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C5__8S19385C1[] = {
  ABISELECT(96,48),
  ABISELECT(-128,-64),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19385C5[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19385C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v17Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v21Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v23Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v24Ev,
  (VTBL_ENTRY)&_ZN8S19385C53v25Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C2D1Ev();
extern void _ZN8S19385C2D0Ev();
extern void _ZN8S19385C23v12Ev();
extern void _ZN8S19385C23v13Ev();
extern void _ZN8S19385C23v14Ev();
extern void _ZN8S19385C23v15Ev();
extern void _ZN8S19385C23v16Ev();
extern void _ZN8S19385C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C28S19385C5__A1__8S19385C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19385C2[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19385C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v17Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C4__8S19385C28S19385C5__A1__8S19385C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19385C2[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C3__8S19385C5__8S19385C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(128,64),
  (VTBL_ENTRY)&(_ZTI8S19385C5[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C4__8S19385C5__8S19385C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19385C5[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
extern void ABISELECT(_ZTv0_n88_N8S19385C5D1Ev,_ZTv0_n44_N8S19385C5D1Ev)();
extern void ABISELECT(_ZThn96_N8S19385C5D1Ev,_ZThn48_N8S19385C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19385C5D0Ev,_ZTv0_n44_N8S19385C5D0Ev)();
extern void ABISELECT(_ZThn96_N8S19385C5D0Ev,_ZThn48_N8S19385C5D0Ev)() __attribute__((weak));
extern void _ZN8S19385C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C6__8S19385C5__8S19385C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(-96,-48),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-224,-112),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S19385C5[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19385C5D1Ev,_ZTv0_n44_N8S19385C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19385C5D0Ev,_ZTv0_n44_N8S19385C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19385C63v18Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void ABISELECT(_ZTvn16_n88_N8S19385C5D1Ev,_ZTvn8_n44_N8S19385C5D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N8S19385C5D0Ev,_ZTvn8_n44_N8S19385C5D0Ev)();
extern void _ZN8S19385C23v12Ev();
extern void _ZN8S19385C23v13Ev();
extern void _ZN8S19385C23v14Ev();
extern void _ZN8S19385C23v15Ev();
extern void _ZN8S19385C23v16Ev();
extern void _ZN8S19385C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C28S19385C6__A1__8S19385C5__8S19385C1[] = {
  ABISELECT(-128,-64),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S19385C5[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N8S19385C5D1Ev,_ZTvn8_n44_N8S19385C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N8S19385C5D0Ev,_ZTvn8_n44_N8S19385C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19385C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v17Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
extern void _ZN8S19385C6D1Ev();
extern void _ZN8S19385C6D0Ev();
extern void _ZN8S19385C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C6__8S19385C1[] = {
  ABISELECT(-112,-56),
  ABISELECT(-224,-112),
  0,
  (VTBL_ENTRY)&(_ZTI8S19385C6[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19385C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19385C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19385C63v18Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C2D1Ev();
extern void _ZN8S19385C2D0Ev();
extern void _ZN8S19385C23v12Ev();
extern void _ZN8S19385C23v13Ev();
extern void _ZN8S19385C23v14Ev();
extern void _ZN8S19385C23v15Ev();
extern void _ZN8S19385C23v16Ev();
extern void _ZN8S19385C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C28S19385C6__A2__8S19385C1[] = {
  ABISELECT(-128,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19385C2[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19385C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v17Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C4__8S19385C28S19385C6__A2__8S19385C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(128,64),
  (VTBL_ENTRY)&(_ZTI8S19385C2[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C3__8S19385C6__8S19385C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI8S19385C6[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void ABISELECT(_ZThn16_N8S19385C6D1Ev,_ZThn8_N8S19385C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S19385C6D0Ev,_ZThn8_N8S19385C6D0Ev)();
extern void _ZN8S19385C23v12Ev();
extern void _ZN8S19385C23v13Ev();
extern void _ZN8S19385C23v14Ev();
extern void _ZN8S19385C23v15Ev();
extern void _ZN8S19385C23v16Ev();
extern void _ZN8S19385C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C2__8S19385C6__8S19385C1[] = {
  ABISELECT(-128,-64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19385C6[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19385C6D1Ev,_ZThn8_N8S19385C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19385C6D0Ev,_ZThn8_N8S19385C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19385C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19385C23v17Ev,
};
extern void _ZN8S19385C32v6Ev();
extern void _ZN8S19385C32v7Ev();
extern void _ZN8S19385C32v8Ev();
extern void _ZN8S19385C32v9Ev();
extern void _ZN8S19385C43v10Ev();
extern void _ZN8S19385C43v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19385C4__A1__8S19385C6__8S19385C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S19385C6[0]),
  (VTBL_ENTRY)&_ZN8S19385C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19385C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19385C43v11Ev,
};
static  VTT_ENTRY vtt_S19385C1[] = {
  {&(_ZTV8S19385C1[11]),  11,146},
  {&(_ZTV8S19385C1[36]),  36,146},
  {&(_ZTV8S19385C1[56]),  56,146},
  {&(_ZTV8S19385C1[85]),  85,146},
  {&(_ZTV8S19385C1[11]),  11,146},
  {&(_ZTV8S19385C1[122]),  122,146},
  {&(_ZTV8S19385C1[134]),  134,146},
  {&(_tg__ZTV8S19385C2__8S19385C1[3]),  3,15},
  {&(_tg__ZTV8S19385C4__8S19385C2__8S19385C1[8]),  8,14},
  {&(_tg__ZTV8S19385C5__8S19385C1[5]),  5,24},
  {&(_tg__ZTV8S19385C28S19385C5__A1__8S19385C1[3]),  3,15},
  {&(_tg__ZTV8S19385C4__8S19385C28S19385C5__A1__8S19385C1[8]),  8,14},
  {&(_tg__ZTV8S19385C3__8S19385C5__8S19385C1[6]),  6,10},
  {&(_tg__ZTV8S19385C4__8S19385C5__8S19385C1[8]),  8,14},
  {&(_tg__ZTV8S19385C6__8S19385C5__8S19385C1[18]),  18,27},
  {&(_tg__ZTV8S19385C28S19385C6__A1__8S19385C5__8S19385C1[3]),  3,15},
  {&(_tg__ZTV8S19385C6__8S19385C1[4]),  4,13},
  {&(_tg__ZTV8S19385C28S19385C6__A2__8S19385C1[3]),  3,15},
  {&(_tg__ZTV8S19385C4__8S19385C28S19385C6__A2__8S19385C1[8]),  8,14},
  {&(_tg__ZTV8S19385C3__8S19385C6__8S19385C1[6]),  6,10},
  {&(_tg__ZTV8S19385C2__8S19385C6__8S19385C1[3]),  3,15},
  {&(_tg__ZTV8S19385C4__A1__8S19385C6__8S19385C1[8]),  8,14},
};
extern VTBL_ENTRY _ZTI8S19385C1[];
extern  VTBL_ENTRY _ZTV8S19385C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19385C1[];
static VTBL_ENTRY alt_thunk_names87[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19385C5D0Ev,_ZTv0_n44_N8S19385C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19385C5D0Ev,_ZThn48_N8S19385C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19385C5D1Ev,_ZTv0_n44_N8S19385C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19385C5D1Ev,_ZThn48_N8S19385C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19385C1D0Ev,_ZTv0_n44_N8S19385C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19385C1D0Ev,_ZThn112_N8S19385C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19385C1D1Ev,_ZTv0_n44_N8S19385C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19385C1D1Ev,_ZThn112_N8S19385C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19385C1D0Ev,_ZTv0_n40_N8S19385C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19385C1D0Ev,_ZThn64_N8S19385C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19385C1D1Ev,_ZTv0_n40_N8S19385C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19385C1D1Ev,_ZThn64_N8S19385C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19385C1D0Ev,_ZTv0_n32_N8S19385C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19385C1D0Ev,_ZThn12_N8S19385C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19385C1D1Ev,_ZTv0_n32_N8S19385C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19385C1D1Ev,_ZThn12_N8S19385C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19385C1 = {  "S19385C1", // class name
  bases_S19385C1, 13,
  &(vtc_S19385C1[0]), // expected_vtbl_contents
  &(vtt_S19385C1[0]), // expected_vtt_contents
  ABISELECT(344,180), // object size
  NSPAIRA(_ZTI8S19385C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19385C1),146, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19385C1),22, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names87,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1853C3  : S1850C4_nt {
  void *s1853c3f0[2];
  virtual  ~S1853C3(); // _ZN7S1853C3D1Ev
  virtual void  v4(); // _ZN7S1853C32v4Ev
  virtual void  v5(); // _ZN7S1853C32v5Ev
  virtual void  v6(); // _ZN7S1853C32v6Ev
  virtual void  v7(); // _ZN7S1853C32v7Ev
  virtual void  v8(); // _ZN7S1853C32v8Ev
  virtual void  v9(); // _ZN7S1853C32v9Ev
  virtual void  v10(); // _ZN7S1853C33v10Ev
  S1853C3(); // tgen
};
//SIG(-1 S1853C3) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S1853C3 ::~S1853C3(){ note_dtor("S1853C3", this);}
void  S1853C3 ::v4(){vfunc_called(this, "_ZN7S1853C32v4Ev");}
void  S1853C3 ::v5(){vfunc_called(this, "_ZN7S1853C32v5Ev");}
void  S1853C3 ::v6(){vfunc_called(this, "_ZN7S1853C32v6Ev");}
void  S1853C3 ::v7(){vfunc_called(this, "_ZN7S1853C32v7Ev");}
void  S1853C3 ::v8(){vfunc_called(this, "_ZN7S1853C32v8Ev");}
void  S1853C3 ::v9(){vfunc_called(this, "_ZN7S1853C32v9Ev");}
void  S1853C3 ::v10(){vfunc_called(this, "_ZN7S1853C33v10Ev");}
S1853C3 ::S1853C3(){ note_ctor("S1853C3", this);} // tgen

static void Test_S1853C3()
{
  extern Class_Descriptor cd_S1853C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1853C3, buf);
    S1853C3 *dp, &lv = *(dp=new (buf) S1853C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1853C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1853C3)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S1853C3");
    check_field_offset(lv, s1853c3f0, ABISELECT(8,4), "S1853C3.s1853c3f0");
    test_class_info(&lv, &cd_S1853C3);
    dp->~S1853C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1853C3(Test_S1853C3, "S1853C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1853C3C1Ev();
extern void _ZN7S1853C3D1Ev();
Name_Map name_map_S1853C3[] = {
  NSPAIR(_ZN7S1853C3C1Ev),
  NSPAIR(_ZN7S1853C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S1853C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1853C3[];
extern void _ZN7S1853C3D1Ev();
extern void _ZN7S1853C3D0Ev();
extern void _ZN7S1853C32v4Ev();
extern void _ZN7S1853C32v5Ev();
extern void _ZN7S1853C32v6Ev();
extern void _ZN7S1853C32v7Ev();
extern void _ZN7S1853C32v8Ev();
extern void _ZN7S1853C32v9Ev();
extern void _ZN7S1853C33v10Ev();
static  VTBL_ENTRY vtc_S1853C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1853C3[0]),
  (VTBL_ENTRY)&_ZN7S1853C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1853C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1853C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1853C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1853C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1853C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1853C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1853C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1853C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S1853C3[];
extern  VTBL_ENTRY _ZTV7S1853C3[];
Class_Descriptor cd_S1853C3 = {  "S1853C3", // class name
  bases_S1853C3, 1,
  &(vtc_S1853C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1853C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1853C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1853C2  : S1853C3 {
  int s1853c2f0[2];
  ::S1865C7 s1853c2f1;
  ::S1850C5_nt s1853c2f2;
  ::S3593C21_nt s1853c2f3;
  ::S1865C15 s1853c2f4;
  char s1853c2f5;
  ::S16113C2_nt s1853c2f6;
  virtual  ~S1853C2(); // _ZN7S1853C2D1Ev
  virtual void  v11(); // _ZN7S1853C23v11Ev
  virtual void  v12(); // _ZN7S1853C23v12Ev
  virtual void  v13(); // _ZN7S1853C23v13Ev
  virtual void  v14(); // _ZN7S1853C23v14Ev
  virtual void  v15(); // _ZN7S1853C23v15Ev
  virtual void  v16(); // _ZN7S1853C23v16Ev
  virtual void  v17(); // _ZN7S1853C23v17Ev
  virtual void  v18(); // _ZN7S1853C23v18Ev
  virtual void  v19(); // _ZN7S1853C23v19Ev
  virtual void  v20(); // _ZN7S1853C23v20Ev
  S1853C2(); // tgen
};
//SIG(-1 S1853C2) C1{ BC2{ BC3{ vd m} vd v11 v12 v13 v14 v15 v16 v17 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] FC4{ BC5{ vd v19} v18 Fp} FC6{ BC7{ vd v21} v20 Fp} FC8{ m Fp} FC9{ m Fp} Fc FC10{ m Fi}}


 S1853C2 ::~S1853C2(){ note_dtor("S1853C2", this);}
void  S1853C2 ::v11(){vfunc_called(this, "_ZN7S1853C23v11Ev");}
void  S1853C2 ::v12(){vfunc_called(this, "_ZN7S1853C23v12Ev");}
void  S1853C2 ::v13(){vfunc_called(this, "_ZN7S1853C23v13Ev");}
void  S1853C2 ::v14(){vfunc_called(this, "_ZN7S1853C23v14Ev");}
void  S1853C2 ::v15(){vfunc_called(this, "_ZN7S1853C23v15Ev");}
void  S1853C2 ::v16(){vfunc_called(this, "_ZN7S1853C23v16Ev");}
void  S1853C2 ::v17(){vfunc_called(this, "_ZN7S1853C23v17Ev");}
void  S1853C2 ::v18(){vfunc_called(this, "_ZN7S1853C23v18Ev");}
void  S1853C2 ::v19(){vfunc_called(this, "_ZN7S1853C23v19Ev");}
void  S1853C2 ::v20(){vfunc_called(this, "_ZN7S1853C23v20Ev");}
S1853C2 ::S1853C2(){ note_ctor("S1853C2", this);} // tgen

static void Test_S1853C2()
{
  extern Class_Descriptor cd_S1853C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S1853C2, buf);
    S1853C2 *dp, &lv = *(dp=new (buf) S1853C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S1853C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1853C2)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1853C3*), 0, "S1853C2");
    check_base_class_offset(lv, (S1853C3*), 0, "S1853C2");
    check_field_offset(lv, s1853c2f0, ABISELECT(24,12), "S1853C2.s1853c2f0");
    check_field_offset(lv, s1853c2f1, ABISELECT(32,20), "S1853C2.s1853c2f1");
    check_field_offset(lv, s1853c2f2, ABISELECT(48,28), "S1853C2.s1853c2f2");
    check_field_offset(lv, s1853c2f3, ABISELECT(64,36), "S1853C2.s1853c2f3");
    check_field_offset(lv, s1853c2f4, ABISELECT(72,40), "S1853C2.s1853c2f4");
    check_field_offset(lv, s1853c2f5, ABISELECT(80,44), "S1853C2.s1853c2f5");
    check_field_offset(lv, s1853c2f6, ABISELECT(84,48), "S1853C2.s1853c2f6");
    test_class_info(&lv, &cd_S1853C2);
    dp->~S1853C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1853C2(Test_S1853C2, "S1853C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S1853C2C1Ev();
extern void _ZN7S1853C2D1Ev();
Name_Map name_map_S1853C2[] = {
  NSPAIR(_ZN7S1853C2C1Ev),
  NSPAIR(_ZN7S1853C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1853C3;
extern VTBL_ENTRY _ZTI7S1853C3[];
extern  VTBL_ENTRY _ZTV7S1853C3[];
static Base_Class bases_S1853C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1853C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1853C2[];
extern void _ZN7S1853C2D1Ev();
extern void _ZN7S1853C2D0Ev();
extern void _ZN7S1853C32v4Ev();
extern void _ZN7S1853C32v5Ev();
extern void _ZN7S1853C32v6Ev();
extern void _ZN7S1853C32v7Ev();
extern void _ZN7S1853C32v8Ev();
extern void _ZN7S1853C32v9Ev();
extern void _ZN7S1853C33v10Ev();
extern void _ZN7S1853C23v11Ev();
extern void _ZN7S1853C23v12Ev();
extern void _ZN7S1853C23v13Ev();
extern void _ZN7S1853C23v14Ev();
extern void _ZN7S1853C23v15Ev();
extern void _ZN7S1853C23v16Ev();
extern void _ZN7S1853C23v17Ev();
extern void _ZN7S1853C23v18Ev();
extern void _ZN7S1853C23v19Ev();
extern void _ZN7S1853C23v20Ev();
static  VTBL_ENTRY vtc_S1853C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1853C2[0]),
  (VTBL_ENTRY)&_ZN7S1853C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1853C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1853C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1853C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1853C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1853C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1853C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1853C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1853C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S1853C2[];
extern  VTBL_ENTRY _ZTV7S1853C2[];
Class_Descriptor cd_S1853C2 = {  "S1853C2", // class name
  bases_S1853C2, 2,
  &(vtc_S1853C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S1853C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1853C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1853C1  : S1853C2 {
  virtual  ~S1853C1(); // _ZN7S1853C1D1Ev
  virtual void  v1(); // _ZN7S1853C12v1Ev
  virtual void  v2(); // _ZN7S1853C12v2Ev
  virtual void  v3(); // _ZN7S1853C12v3Ev
  S1853C1(); // tgen
};
//SIG(1 S1853C1) C1{ BC2{ BC3{ BC4{ vd m} vd v4 v5 v6 v7 v8 v9 v10 Fp[2]} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi[2] FC5{ BC6{ vd v22} v21 Fp} FC7{ BC8{ vd v24} v23 Fp} FC9{ m Fp} FC10{ m Fp} Fc FC11{ m Fi}} vd v1 v2 v3}


 S1853C1 ::~S1853C1(){ note_dtor("S1853C1", this);}
void  S1853C1 ::v1(){vfunc_called(this, "_ZN7S1853C12v1Ev");}
void  S1853C1 ::v2(){vfunc_called(this, "_ZN7S1853C12v2Ev");}
void  S1853C1 ::v3(){vfunc_called(this, "_ZN7S1853C12v3Ev");}
S1853C1 ::S1853C1(){ note_ctor("S1853C1", this);} // tgen

static void Test_S1853C1()
{
  extern Class_Descriptor cd_S1853C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S1853C1, buf);
    S1853C1 *dp, &lv = *(dp=new (buf) S1853C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S1853C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1853C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S1853C3*)(S1853C2*), 0, "S1853C1");
    check_base_class_offset(lv, (S1853C3*)(S1853C2*), 0, "S1853C1");
    check_base_class_offset(lv, (S1853C2*), 0, "S1853C1");
    test_class_info(&lv, &cd_S1853C1);
    dp->~S1853C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1853C1(Test_S1853C1, "S1853C1", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S1853C1C1Ev();
extern void _ZN7S1853C1D1Ev();
Name_Map name_map_S1853C1[] = {
  NSPAIR(_ZN7S1853C1C1Ev),
  NSPAIR(_ZN7S1853C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S1853C3;
extern VTBL_ENTRY _ZTI7S1853C3[];
extern  VTBL_ENTRY _ZTV7S1853C3[];
extern Class_Descriptor cd_S1853C2;
extern VTBL_ENTRY _ZTI7S1853C2[];
extern  VTBL_ENTRY _ZTV7S1853C2[];
static Base_Class bases_S1853C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1853C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1853C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1853C1[];
extern void _ZN7S1853C1D1Ev();
extern void _ZN7S1853C1D0Ev();
extern void _ZN7S1853C32v4Ev();
extern void _ZN7S1853C32v5Ev();
extern void _ZN7S1853C32v6Ev();
extern void _ZN7S1853C32v7Ev();
extern void _ZN7S1853C32v8Ev();
extern void _ZN7S1853C32v9Ev();
extern void _ZN7S1853C33v10Ev();
extern void _ZN7S1853C23v11Ev();
extern void _ZN7S1853C23v12Ev();
extern void _ZN7S1853C23v13Ev();
extern void _ZN7S1853C23v14Ev();
extern void _ZN7S1853C23v15Ev();
extern void _ZN7S1853C23v16Ev();
extern void _ZN7S1853C23v17Ev();
extern void _ZN7S1853C23v18Ev();
extern void _ZN7S1853C23v19Ev();
extern void _ZN7S1853C23v20Ev();
extern void _ZN7S1853C12v1Ev();
extern void _ZN7S1853C12v2Ev();
extern void _ZN7S1853C12v3Ev();
static  VTBL_ENTRY vtc_S1853C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1853C1[0]),
  (VTBL_ENTRY)&_ZN7S1853C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1853C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1853C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1853C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1853C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1853C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1853C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1853C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1853C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1853C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1853C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1853C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1853C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1853C1[];
extern  VTBL_ENTRY _ZTV7S1853C1[];
Class_Descriptor cd_S1853C1 = {  "S1853C1", // class name
  bases_S1853C1, 3,
  &(vtc_S1853C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S1853C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1853C1),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10275C2  {
  int s10275c2f0;
  ::S8511C3_nt s10275c2f1[10];
  int s10275c2f2[2];
  void *s10275c2f3;
  char s10275c2f4[2];
  virtual  ~S10275C2(); // _ZN8S10275C2D1Ev
  virtual void  v9(); // _ZN8S10275C22v9Ev
  virtual void  v10(); // _ZN8S10275C23v10Ev
  virtual void  v11(); // _ZN8S10275C23v11Ev
  virtual void  v12(); // _ZN8S10275C23v12Ev
  virtual void  v13(); // _ZN8S10275C23v13Ev
  virtual void  v14(); // _ZN8S10275C23v14Ev
  virtual void  v15(); // _ZN8S10275C23v15Ev
  virtual void  v16(); // _ZN8S10275C23v16Ev
  virtual void  v17(); // _ZN8S10275C23v17Ev
  virtual void  v18(); // _ZN8S10275C23v18Ev
  S10275C2(); // tgen
};
//SIG(-1 S10275C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi FC2{ m Fp[2]}[10] Fi[2] Fp Fc[2]}


 S10275C2 ::~S10275C2(){ note_dtor("S10275C2", this);}
void  S10275C2 ::v9(){vfunc_called(this, "_ZN8S10275C22v9Ev");}
void  S10275C2 ::v10(){vfunc_called(this, "_ZN8S10275C23v10Ev");}
void  S10275C2 ::v11(){vfunc_called(this, "_ZN8S10275C23v11Ev");}
void  S10275C2 ::v12(){vfunc_called(this, "_ZN8S10275C23v12Ev");}
void  S10275C2 ::v13(){vfunc_called(this, "_ZN8S10275C23v13Ev");}
void  S10275C2 ::v14(){vfunc_called(this, "_ZN8S10275C23v14Ev");}
void  S10275C2 ::v15(){vfunc_called(this, "_ZN8S10275C23v15Ev");}
void  S10275C2 ::v16(){vfunc_called(this, "_ZN8S10275C23v16Ev");}
void  S10275C2 ::v17(){vfunc_called(this, "_ZN8S10275C23v17Ev");}
void  S10275C2 ::v18(){vfunc_called(this, "_ZN8S10275C23v18Ev");}
S10275C2 ::S10275C2(){ note_ctor("S10275C2", this);} // tgen

static void Test_S10275C2()
{
  extern Class_Descriptor cd_S10275C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,27)];
    init_test(&cd_S10275C2, buf);
    S10275C2 *dp, &lv = *(dp=new (buf) S10275C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,104), "sizeof(S10275C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10275C2)");
    check_field_offset(lv, s10275c2f0, ABISELECT(8,4), "S10275C2.s10275c2f0");
    check_field_offset(lv, s10275c2f1, ABISELECT(16,8), "S10275C2.s10275c2f1");
    check_field_offset(lv, s10275c2f2, ABISELECT(176,88), "S10275C2.s10275c2f2");
    check_field_offset(lv, s10275c2f3, ABISELECT(184,96), "S10275C2.s10275c2f3");
    check_field_offset(lv, s10275c2f4, ABISELECT(192,100), "S10275C2.s10275c2f4");
    test_class_info(&lv, &cd_S10275C2);
    dp->~S10275C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10275C2(Test_S10275C2, "S10275C2", ABISELECT(200,104));

#else // __cplusplus

extern void _ZN8S10275C2C1Ev();
extern void _ZN8S10275C2D1Ev();
Name_Map name_map_S10275C2[] = {
  NSPAIR(_ZN8S10275C2C1Ev),
  NSPAIR(_ZN8S10275C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10275C2[];
extern void _ZN8S10275C2D1Ev();
extern void _ZN8S10275C2D0Ev();
extern void _ZN8S10275C22v9Ev();
extern void _ZN8S10275C23v10Ev();
extern void _ZN8S10275C23v11Ev();
extern void _ZN8S10275C23v12Ev();
extern void _ZN8S10275C23v13Ev();
extern void _ZN8S10275C23v14Ev();
extern void _ZN8S10275C23v15Ev();
extern void _ZN8S10275C23v16Ev();
extern void _ZN8S10275C23v17Ev();
extern void _ZN8S10275C23v18Ev();
static  VTBL_ENTRY vtc_S10275C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10275C2[0]),
  (VTBL_ENTRY)&_ZN8S10275C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10275C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10275C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10275C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10275C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10275C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10275C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10275C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10275C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10275C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10275C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10275C23v18Ev,
};
extern VTBL_ENTRY _ZTI8S10275C2[];
extern  VTBL_ENTRY _ZTV8S10275C2[];
Class_Descriptor cd_S10275C2 = {  "S10275C2", // class name
  0,0,//no base classes
  &(vtc_S10275C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,104), // object size
  NSPAIRA(_ZTI8S10275C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10275C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10275C6_nt  {
  void *s10275c6f0[2];
  void  mf10275c6(); // _ZN11S10275C6_nt9mf10275c6Ev
};
//SIG(-1 S10275C6_nt) C1{ m Fp[2]}


void  S10275C6_nt ::mf10275c6(){}

//skip512 S10275C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10275C1  : S10275C2 {
  ::S8511C3_nt s10275c1f0;
  int s10275c1f1;
  ::S16113C5_nt s10275c1f2;
  char s10275c1f3[2];
  void *s10275c1f4;
  ::S10275C6_nt s10275c1f5;
  ::S4206C14_nt s10275c1f6;
  virtual  ~S10275C1(); // _ZN8S10275C1D1Ev
  virtual void  v1(); // _ZN8S10275C12v1Ev
  virtual void  v2(); // _ZN8S10275C12v2Ev
  virtual void  v3(); // _ZN8S10275C12v3Ev
  virtual void  v4(); // _ZN8S10275C12v4Ev
  virtual void  v5(); // _ZN8S10275C12v5Ev
  virtual void  v6(); // _ZN8S10275C12v6Ev
  virtual void  v7(); // _ZN8S10275C12v7Ev
  virtual void  v8(); // _ZN8S10275C12v8Ev
  S10275C1(); // tgen
};
//SIG(1 S10275C1) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fi FC3{ m Fp[2]}[10] Fi[2] Fp Fc[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 FC3 Fi FC4{ m Fp Fi FC5{ m}} Fc[2] Fp FC6{ m Fp[2]} FC7{ m FC8{ m FL[2]}}}


 S10275C1 ::~S10275C1(){ note_dtor("S10275C1", this);}
void  S10275C1 ::v1(){vfunc_called(this, "_ZN8S10275C12v1Ev");}
void  S10275C1 ::v2(){vfunc_called(this, "_ZN8S10275C12v2Ev");}
void  S10275C1 ::v3(){vfunc_called(this, "_ZN8S10275C12v3Ev");}
void  S10275C1 ::v4(){vfunc_called(this, "_ZN8S10275C12v4Ev");}
void  S10275C1 ::v5(){vfunc_called(this, "_ZN8S10275C12v5Ev");}
void  S10275C1 ::v6(){vfunc_called(this, "_ZN8S10275C12v6Ev");}
void  S10275C1 ::v7(){vfunc_called(this, "_ZN8S10275C12v7Ev");}
void  S10275C1 ::v8(){vfunc_called(this, "_ZN8S10275C12v8Ev");}
S10275C1 ::S10275C1(){ note_ctor("S10275C1", this);} // tgen

static void Test_S10275C1()
{
  extern Class_Descriptor cd_S10275C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,41)];
    init_test(&cd_S10275C1, buf);
    S10275C1 *dp, &lv = *(dp=new (buf) S10275C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,160), "sizeof(S10275C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10275C1)");
    check_base_class_offset(lv, (S10275C2*), 0, "S10275C1");
    check_field_offset(lv, s10275c1f0, ABISELECT(200,104), "S10275C1.s10275c1f0");
    check_field_offset(lv, s10275c1f1, ABISELECT(216,112), "S10275C1.s10275c1f1");
    check_field_offset(lv, s10275c1f2, ABISELECT(224,116), "S10275C1.s10275c1f2");
    check_field_offset(lv, s10275c1f3, ABISELECT(240,128), "S10275C1.s10275c1f3");
    check_field_offset(lv, s10275c1f4, ABISELECT(248,132), "S10275C1.s10275c1f4");
    check_field_offset(lv, s10275c1f5, ABISELECT(256,136), "S10275C1.s10275c1f5");
    check_field_offset(lv, s10275c1f6, ABISELECT(272,144), "S10275C1.s10275c1f6");
    test_class_info(&lv, &cd_S10275C1);
    dp->~S10275C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10275C1(Test_S10275C1, "S10275C1", ABISELECT(288,160));

#else // __cplusplus

extern void _ZN8S10275C1C1Ev();
extern void _ZN8S10275C1D1Ev();
Name_Map name_map_S10275C1[] = {
  NSPAIR(_ZN8S10275C1C1Ev),
  NSPAIR(_ZN8S10275C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10275C2;
extern VTBL_ENTRY _ZTI8S10275C2[];
extern  VTBL_ENTRY _ZTV8S10275C2[];
static Base_Class bases_S10275C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10275C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10275C1[];
extern void _ZN8S10275C1D1Ev();
extern void _ZN8S10275C1D0Ev();
extern void _ZN8S10275C22v9Ev();
extern void _ZN8S10275C23v10Ev();
extern void _ZN8S10275C23v11Ev();
extern void _ZN8S10275C23v12Ev();
extern void _ZN8S10275C23v13Ev();
extern void _ZN8S10275C23v14Ev();
extern void _ZN8S10275C23v15Ev();
extern void _ZN8S10275C23v16Ev();
extern void _ZN8S10275C23v17Ev();
extern void _ZN8S10275C23v18Ev();
extern void _ZN8S10275C12v1Ev();
extern void _ZN8S10275C12v2Ev();
extern void _ZN8S10275C12v3Ev();
extern void _ZN8S10275C12v4Ev();
extern void _ZN8S10275C12v5Ev();
extern void _ZN8S10275C12v6Ev();
extern void _ZN8S10275C12v7Ev();
extern void _ZN8S10275C12v8Ev();
static  VTBL_ENTRY vtc_S10275C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10275C1[0]),
  (VTBL_ENTRY)&_ZN8S10275C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10275C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10275C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10275C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10275C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10275C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10275C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10275C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10275C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10275C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10275C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10275C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10275C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10275C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10275C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10275C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10275C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10275C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10275C12v7Ev,
  (VTBL_ENTRY)&_ZN8S10275C12v8Ev,
};
extern VTBL_ENTRY _ZTI8S10275C1[];
extern  VTBL_ENTRY _ZTV8S10275C1[];
Class_Descriptor cd_S10275C1 = {  "S10275C1", // class name
  bases_S10275C1, 1,
  &(vtc_S10275C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,160), // object size
  NSPAIRA(_ZTI8S10275C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10275C1),22, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3591C2  : S8511C5_nt {
  void *s3591c2f0[3];
  int s3591c2f1[2];
  ::S8511C10_nt s3591c2f2;
  int s3591c2f3;
  ::S8511C10_nt s3591c2f4;
  int s3591c2f5;
  virtual  ~S3591C2(); // _ZN7S3591C2D1Ev
  virtual void  v1(); // _ZN7S3591C22v1Ev
  virtual void  v2(); // _ZN7S3591C22v2Ev
  S3591C2(); // tgen
};
//SIG(-1 S3591C2) C1{ BC2{ vd m FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}}} vd v1 v2 Fp[3] Fi[2] FC7{ m FC8{ m FL}} Fi FC7 Fi}


 S3591C2 ::~S3591C2(){ note_dtor("S3591C2", this);}
void  S3591C2 ::v1(){vfunc_called(this, "_ZN7S3591C22v1Ev");}
void  S3591C2 ::v2(){vfunc_called(this, "_ZN7S3591C22v2Ev");}
S3591C2 ::S3591C2(){ note_ctor("S3591C2", this);} // tgen

static void Test_S3591C2()
{
  extern Class_Descriptor cd_S3591C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S3591C2, buf);
    S3591C2 *dp, &lv = *(dp=new (buf) S3591C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S3591C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3591C2)");
    check_base_class_offset(lv, (S8511C5_nt*), 0, "S3591C2");
    check_field_offset(lv, s3591c2f0, ABISELECT(24,16), "S3591C2.s3591c2f0");
    check_field_offset(lv, s3591c2f1, ABISELECT(48,28), "S3591C2.s3591c2f1");
    check_field_offset(lv, s3591c2f2, ABISELECT(56,36), "S3591C2.s3591c2f2");
    check_field_offset(lv, s3591c2f3, ABISELECT(64,44), "S3591C2.s3591c2f3");
    check_field_offset(lv, s3591c2f4, ABISELECT(72,48), "S3591C2.s3591c2f4");
    check_field_offset(lv, s3591c2f5, ABISELECT(80,56), "S3591C2.s3591c2f5");
    test_class_info(&lv, &cd_S3591C2);
    dp->~S3591C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3591C2(Test_S3591C2, "S3591C2", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN7S3591C2C1Ev();
extern void _ZN7S3591C2D1Ev();
Name_Map name_map_S3591C2[] = {
  NSPAIR(_ZN7S3591C2C1Ev),
  NSPAIR(_ZN7S3591C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8511C5_nt;
extern VTBL_ENTRY _ZTI10S8511C5_nt[];
extern  VTBL_ENTRY _ZTV10S8511C5_nt[];
static Base_Class bases_S3591C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8511C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3591C2[];
extern void _ZN7S3591C2D1Ev();
extern void _ZN7S3591C2D0Ev();
extern void _ZN7S3591C22v1Ev();
extern void _ZN7S3591C22v2Ev();
static  VTBL_ENTRY vtc_S3591C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3591C2[0]),
  (VTBL_ENTRY)&_ZN7S3591C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3591C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3591C22v1Ev,
  (VTBL_ENTRY)&_ZN7S3591C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S3591C2[];
extern  VTBL_ENTRY _ZTV7S3591C2[];
Class_Descriptor cd_S3591C2 = {  "S3591C2", // class name
  bases_S3591C2, 1,
  &(vtc_S3591C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI7S3591C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3591C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3591C1  : S3591C2 {
  char s3591c1f0;
  void *s3591c1f1[3];
  ::S3593C21_nt s3591c1f2;
  ::S1865C15 s3591c1f3;
  int s3591c1f4;
  void *s3591c1f5[2];
  ::S16113C5_nt s3591c1f6;
  char s3591c1f7;
  int s3591c1f8;
  char s3591c1f9;
  int s3591c1f10;
  virtual  ~S3591C1(); // _ZN7S3591C1D1Ev
  S3591C1(); // tgen
};
//SIG(1 S3591C1) C1{ BC2{ BC3{ vd m FC4{ BC5{ m Fp Fi FC6{ m} FC7{ m}}}} vd v1 v2 Fp[3] Fi[2] FC8{ m FC9{ m FL}} Fi FC8 Fi} vd Fc Fp[3] FC10{ m Fp} FC11{ m Fp} Fi Fp[2] FC12{ m Fp Fi FC13{ m}} Fc Fi Fc Fi}


 S3591C1 ::~S3591C1(){ note_dtor("S3591C1", this);}
S3591C1 ::S3591C1(){ note_ctor("S3591C1", this);} // tgen

static void Test_S3591C1()
{
  extern Class_Descriptor cd_S3591C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,32)];
    init_test(&cd_S3591C1, buf);
    S3591C1 *dp, &lv = *(dp=new (buf) S3591C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,124), "sizeof(S3591C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3591C1)");
    check_base_class_offset(lv, (S8511C5_nt*)(S3591C2*), 0, "S3591C1");
    check_base_class_offset(lv, (S3591C2*), 0, "S3591C1");
    check_field_offset(lv, s3591c1f0, ABISELECT(84,60), "S3591C1.s3591c1f0");
    check_field_offset(lv, s3591c1f1, ABISELECT(88,64), "S3591C1.s3591c1f1");
    check_field_offset(lv, s3591c1f2, ABISELECT(112,76), "S3591C1.s3591c1f2");
    check_field_offset(lv, s3591c1f3, ABISELECT(120,80), "S3591C1.s3591c1f3");
    check_field_offset(lv, s3591c1f4, ABISELECT(128,84), "S3591C1.s3591c1f4");
    check_field_offset(lv, s3591c1f5, ABISELECT(136,88), "S3591C1.s3591c1f5");
    check_field_offset(lv, s3591c1f6, ABISELECT(152,96), "S3591C1.s3591c1f6");
    check_field_offset(lv, s3591c1f7, ABISELECT(168,108), "S3591C1.s3591c1f7");
    check_field_offset(lv, s3591c1f8, ABISELECT(172,112), "S3591C1.s3591c1f8");
    check_field_offset(lv, s3591c1f9, ABISELECT(176,116), "S3591C1.s3591c1f9");
    check_field_offset(lv, s3591c1f10, ABISELECT(180,120), "S3591C1.s3591c1f10");
    test_class_info(&lv, &cd_S3591C1);
    dp->~S3591C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3591C1(Test_S3591C1, "S3591C1", ABISELECT(184,124));

#else // __cplusplus

extern void _ZN7S3591C1C1Ev();
extern void _ZN7S3591C1D1Ev();
Name_Map name_map_S3591C1[] = {
  NSPAIR(_ZN7S3591C1C1Ev),
  NSPAIR(_ZN7S3591C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8511C5_nt;
extern VTBL_ENTRY _ZTI10S8511C5_nt[];
extern  VTBL_ENTRY _ZTV10S8511C5_nt[];
extern Class_Descriptor cd_S3591C2;
extern VTBL_ENTRY _ZTI7S3591C2[];
extern  VTBL_ENTRY _ZTV7S3591C2[];
static Base_Class bases_S3591C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8511C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3591C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3591C1[];
extern void _ZN7S3591C1D1Ev();
extern void _ZN7S3591C1D0Ev();
extern void _ZN7S3591C22v1Ev();
extern void _ZN7S3591C22v2Ev();
static  VTBL_ENTRY vtc_S3591C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3591C1[0]),
  (VTBL_ENTRY)&_ZN7S3591C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3591C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3591C22v1Ev,
  (VTBL_ENTRY)&_ZN7S3591C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S3591C1[];
extern  VTBL_ENTRY _ZTV7S3591C1[];
Class_Descriptor cd_S3591C1 = {  "S3591C1", // class name
  bases_S3591C1, 2,
  &(vtc_S3591C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,124), // object size
  NSPAIRA(_ZTI7S3591C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3591C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16288C5  {
  void *s16288c5f0;
  char s16288c5f1;
  ::S10275C6_nt s16288c5f2;
  int s16288c5f3[2];
  char s16288c5f4[4];
  int s16288c5f5;
  char s16288c5f6;
  int s16288c5f7;
  void  mf16288c5(); // _ZN8S16288C59mf16288c5Ev
};
//SIG(-1 S16288C5) C1{ m Fp Fc FC2{ m Fp[2]} Fi[2] Fc[4] Fi Fc Fi}


void  S16288C5 ::mf16288c5(){}

static void Test_S16288C5()
{
  {
    init_simple_test("S16288C5");
    S16288C5 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S16288C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16288C5)");
    check_field_offset(lv, s16288c5f0, 0, "S16288C5.s16288c5f0");
    check_field_offset(lv, s16288c5f1, ABISELECT(8,4), "S16288C5.s16288c5f1");
    check_field_offset(lv, s16288c5f2, ABISELECT(16,8), "S16288C5.s16288c5f2");
    check_field_offset(lv, s16288c5f3, ABISELECT(32,16), "S16288C5.s16288c5f3");
    check_field_offset(lv, s16288c5f4, ABISELECT(40,24), "S16288C5.s16288c5f4");
    check_field_offset(lv, s16288c5f5, ABISELECT(44,28), "S16288C5.s16288c5f5");
    check_field_offset(lv, s16288c5f6, ABISELECT(48,32), "S16288C5.s16288c5f6");
    check_field_offset(lv, s16288c5f7, ABISELECT(52,36), "S16288C5.s16288c5f7");
  }
}
static Arrange_To_Call_Me vS16288C5(Test_S16288C5, "S16288C5", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16288C7_nt  {
  char s16288c7f0;
  int s16288c7f1[2];
  void  mf16288c7(); // _ZN11S16288C7_nt9mf16288c7Ev
};
//SIG(-1 S16288C7_nt) C1{ m Fc Fi[2]}


void  S16288C7_nt ::mf16288c7(){}

//skip512 S16288C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16288C4  {
  ::S16288C5 s16288c4f0;
  ::S16113C5_nt s16288c4f1;
  void *s16288c4f2;
  int s16288c4f3;
  ::S16288C7_nt s16288c4f4;
  int s16288c4f5[2];
  char s16288c4f6;
  ::S8511C3_nt s16288c4f7;
  ::S10275C6_nt s16288c4f8;
  char s16288c4f9[2];
  ::S8511C3_nt s16288c4f10;
  void  mf16288c4(); // _ZN8S16288C49mf16288c4Ev
};
//SIG(-1 S16288C4) C1{ m FC2{ m Fp Fc FC3{ m Fp[2]} Fi[2] Fc[4] Fi Fc Fi} FC4{ m Fp Fi FC5{ m}} Fp Fi FC6{ m Fc Fi[2]} Fi[2] Fc FC7{ m Fp[2]} FC3 Fc[2] FC7}


void  S16288C4 ::mf16288c4(){}

static void Test_S16288C4()
{
  {
    init_simple_test("S16288C4");
    S16288C4 lv;
    check2(sizeof(lv), ABISELECT(168,112), "sizeof(S16288C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16288C4)");
    check_field_offset(lv, s16288c4f0, 0, "S16288C4.s16288c4f0");
    check_field_offset(lv, s16288c4f1, ABISELECT(56,40), "S16288C4.s16288c4f1");
    check_field_offset(lv, s16288c4f2, ABISELECT(72,52), "S16288C4.s16288c4f2");
    check_field_offset(lv, s16288c4f3, ABISELECT(80,56), "S16288C4.s16288c4f3");
    check_field_offset(lv, s16288c4f4, ABISELECT(84,60), "S16288C4.s16288c4f4");
    check_field_offset(lv, s16288c4f5, ABISELECT(96,72), "S16288C4.s16288c4f5");
    check_field_offset(lv, s16288c4f6, ABISELECT(104,80), "S16288C4.s16288c4f6");
    check_field_offset(lv, s16288c4f7, ABISELECT(112,84), "S16288C4.s16288c4f7");
    check_field_offset(lv, s16288c4f8, ABISELECT(128,92), "S16288C4.s16288c4f8");
    check_field_offset(lv, s16288c4f9, ABISELECT(144,100), "S16288C4.s16288c4f9");
    check_field_offset(lv, s16288c4f10, ABISELECT(152,104), "S16288C4.s16288c4f10");
  }
}
static Arrange_To_Call_Me vS16288C4(Test_S16288C4, "S16288C4", ABISELECT(168,112));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16288C1  {
  ::S16113C5_nt s16288c1f0;
  void *s16288c1f1;
  char s16288c1f2[3];
  int s16288c1f3;
  void *s16288c1f4[7];
  int s16288c1f5[7];
  ::S16288C4 s16288c1f6;
  void  mf16288c1(); // _ZN8S16288C19mf16288c1Ev
};
//SIG(1 S16288C1) C1{ m FC2{ m Fp Fi FC3{ m}} Fp Fc[3] Fi Fp[7] Fi[7] FC4{ m FC5{ m Fp Fc FC6{ m Fp[2]} Fi[2] Fc[4] Fi Fc Fi} FC2 Fp Fi FC7{ m Fc Fi[2]} Fi[2] Fc FC8{ m Fp[2]} FC6 Fc[2] FC8}}


void  S16288C1 ::mf16288c1(){}

static void Test_S16288C1()
{
  {
    init_simple_test("S16288C1");
    S16288C1 lv;
    check2(sizeof(lv), ABISELECT(288,192), "sizeof(S16288C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16288C1)");
    check_field_offset(lv, s16288c1f0, 0, "S16288C1.s16288c1f0");
    check_field_offset(lv, s16288c1f1, ABISELECT(16,12), "S16288C1.s16288c1f1");
    check_field_offset(lv, s16288c1f2, ABISELECT(24,16), "S16288C1.s16288c1f2");
    check_field_offset(lv, s16288c1f3, ABISELECT(28,20), "S16288C1.s16288c1f3");
    check_field_offset(lv, s16288c1f4, ABISELECT(32,24), "S16288C1.s16288c1f4");
    check_field_offset(lv, s16288c1f5, ABISELECT(88,52), "S16288C1.s16288c1f5");
    check_field_offset(lv, s16288c1f6, ABISELECT(120,80), "S16288C1.s16288c1f6");
  }
}
static Arrange_To_Call_Me vS16288C1(Test_S16288C1, "S16288C1", ABISELECT(288,192));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21730C1  {
  void *s21730c1f0;
  ::S16113C5_nt s21730c1f1;
  ::S3593C21_nt s21730c1f2;
  ::S10275C6_nt s21730c1f3;
  void *s21730c1f4;
  ::S8511C3_nt s21730c1f5;
  int s21730c1f6[5];
  ::S4206C24_nt s21730c1f7;
  ::S4206C36_nt s21730c1f8;
  ::S16113C5_nt s21730c1f9;
  char s21730c1f10[7];
  int s21730c1f11[3];
  ::S16113C5_nt s21730c1f12;
  int s21730c1f13;
  char s21730c1f14[2];
  void  mf21730c1(); // _ZN8S21730C19mf21730c1Ev
  virtual  ~S21730C1(); // _ZN8S21730C1D1Ev
  S21730C1(); // tgen
};
//SIG(1 S21730C1) C1{ vd m Fp FC2{ m Fp Fi FC3{ m}} FC4{ m Fp} FC5{ m Fp[2]} Fp FC6{ m Fp[2]} Fi[5] FC7{ BC8{ m Fp Fi FC9{ m} FC10{ m}}} FC11{ m Fp Fi[2] FC3} FC2 Fc[7] Fi[3] FC2 Fi Fc[2]}


void  S21730C1 ::mf21730c1(){}
 S21730C1 ::~S21730C1(){ note_dtor("S21730C1", this);}
S21730C1 ::S21730C1(){ note_ctor("S21730C1", this);} // tgen

static void Test_S21730C1()
{
  extern Class_Descriptor cd_S21730C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,37)];
    init_test(&cd_S21730C1, buf);
    S21730C1 *dp, &lv = *(dp=new (buf) S21730C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S21730C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21730C1)");
    check_field_offset(lv, s21730c1f0, ABISELECT(8,4), "S21730C1.s21730c1f0");
    check_field_offset(lv, s21730c1f1, ABISELECT(16,8), "S21730C1.s21730c1f1");
    check_field_offset(lv, s21730c1f2, ABISELECT(32,20), "S21730C1.s21730c1f2");
    check_field_offset(lv, s21730c1f3, ABISELECT(40,24), "S21730C1.s21730c1f3");
    check_field_offset(lv, s21730c1f4, ABISELECT(56,32), "S21730C1.s21730c1f4");
    check_field_offset(lv, s21730c1f5, ABISELECT(64,36), "S21730C1.s21730c1f5");
    check_field_offset(lv, s21730c1f6, ABISELECT(80,44), "S21730C1.s21730c1f6");
    check_field_offset(lv, s21730c1f7, ABISELECT(104,64), "S21730C1.s21730c1f7");
    check_field_offset(lv, s21730c1f8, ABISELECT(120,76), "S21730C1.s21730c1f8");
    check_field_offset(lv, s21730c1f9, ABISELECT(144,92), "S21730C1.s21730c1f9");
    check_field_offset(lv, s21730c1f10, ABISELECT(160,104), "S21730C1.s21730c1f10");
    check_field_offset(lv, s21730c1f11, ABISELECT(168,112), "S21730C1.s21730c1f11");
    check_field_offset(lv, s21730c1f12, ABISELECT(184,124), "S21730C1.s21730c1f12");
    check_field_offset(lv, s21730c1f13, ABISELECT(200,136), "S21730C1.s21730c1f13");
    check_field_offset(lv, s21730c1f14, ABISELECT(204,140), "S21730C1.s21730c1f14");
    test_class_info(&lv, &cd_S21730C1);
    dp->~S21730C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21730C1(Test_S21730C1, "S21730C1", ABISELECT(208,144));

#else // __cplusplus

extern void _ZN8S21730C1C1Ev();
extern void _ZN8S21730C1D1Ev();
Name_Map name_map_S21730C1[] = {
  NSPAIR(_ZN8S21730C1C1Ev),
  NSPAIR(_ZN8S21730C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21730C1[];
extern void _ZN8S21730C1D1Ev();
extern void _ZN8S21730C1D0Ev();
static  VTBL_ENTRY vtc_S21730C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21730C1[0]),
  (VTBL_ENTRY)&_ZN8S21730C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21730C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21730C1[];
extern  VTBL_ENTRY _ZTV8S21730C1[];
Class_Descriptor cd_S21730C1 = {  "S21730C1", // class name
  0,0,//no base classes
  &(vtc_S21730C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,144), // object size
  NSPAIRA(_ZTI8S21730C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21730C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5425C3_nt  {
  virtual  ~S5425C3_nt(); // _ZN10S5425C3_ntD1Ev
  virtual void  v8(); // _ZN10S5425C3_nt2v8Ev
  virtual void  v9(); // _ZN10S5425C3_nt2v9Ev
  S5425C3_nt(); // tgen
};
//SIG(-1 S5425C3_nt) C1{ vd v1 v2}


 S5425C3_nt ::~S5425C3_nt(){ note_dtor("S5425C3_nt", this);}
void  S5425C3_nt ::v8(){vfunc_called(this, "_ZN10S5425C3_nt2v8Ev");}
void  S5425C3_nt ::v9(){vfunc_called(this, "_ZN10S5425C3_nt2v9Ev");}
S5425C3_nt ::S5425C3_nt(){ note_ctor("S5425C3_nt", this);} // tgen

//skip512 S5425C3_nt

#else // __cplusplus

extern void _ZN10S5425C3_ntC1Ev();
extern void _ZN10S5425C3_ntD1Ev();
Name_Map name_map_S5425C3_nt[] = {
  NSPAIR(_ZN10S5425C3_ntC1Ev),
  NSPAIR(_ZN10S5425C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S5425C3_nt[];
extern void _ZN10S5425C3_ntD1Ev();
extern void _ZN10S5425C3_ntD0Ev();
extern void _ZN10S5425C3_nt2v8Ev();
extern void _ZN10S5425C3_nt2v9Ev();
static  VTBL_ENTRY vtc_S5425C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5425C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S5425C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5425C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5425C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5425C3_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI10S5425C3_nt[];
VTBL_ENTRY *P__ZTI10S5425C3_nt = _ZTI10S5425C3_nt; 
extern  VTBL_ENTRY _ZTV10S5425C3_nt[];
Class_Descriptor cd_S5425C3_nt = {  "S5425C3_nt", // class name
  0,0,//no base classes
  &(vtc_S5425C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S5425C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S5425C3_nt),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5425C2_nt  : S5425C3_nt {
  virtual  ~S5425C2_nt(); // _ZN10S5425C2_ntD1Ev
  virtual void  v10(); // _ZN10S5425C2_nt3v10Ev
  virtual void  v11(); // _ZN10S5425C2_nt3v11Ev
  virtual void  v12(); // _ZN10S5425C2_nt3v12Ev
  virtual void  v13(); // _ZN10S5425C2_nt3v13Ev
  virtual void  v14(); // _ZN10S5425C2_nt3v14Ev
  virtual void  v15(); // _ZN10S5425C2_nt3v15Ev
  S5425C2_nt(); // tgen
};
//SIG(-1 S5425C2_nt) C1{ BC2{ vd v7 v8} vd v1 v2 v3 v4 v5 v6}


 S5425C2_nt ::~S5425C2_nt(){ note_dtor("S5425C2_nt", this);}
void  S5425C2_nt ::v10(){vfunc_called(this, "_ZN10S5425C2_nt3v10Ev");}
void  S5425C2_nt ::v11(){vfunc_called(this, "_ZN10S5425C2_nt3v11Ev");}
void  S5425C2_nt ::v12(){vfunc_called(this, "_ZN10S5425C2_nt3v12Ev");}
void  S5425C2_nt ::v13(){vfunc_called(this, "_ZN10S5425C2_nt3v13Ev");}
void  S5425C2_nt ::v14(){vfunc_called(this, "_ZN10S5425C2_nt3v14Ev");}
void  S5425C2_nt ::v15(){vfunc_called(this, "_ZN10S5425C2_nt3v15Ev");}
S5425C2_nt ::S5425C2_nt(){ note_ctor("S5425C2_nt", this);} // tgen

//skip512 S5425C2_nt

#else // __cplusplus

extern void _ZN10S5425C2_ntC1Ev();
extern void _ZN10S5425C2_ntD1Ev();
Name_Map name_map_S5425C2_nt[] = {
  NSPAIR(_ZN10S5425C2_ntC1Ev),
  NSPAIR(_ZN10S5425C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5425C3_nt;
extern VTBL_ENTRY _ZTI10S5425C3_nt[];
extern  VTBL_ENTRY _ZTV10S5425C3_nt[];
static Base_Class bases_S5425C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5425C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S5425C2_nt[];
extern void _ZN10S5425C2_ntD1Ev();
extern void _ZN10S5425C2_ntD0Ev();
extern void _ZN10S5425C3_nt2v8Ev();
extern void _ZN10S5425C3_nt2v9Ev();
extern void _ZN10S5425C2_nt3v10Ev();
extern void _ZN10S5425C2_nt3v11Ev();
extern void _ZN10S5425C2_nt3v12Ev();
extern void _ZN10S5425C2_nt3v13Ev();
extern void _ZN10S5425C2_nt3v14Ev();
extern void _ZN10S5425C2_nt3v15Ev();
static  VTBL_ENTRY vtc_S5425C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5425C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S5425C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5425C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5425C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5425C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5425C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5425C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5425C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5425C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5425C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5425C2_nt3v15Ev,
};
extern VTBL_ENTRY _ZTI10S5425C2_nt[];
VTBL_ENTRY *P__ZTI10S5425C2_nt = _ZTI10S5425C2_nt; 
extern  VTBL_ENTRY _ZTV10S5425C2_nt[];
Class_Descriptor cd_S5425C2_nt = {  "S5425C2_nt", // class name
  bases_S5425C2_nt, 1,
  &(vtc_S5425C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S5425C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S5425C2_nt),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5425C4_nt  {
  void *s5425c4f0[3];
  int s5425c4f1;
  void  mf5425c4(); // _ZN10S5425C4_nt8mf5425c4Ev
};
//SIG(-1 S5425C4_nt) C1{ m Fp[3] Fi}


void  S5425C4_nt ::mf5425c4(){}

//skip512 S5425C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5425C8_nt  {
  void *s5425c8f0;
  int s5425c8f1[2];
  ::S3593C21_nt s5425c8f2;
  void  mf5425c8(); // _ZN10S5425C8_nt8mf5425c8Ev
};
//SIG(-1 S5425C8_nt) C1{ m Fp Fi[2] FC2{ m Fp}}


void  S5425C8_nt ::mf5425c8(){}

//skip512 S5425C8_nt

#else // __cplusplus

Class_Descriptor cd_S5425C8_nt = {  "S5425C8_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5425C7_nt  : S5425C8_nt {
};
//SIG(-1 S5425C7_nt) C1{ BC2{ m Fp Fi[2] FC3{ m Fp}}}



//skip512 S5425C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S5425C8_nt;
static Base_Class bases_S5425C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5425C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5425C1  : S5425C2_nt {
  ::S5425C4_nt s5425c1f0;
  void *s5425c1f1;
  ::S16113C5_nt s5425c1f2;
  char s5425c1f3;
  int s5425c1f4[2];
  ::S5425C7_nt s5425c1f5;
  __tsi64 s5425c1f6[2];
  ::S16113C5_nt s5425c1f7;
  virtual void  v1(); // _ZN7S5425C12v1Ev
  virtual void  v2(); // _ZN7S5425C12v2Ev
  virtual void  v3(); // _ZN7S5425C12v3Ev
  virtual void  v4(); // _ZN7S5425C12v4Ev
  virtual void  v5(); // _ZN7S5425C12v5Ev
  virtual void  v6(); // _ZN7S5425C12v6Ev
  virtual void  v7(); // _ZN7S5425C12v7Ev
  ~S5425C1(); // tgen
  S5425C1(); // tgen
};
//SIG(1 S5425C1) C1{ BC2{ BC3{ vd v8 v9} vd v10 v11 v12 v13 v14 v15} v1 v2 v3 v4 v5 v6 v7 FC4{ m Fp[3] Fi} Fp FC5{ m Fp Fi FC6{ m}} Fc Fi[2] FC7{ BC8{ m Fp Fi[2] FC9{ m Fp}}} FL[2] FC5}


void  S5425C1 ::v1(){vfunc_called(this, "_ZN7S5425C12v1Ev");}
void  S5425C1 ::v2(){vfunc_called(this, "_ZN7S5425C12v2Ev");}
void  S5425C1 ::v3(){vfunc_called(this, "_ZN7S5425C12v3Ev");}
void  S5425C1 ::v4(){vfunc_called(this, "_ZN7S5425C12v4Ev");}
void  S5425C1 ::v5(){vfunc_called(this, "_ZN7S5425C12v5Ev");}
void  S5425C1 ::v6(){vfunc_called(this, "_ZN7S5425C12v6Ev");}
void  S5425C1 ::v7(){vfunc_called(this, "_ZN7S5425C12v7Ev");}
S5425C1 ::~S5425C1(){ note_dtor("S5425C1", this);} // tgen
S5425C1 ::S5425C1(){ note_ctor("S5425C1", this);} // tgen

static void Test_S5425C1()
{
  extern Class_Descriptor cd_S5425C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,24)];
    init_test(&cd_S5425C1, buf);
    S5425C1 *dp, &lv = *(dp=new (buf) S5425C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,92), "sizeof(S5425C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5425C1)");
    check_base_class_offset(lv, (S5425C3_nt*)(S5425C2_nt*), 0, "S5425C1");
    check_base_class_offset(lv, (S5425C2_nt*), 0, "S5425C1");
    check_field_offset(lv, s5425c1f0, ABISELECT(8,4), "S5425C1.s5425c1f0");
    check_field_offset(lv, s5425c1f1, ABISELECT(40,20), "S5425C1.s5425c1f1");
    check_field_offset(lv, s5425c1f2, ABISELECT(48,24), "S5425C1.s5425c1f2");
    check_field_offset(lv, s5425c1f3, ABISELECT(64,36), "S5425C1.s5425c1f3");
    check_field_offset(lv, s5425c1f4, ABISELECT(68,40), "S5425C1.s5425c1f4");
    check_field_offset(lv, s5425c1f5, ABISELECT(80,48), "S5425C1.s5425c1f5");
    check_field_offset(lv, s5425c1f6, ABISELECT(104,64), "S5425C1.s5425c1f6");
    check_field_offset(lv, s5425c1f7, ABISELECT(120,80), "S5425C1.s5425c1f7");
    test_class_info(&lv, &cd_S5425C1);
    dp->~S5425C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5425C1(Test_S5425C1, "S5425C1", ABISELECT(136,92));

#else // __cplusplus

extern void _ZN7S5425C1C1Ev();
extern void _ZN7S5425C1D1Ev();
Name_Map name_map_S5425C1[] = {
  NSPAIR(_ZN7S5425C1C1Ev),
  NSPAIR(_ZN7S5425C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5425C3_nt;
extern VTBL_ENTRY _ZTI10S5425C3_nt[];
extern  VTBL_ENTRY _ZTV10S5425C3_nt[];
extern Class_Descriptor cd_S5425C2_nt;
extern VTBL_ENTRY _ZTI10S5425C2_nt[];
extern  VTBL_ENTRY _ZTV10S5425C2_nt[];
static Base_Class bases_S5425C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5425C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5425C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5425C1[];
extern void _ZN7S5425C1D1Ev();
extern void _ZN7S5425C1D0Ev();
extern void _ZN10S5425C3_nt2v8Ev();
extern void _ZN10S5425C3_nt2v9Ev();
extern void _ZN10S5425C2_nt3v10Ev();
extern void _ZN10S5425C2_nt3v11Ev();
extern void _ZN10S5425C2_nt3v12Ev();
extern void _ZN10S5425C2_nt3v13Ev();
extern void _ZN10S5425C2_nt3v14Ev();
extern void _ZN10S5425C2_nt3v15Ev();
extern void _ZN7S5425C12v1Ev();
extern void _ZN7S5425C12v2Ev();
extern void _ZN7S5425C12v3Ev();
extern void _ZN7S5425C12v4Ev();
extern void _ZN7S5425C12v5Ev();
extern void _ZN7S5425C12v6Ev();
extern void _ZN7S5425C12v7Ev();
static  VTBL_ENTRY vtc_S5425C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5425C1[0]),
  (VTBL_ENTRY)&_ZN7S5425C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5425C1D0Ev,
  (VTBL_ENTRY)&_ZN10S5425C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5425C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5425C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5425C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5425C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5425C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5425C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5425C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN7S5425C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5425C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5425C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5425C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5425C12v5Ev,
  (VTBL_ENTRY)&_ZN7S5425C12v6Ev,
  (VTBL_ENTRY)&_ZN7S5425C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S5425C1[];
extern  VTBL_ENTRY _ZTV7S5425C1[];
Class_Descriptor cd_S5425C1 = {  "S5425C1", // class name
  bases_S5425C1, 2,
  &(vtc_S5425C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,92), // object size
  NSPAIRA(_ZTI7S5425C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5425C1),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7114C2_nt  {
  virtual void  v7(); // _ZN10S7114C2_nt2v7Ev
  virtual void  v8(); // _ZN10S7114C2_nt2v8Ev
  virtual void  v9(); // _ZN10S7114C2_nt2v9Ev
  ~S7114C2_nt(); // tgen
  S7114C2_nt(); // tgen
};
//SIG(-1 S7114C2_nt) C1{ v1 v2 v3}


void  S7114C2_nt ::v7(){vfunc_called(this, "_ZN10S7114C2_nt2v7Ev");}
void  S7114C2_nt ::v8(){vfunc_called(this, "_ZN10S7114C2_nt2v8Ev");}
void  S7114C2_nt ::v9(){vfunc_called(this, "_ZN10S7114C2_nt2v9Ev");}
S7114C2_nt ::~S7114C2_nt(){ note_dtor("S7114C2_nt", this);} // tgen
S7114C2_nt ::S7114C2_nt(){ note_ctor("S7114C2_nt", this);} // tgen

//skip512 S7114C2_nt

#else // __cplusplus

extern void _ZN10S7114C2_ntC1Ev();
extern void _ZN10S7114C2_ntD1Ev();
Name_Map name_map_S7114C2_nt[] = {
  NSPAIR(_ZN10S7114C2_ntC1Ev),
  NSPAIR(_ZN10S7114C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7114C2_nt[];
extern void _ZN10S7114C2_nt2v7Ev();
extern void _ZN10S7114C2_nt2v8Ev();
extern void _ZN10S7114C2_nt2v9Ev();
static  VTBL_ENTRY vtc_S7114C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7114C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI10S7114C2_nt[];
VTBL_ENTRY *P__ZTI10S7114C2_nt = _ZTI10S7114C2_nt; 
extern  VTBL_ENTRY _ZTV10S7114C2_nt[];
Class_Descriptor cd_S7114C2_nt = {  "S7114C2_nt", // class name
  0,0,//no base classes
  &(vtc_S7114C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7114C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7114C2_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7114C4_nt  {
  virtual void  v10(); // _ZN10S7114C4_nt3v10Ev
  virtual void  v11(); // _ZN10S7114C4_nt3v11Ev
  virtual void  v12(); // _ZN10S7114C4_nt3v12Ev
  virtual void  v13(); // _ZN10S7114C4_nt3v13Ev
  virtual void  v14(); // _ZN10S7114C4_nt3v14Ev
  virtual void  v15(); // _ZN10S7114C4_nt3v15Ev
  ~S7114C4_nt(); // tgen
  S7114C4_nt(); // tgen
};
//SIG(-1 S7114C4_nt) C1{ v1 v2 v3 v4 v5 v6}


void  S7114C4_nt ::v10(){vfunc_called(this, "_ZN10S7114C4_nt3v10Ev");}
void  S7114C4_nt ::v11(){vfunc_called(this, "_ZN10S7114C4_nt3v11Ev");}
void  S7114C4_nt ::v12(){vfunc_called(this, "_ZN10S7114C4_nt3v12Ev");}
void  S7114C4_nt ::v13(){vfunc_called(this, "_ZN10S7114C4_nt3v13Ev");}
void  S7114C4_nt ::v14(){vfunc_called(this, "_ZN10S7114C4_nt3v14Ev");}
void  S7114C4_nt ::v15(){vfunc_called(this, "_ZN10S7114C4_nt3v15Ev");}
S7114C4_nt ::~S7114C4_nt(){ note_dtor("S7114C4_nt", this);} // tgen
S7114C4_nt ::S7114C4_nt(){ note_ctor("S7114C4_nt", this);} // tgen

//skip512 S7114C4_nt

#else // __cplusplus

extern void _ZN10S7114C4_ntC1Ev();
extern void _ZN10S7114C4_ntD1Ev();
Name_Map name_map_S7114C4_nt[] = {
  NSPAIR(_ZN10S7114C4_ntC1Ev),
  NSPAIR(_ZN10S7114C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7114C4_nt[];
extern void _ZN10S7114C4_nt3v10Ev();
extern void _ZN10S7114C4_nt3v11Ev();
extern void _ZN10S7114C4_nt3v12Ev();
extern void _ZN10S7114C4_nt3v13Ev();
extern void _ZN10S7114C4_nt3v14Ev();
extern void _ZN10S7114C4_nt3v15Ev();
static  VTBL_ENTRY vtc_S7114C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7114C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v15Ev,
};
extern VTBL_ENTRY _ZTI10S7114C4_nt[];
VTBL_ENTRY *P__ZTI10S7114C4_nt = _ZTI10S7114C4_nt; 
extern  VTBL_ENTRY _ZTV10S7114C4_nt[];
Class_Descriptor cd_S7114C4_nt = {  "S7114C4_nt", // class name
  0,0,//no base classes
  &(vtc_S7114C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7114C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7114C4_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7114C5  : S7114C2_nt {
  virtual void  v16(); // _ZN7S7114C53v16Ev
  virtual void  v17(); // _ZN7S7114C53v17Ev
  virtual void  v18(); // _ZN7S7114C53v18Ev
  virtual void  v19(); // _ZN7S7114C53v19Ev
  virtual void  v20(); // _ZN7S7114C53v20Ev
  ~S7114C5(); // tgen
  S7114C5(); // tgen
};
//SIG(-1 S7114C5) C1{ BC2{ v6 v7 v8} v1 v2 v3 v4 v5}


void  S7114C5 ::v16(){vfunc_called(this, "_ZN7S7114C53v16Ev");}
void  S7114C5 ::v17(){vfunc_called(this, "_ZN7S7114C53v17Ev");}
void  S7114C5 ::v18(){vfunc_called(this, "_ZN7S7114C53v18Ev");}
void  S7114C5 ::v19(){vfunc_called(this, "_ZN7S7114C53v19Ev");}
void  S7114C5 ::v20(){vfunc_called(this, "_ZN7S7114C53v20Ev");}
S7114C5 ::~S7114C5(){ note_dtor("S7114C5", this);} // tgen
S7114C5 ::S7114C5(){ note_ctor("S7114C5", this);} // tgen

static void Test_S7114C5()
{
  extern Class_Descriptor cd_S7114C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7114C5, buf);
    S7114C5 *dp, &lv = *(dp=new (buf) S7114C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7114C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7114C5)");
    check_base_class_offset(lv, (S7114C2_nt*), 0, "S7114C5");
    test_class_info(&lv, &cd_S7114C5);
    dp->~S7114C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7114C5(Test_S7114C5, "S7114C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7114C5C1Ev();
extern void _ZN7S7114C5D1Ev();
Name_Map name_map_S7114C5[] = {
  NSPAIR(_ZN7S7114C5C1Ev),
  NSPAIR(_ZN7S7114C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7114C2_nt;
extern VTBL_ENTRY _ZTI10S7114C2_nt[];
extern  VTBL_ENTRY _ZTV10S7114C2_nt[];
static Base_Class bases_S7114C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7114C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7114C5[];
extern void _ZN10S7114C2_nt2v7Ev();
extern void _ZN10S7114C2_nt2v8Ev();
extern void _ZN10S7114C2_nt2v9Ev();
extern void _ZN7S7114C53v16Ev();
extern void _ZN7S7114C53v17Ev();
extern void _ZN7S7114C53v18Ev();
extern void _ZN7S7114C53v19Ev();
extern void _ZN7S7114C53v20Ev();
static  VTBL_ENTRY vtc_S7114C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7114C5[0]),
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v20Ev,
};
extern VTBL_ENTRY _ZTI7S7114C5[];
extern  VTBL_ENTRY _ZTV7S7114C5[];
Class_Descriptor cd_S7114C5 = {  "S7114C5", // class name
  bases_S7114C5, 1,
  &(vtc_S7114C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7114C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7114C5),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7114C3  : virtual S7114C2_nt , virtual S7114C4_nt , virtual S7114C5 {
  void *s7114c3f0[5];
  __tsi64 s7114c3f1;
  virtual void  v21(); // _ZN7S7114C33v21Ev
  virtual void  v22(); // _ZN7S7114C33v22Ev
  virtual void  v23(); // _ZN7S7114C33v23Ev
  virtual void  v24(); // _ZN7S7114C33v24Ev
  virtual void  v25(); // _ZN7S7114C33v25Ev
  virtual void  v26(); // _ZN7S7114C33v26Ev
  virtual void  v27(); // _ZN7S7114C33v27Ev
  ~S7114C3(); // tgen
  S7114C3(); // tgen
};
//SIG(-1 S7114C3) C1{ VBC2{ v8 v9 v10} VBC3{ v11 v12 v13 v14 v15 v16} VBC4{ BC2 v17 v18 v19 v20 v21} v1 v2 v3 v4 v5 v6 v7 Fp[5] FL}


void  S7114C3 ::v21(){vfunc_called(this, "_ZN7S7114C33v21Ev");}
void  S7114C3 ::v22(){vfunc_called(this, "_ZN7S7114C33v22Ev");}
void  S7114C3 ::v23(){vfunc_called(this, "_ZN7S7114C33v23Ev");}
void  S7114C3 ::v24(){vfunc_called(this, "_ZN7S7114C33v24Ev");}
void  S7114C3 ::v25(){vfunc_called(this, "_ZN7S7114C33v25Ev");}
void  S7114C3 ::v26(){vfunc_called(this, "_ZN7S7114C33v26Ev");}
void  S7114C3 ::v27(){vfunc_called(this, "_ZN7S7114C33v27Ev");}
S7114C3 ::~S7114C3(){ note_dtor("S7114C3", this);} // tgen
S7114C3 ::S7114C3(){ note_ctor("S7114C3", this);} // tgen

static void Test_S7114C3()
{
  extern Class_Descriptor cd_S7114C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S7114C3, buf);
    S7114C3 *dp, &lv = *(dp=new (buf) S7114C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S7114C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7114C3)");
    /*is_ambiguous_... S7114C3::S7114C2_nt */ AMB_check_base_class_offset(lv, (S7114C2_nt*), 0, "S7114C3");
    check_base_class_offset(lv, (S7114C4_nt*), ABISELECT(56,32), "S7114C3");
    check_base_class_offset(lv, (S7114C2_nt*)(S7114C5*), ABISELECT(64,36), "S7114C3");
    check_base_class_offset(lv, (S7114C5*), ABISELECT(64,36), "S7114C3");
    check_field_offset(lv, s7114c3f0, ABISELECT(8,4), "S7114C3.s7114c3f0");
    check_field_offset(lv, s7114c3f1, ABISELECT(48,24), "S7114C3.s7114c3f1");
    test_class_info(&lv, &cd_S7114C3);
    dp->~S7114C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7114C3(Test_S7114C3, "S7114C3", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S7114C3C1Ev();
extern void _ZN7S7114C3D1Ev();
Name_Map name_map_S7114C3[] = {
  NSPAIR(_ZN7S7114C3C1Ev),
  NSPAIR(_ZN7S7114C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7114C2_nt;
extern VTBL_ENTRY _ZTI10S7114C2_nt[];
extern  VTBL_ENTRY _ZTV10S7114C2_nt[];
extern Class_Descriptor cd_S7114C4_nt;
extern VTBL_ENTRY _ZTI10S7114C4_nt[];
extern  VTBL_ENTRY _ZTV10S7114C4_nt[];
extern Class_Descriptor cd_S7114C2_nt;
extern VTBL_ENTRY _ZTI10S7114C2_nt[];
extern  VTBL_ENTRY _ZTV10S7114C2_nt[];
extern Class_Descriptor cd_S7114C5;
extern VTBL_ENTRY _ZTI7S7114C5[];
extern  VTBL_ENTRY _ZTV7S7114C5[];
static Base_Class bases_S7114C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7114C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7114C4_nt,    ABISELECT(56,32), //bcp->offset
    18, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7114C2_nt,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7114C5,    ABISELECT(64,36), //bcp->offset
    32, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7114C3[];
extern void _ZN10S7114C2_nt2v7Ev();
extern void _ZN10S7114C2_nt2v8Ev();
extern void _ZN10S7114C2_nt2v9Ev();
extern void _ZN7S7114C33v21Ev();
extern void _ZN7S7114C33v22Ev();
extern void _ZN7S7114C33v23Ev();
extern void _ZN7S7114C33v24Ev();
extern void _ZN7S7114C33v25Ev();
extern void _ZN7S7114C33v26Ev();
extern void _ZN7S7114C33v27Ev();
extern void _ZN10S7114C4_nt3v10Ev();
extern void _ZN10S7114C4_nt3v11Ev();
extern void _ZN10S7114C4_nt3v12Ev();
extern void _ZN10S7114C4_nt3v13Ev();
extern void _ZN10S7114C4_nt3v14Ev();
extern void _ZN10S7114C4_nt3v15Ev();
extern void _ZN10S7114C2_nt2v7Ev();
extern void _ZN10S7114C2_nt2v8Ev();
extern void _ZN10S7114C2_nt2v9Ev();
extern void _ZN7S7114C53v16Ev();
extern void _ZN7S7114C53v17Ev();
extern void _ZN7S7114C53v18Ev();
extern void _ZN7S7114C53v19Ev();
extern void _ZN7S7114C53v20Ev();
static  VTBL_ENTRY vtc_S7114C3[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7114C3[0]),
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v24Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v25Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v27Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7114C3[0]),
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7114C3[0]),
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v20Ev,
};
extern VTBL_ENTRY _ZTV7S7114C3[];
static  VTT_ENTRY vtt_S7114C3[] = {
  {&(_ZTV7S7114C3[8]),  8,50},
  {&(_ZTV7S7114C3[8]),  8,50},
  {&(_ZTV7S7114C3[26]),  26,50},
  {&(_ZTV7S7114C3[42]),  42,50},
};
extern VTBL_ENTRY _ZTI7S7114C3[];
extern  VTBL_ENTRY _ZTV7S7114C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7114C3[];
Class_Descriptor cd_S7114C3 = {  "S7114C3", // class name
  bases_S7114C3, 4,
  &(vtc_S7114C3[0]), // expected_vtbl_contents
  &(vtt_S7114C3[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S7114C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7114C3),50, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7114C3),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7114C1  : S7114C2_nt , S7114C3 , S7114C4_nt {
  __tsi64 s7114c1f0[2];
  void *s7114c1f1;
  virtual void  v1(); // _ZN7S7114C12v1Ev
  virtual void  v2(); // _ZN7S7114C12v2Ev
  virtual void  v3(); // _ZN7S7114C12v3Ev
  virtual void  v4(); // _ZN7S7114C12v4Ev
  virtual void  v5(); // _ZN7S7114C12v5Ev
  virtual void  v6(); // _ZN7S7114C12v6Ev
  ~S7114C1(); // tgen
  S7114C1(); // tgen
};
//SIG(1 S7114C1) C1{ BC2{ v7 v8 v9} BC3{ VBC2 VBC4{ v10 v11 v12 v13 v14 v15} VBC5{ BC2 v16 v17 v18 v19 v20} v21 v22 v23 v24 v25 v26 v27 Fp[5] FL} BC4 v1 v2 v3 v4 v5 v6 FL[2] Fp}


void  S7114C1 ::v1(){vfunc_called(this, "_ZN7S7114C12v1Ev");}
void  S7114C1 ::v2(){vfunc_called(this, "_ZN7S7114C12v2Ev");}
void  S7114C1 ::v3(){vfunc_called(this, "_ZN7S7114C12v3Ev");}
void  S7114C1 ::v4(){vfunc_called(this, "_ZN7S7114C12v4Ev");}
void  S7114C1 ::v5(){vfunc_called(this, "_ZN7S7114C12v5Ev");}
void  S7114C1 ::v6(){vfunc_called(this, "_ZN7S7114C12v6Ev");}
S7114C1 ::~S7114C1(){ note_dtor("S7114C1", this);} // tgen
S7114C1 ::S7114C1(){ note_ctor("S7114C1", this);} // tgen

static void Test_S7114C1()
{
  extern Class_Descriptor cd_S7114C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,18)];
    init_test(&cd_S7114C1, buf);
    S7114C1 *dp, &lv = *(dp=new (buf) S7114C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,68), "sizeof(S7114C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7114C1)");
    /*is_ambiguous_... S7114C1::S7114C2_nt */ AMB_check_base_class_offset(lv, (S7114C2_nt*), 0, "S7114C1");
    /*is_ambiguous_... S7114C3::S7114C2_nt */ AMB_check_base_class_offset(lv, (S7114C2_nt*)(S7114C3*), ABISELECT(8,4), "S7114C1");
    check_base_class_offset(lv, (S7114C4_nt*)(S7114C3*), ABISELECT(96,60), "S7114C1");
    check_base_class_offset(lv, (S7114C2_nt*)(S7114C5*), ABISELECT(104,64), "S7114C1");
    check_base_class_offset(lv, (S7114C5*)(S7114C3*), ABISELECT(104,64), "S7114C1");
    check_base_class_offset(lv, (S7114C3*), ABISELECT(8,4), "S7114C1");
    /*is_ambiguous_... S7114C1::S7114C4_nt */ AMB_check_base_class_offset(lv, (S7114C4_nt*), ABISELECT(64,36), "S7114C1");
    check_field_offset(lv, s7114c1f0, ABISELECT(72,40), "S7114C1.s7114c1f0");
    check_field_offset(lv, s7114c1f1, ABISELECT(88,56), "S7114C1.s7114c1f1");
    test_class_info(&lv, &cd_S7114C1);
    dp->~S7114C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7114C1(Test_S7114C1, "S7114C1", ABISELECT(112,68));

#else // __cplusplus

extern void _ZN7S7114C1C1Ev();
extern void _ZN7S7114C1D1Ev();
Name_Map name_map_S7114C1[] = {
  NSPAIR(_ZN7S7114C1C1Ev),
  NSPAIR(_ZN7S7114C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7114C2_nt;
extern VTBL_ENTRY _ZTI10S7114C2_nt[];
extern  VTBL_ENTRY _ZTV10S7114C2_nt[];
extern Class_Descriptor cd_S7114C2_nt;
extern VTBL_ENTRY _ZTI10S7114C2_nt[];
extern  VTBL_ENTRY _ZTV10S7114C2_nt[];
extern Class_Descriptor cd_S7114C4_nt;
extern VTBL_ENTRY _ZTI10S7114C4_nt[];
extern  VTBL_ENTRY _ZTV10S7114C4_nt[];
extern Class_Descriptor cd_S7114C2_nt;
extern VTBL_ENTRY _ZTI10S7114C2_nt[];
extern  VTBL_ENTRY _ZTV10S7114C2_nt[];
extern Class_Descriptor cd_S7114C5;
extern VTBL_ENTRY _ZTI7S7114C5[];
extern  VTBL_ENTRY _ZTV7S7114C5[];
extern Class_Descriptor cd_S7114C3;
extern VTBL_ENTRY _ZTI7S7114C3[];
extern  VTBL_ENTRY _ZTV7S7114C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7114C3[];
extern Class_Descriptor cd_S7114C4_nt;
extern VTBL_ENTRY _ZTI10S7114C4_nt[];
extern  VTBL_ENTRY _ZTV10S7114C4_nt[];
static Base_Class bases_S7114C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7114C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7114C2_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7114C4_nt,    ABISELECT(96,60), //bcp->offset
    40, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7114C2_nt,    ABISELECT(104,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7114C5,    ABISELECT(104,64), //bcp->offset
    54, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7114C3,    ABISELECT(8,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7114C4_nt,    ABISELECT(64,36), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7114C1[];
extern void _ZN10S7114C2_nt2v7Ev();
extern void _ZN10S7114C2_nt2v8Ev();
extern void _ZN10S7114C2_nt2v9Ev();
extern void _ZN7S7114C12v1Ev();
extern void _ZN7S7114C12v2Ev();
extern void _ZN7S7114C12v3Ev();
extern void _ZN7S7114C12v4Ev();
extern void _ZN7S7114C12v5Ev();
extern void _ZN7S7114C12v6Ev();
extern void _ZN10S7114C2_nt2v7Ev();
extern void _ZN10S7114C2_nt2v8Ev();
extern void _ZN10S7114C2_nt2v9Ev();
extern void _ZN7S7114C33v21Ev();
extern void _ZN7S7114C33v22Ev();
extern void _ZN7S7114C33v23Ev();
extern void _ZN7S7114C33v24Ev();
extern void _ZN7S7114C33v25Ev();
extern void _ZN7S7114C33v26Ev();
extern void _ZN7S7114C33v27Ev();
extern void _ZN10S7114C4_nt3v10Ev();
extern void _ZN10S7114C4_nt3v11Ev();
extern void _ZN10S7114C4_nt3v12Ev();
extern void _ZN10S7114C4_nt3v13Ev();
extern void _ZN10S7114C4_nt3v14Ev();
extern void _ZN10S7114C4_nt3v15Ev();
extern void _ZN10S7114C4_nt3v10Ev();
extern void _ZN10S7114C4_nt3v11Ev();
extern void _ZN10S7114C4_nt3v12Ev();
extern void _ZN10S7114C4_nt3v13Ev();
extern void _ZN10S7114C4_nt3v14Ev();
extern void _ZN10S7114C4_nt3v15Ev();
extern void _ZN10S7114C2_nt2v7Ev();
extern void _ZN10S7114C2_nt2v8Ev();
extern void _ZN10S7114C2_nt2v9Ev();
extern void _ZN7S7114C53v16Ev();
extern void _ZN7S7114C53v17Ev();
extern void _ZN7S7114C53v18Ev();
extern void _ZN7S7114C53v19Ev();
extern void _ZN7S7114C53v20Ev();
static  VTBL_ENTRY vtc_S7114C1[] = {
  ABISELECT(104,64),
  ABISELECT(96,60),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7114C1[0]),
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN7S7114C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7114C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7114C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7114C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7114C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7114C12v6Ev,
  ABISELECT(96,60),
  ABISELECT(88,56),
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7114C1[0]),
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v24Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v25Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v27Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7114C1[0]),
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S7114C1[0]),
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI7S7114C1[0]),
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v20Ev,
};
extern VTBL_ENTRY _ZTV7S7114C1[];
extern void _ZN10S7114C2_nt2v7Ev();
extern void _ZN10S7114C2_nt2v8Ev();
extern void _ZN10S7114C2_nt2v9Ev();
extern void _ZN7S7114C33v21Ev();
extern void _ZN7S7114C33v22Ev();
extern void _ZN7S7114C33v23Ev();
extern void _ZN7S7114C33v24Ev();
extern void _ZN7S7114C33v25Ev();
extern void _ZN7S7114C33v26Ev();
extern void _ZN7S7114C33v27Ev();
static  VTBL_ENTRY _tg__ZTV7S7114C3__7S7114C1[] = {
  ABISELECT(96,60),
  ABISELECT(88,56),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7114C3[0]),
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v24Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v25Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7114C33v27Ev,
};
extern void _ZN10S7114C4_nt3v10Ev();
extern void _ZN10S7114C4_nt3v11Ev();
extern void _ZN10S7114C4_nt3v12Ev();
extern void _ZN10S7114C4_nt3v13Ev();
extern void _ZN10S7114C4_nt3v14Ev();
extern void _ZN10S7114C4_nt3v15Ev();
static  VTBL_ENTRY _tg__ZTV10S7114C4_nt__7S7114C3__7S7114C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S7114C3[0]),
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7114C4_nt3v15Ev,
};
extern void _ZN10S7114C2_nt2v7Ev();
extern void _ZN10S7114C2_nt2v8Ev();
extern void _ZN10S7114C2_nt2v9Ev();
extern void _ZN7S7114C53v16Ev();
extern void _ZN7S7114C53v17Ev();
extern void _ZN7S7114C53v18Ev();
extern void _ZN7S7114C53v19Ev();
extern void _ZN7S7114C53v20Ev();
static  VTBL_ENTRY _tg__ZTV7S7114C5__7S7114C3__7S7114C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S7114C3[0]),
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7114C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7114C53v20Ev,
};
static  VTT_ENTRY vtt_S7114C1[] = {
  {&(_ZTV7S7114C1[5]),  5,72},
  {&(_tg__ZTV7S7114C3__7S7114C1[8]),  8,18},
  {&(_tg__ZTV7S7114C3__7S7114C1[8]),  8,18},
  {&(_tg__ZTV10S7114C4_nt__7S7114C3__7S7114C1[8]),  8,14},
  {&(_tg__ZTV7S7114C5__7S7114C3__7S7114C1[10]),  10,18},
  {&(_ZTV7S7114C1[22]),  22,72},
  {&(_ZTV7S7114C1[22]),  22,72},
  {&(_ZTV7S7114C1[48]),  48,72},
  {&(_ZTV7S7114C1[64]),  64,72},
};
extern VTBL_ENTRY _ZTI7S7114C1[];
extern  VTBL_ENTRY _ZTV7S7114C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7114C1[];
Class_Descriptor cd_S7114C1 = {  "S7114C1", // class name
  bases_S7114C1, 7,
  &(vtc_S7114C1[0]), // expected_vtbl_contents
  &(vtt_S7114C1[0]), // expected_vtt_contents
  ABISELECT(112,68), // object size
  NSPAIRA(_ZTI7S7114C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7114C1),72, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7114C1),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9694C2  {
  ::S16113C5_nt s9694c2f0;
  int s9694c2f1[2];
  char s9694c2f2;
  virtual  ~S9694C2(); // _ZN7S9694C2D1Ev
  virtual void  v4(); // _ZN7S9694C22v4Ev
  virtual void  v5(); // _ZN7S9694C22v5Ev
  virtual void  v6(); // _ZN7S9694C22v6Ev
  S9694C2(); // tgen
};
//SIG(-1 S9694C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9694C2 ::~S9694C2(){ note_dtor("S9694C2", this);}
void  S9694C2 ::v4(){vfunc_called(this, "_ZN7S9694C22v4Ev");}
void  S9694C2 ::v5(){vfunc_called(this, "_ZN7S9694C22v5Ev");}
void  S9694C2 ::v6(){vfunc_called(this, "_ZN7S9694C22v6Ev");}
S9694C2 ::S9694C2(){ note_ctor("S9694C2", this);} // tgen

static void Test_S9694C2()
{
  extern Class_Descriptor cd_S9694C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9694C2, buf);
    S9694C2 *dp, &lv = *(dp=new (buf) S9694C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9694C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9694C2)");
    check_field_offset(lv, s9694c2f0, ABISELECT(8,4), "S9694C2.s9694c2f0");
    check_field_offset(lv, s9694c2f1, ABISELECT(24,16), "S9694C2.s9694c2f1");
    check_field_offset(lv, s9694c2f2, ABISELECT(32,24), "S9694C2.s9694c2f2");
    test_class_info(&lv, &cd_S9694C2);
    dp->~S9694C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9694C2(Test_S9694C2, "S9694C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9694C2C1Ev();
extern void _ZN7S9694C2D1Ev();
Name_Map name_map_S9694C2[] = {
  NSPAIR(_ZN7S9694C2C1Ev),
  NSPAIR(_ZN7S9694C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9694C2[];
extern void _ZN7S9694C2D1Ev();
extern void _ZN7S9694C2D0Ev();
extern void _ZN7S9694C22v4Ev();
extern void _ZN7S9694C22v5Ev();
extern void _ZN7S9694C22v6Ev();
static  VTBL_ENTRY vtc_S9694C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9694C2[0]),
  (VTBL_ENTRY)&_ZN7S9694C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9694C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9694C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9694C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9694C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9694C2[];
extern  VTBL_ENTRY _ZTV7S9694C2[];
Class_Descriptor cd_S9694C2 = {  "S9694C2", // class name
  0,0,//no base classes
  &(vtc_S9694C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9694C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9694C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9694C6_nt  {
  char s9694c6f0[16];
};
//SIG(-1 S9694C6_nt) C1{ Fc[16]}



//skip512 S9694C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9694C7_nt  {
  char s9694c7f0[1316];
};
//SIG(-1 S9694C7_nt) C1{ Fc[1316]}



//skip512 S9694C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9694C9_nt  {
  short s9694c9f0[6];
  int s9694c9f1;
};
//SIG(-1 S9694C9_nt) C1{ Fs[6] Fi}



//skip512 S9694C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9694C8  {
  int s9694c8f0[2];
  ::S9694C9_nt s9694c8f1;
  char s9694c8f2[128];
};
//SIG(-1 S9694C8) C1{ Fi[2] FC2{ Fs[6] Fi} Fc[128]}



static void Test_S9694C8()
{
  {
    init_simple_test("S9694C8");
    S9694C8 lv;
    check2(sizeof(lv), 152, "sizeof(S9694C8)");
    check2(__alignof__(lv), 4, "__alignof__(S9694C8)");
    check_field_offset(lv, s9694c8f0, 0, "S9694C8.s9694c8f0");
    check_field_offset(lv, s9694c8f1, 8, "S9694C8.s9694c8f1");
    check_field_offset(lv, s9694c8f2, 24, "S9694C8.s9694c8f2");
  }
}
static Arrange_To_Call_Me vS9694C8(Test_S9694C8, "S9694C8", 152);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9694C1  : S9694C2 {
  void *s9694c1f0;
  ::S16113C2_nt s9694c1f1;
  int s9694c1f2;
  void *s9694c1f3[2];
  int s9694c1f4[2];
  ::S16113C5_nt s9694c1f5;
  ::S9694C6_nt s9694c1f6;
  int s9694c1f7;
  ::S9694C7_nt s9694c1f8;
  ::S9694C8 s9694c1f9;
  virtual  ~S9694C1(); // _ZN7S9694C1D1Ev
  virtual void  v1(); // _ZN7S9694C12v1Ev
  virtual void  v2(); // _ZN7S9694C12v2Ev
  virtual void  v3(); // _ZN7S9694C12v3Ev
  S9694C1(); // tgen
};
//SIG(1 S9694C1) C1{ BC2{ vd v4 v5 v6 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 Fp FC5{ m Fi} Fi Fp[2] Fi[2] FC3 FC6{ Fc[16]} Fi FC7{ Fc[1316]} FC8{ Fi[2] FC9{ Fs[6] Fi} Fc[128]}}


 S9694C1 ::~S9694C1(){ note_dtor("S9694C1", this);}
void  S9694C1 ::v1(){vfunc_called(this, "_ZN7S9694C12v1Ev");}
void  S9694C1 ::v2(){vfunc_called(this, "_ZN7S9694C12v2Ev");}
void  S9694C1 ::v3(){vfunc_called(this, "_ZN7S9694C12v3Ev");}
S9694C1 ::S9694C1(){ note_ctor("S9694C1", this);} // tgen

static void Test_S9694C1()
{
  extern Class_Descriptor cd_S9694C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(199,390)];
    init_test(&cd_S9694C1, buf);
    S9694C1 *dp, &lv = *(dp=new (buf) S9694C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1584,1556), "sizeof(S9694C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9694C1)");
    check_base_class_offset(lv, (S9694C2*), 0, "S9694C1");
    check_field_offset(lv, s9694c1f0, ABISELECT(40,28), "S9694C1.s9694c1f0");
    check_field_offset(lv, s9694c1f1, ABISELECT(48,32), "S9694C1.s9694c1f1");
    check_field_offset(lv, s9694c1f2, ABISELECT(52,36), "S9694C1.s9694c1f2");
    check_field_offset(lv, s9694c1f3, ABISELECT(56,40), "S9694C1.s9694c1f3");
    check_field_offset(lv, s9694c1f4, ABISELECT(72,48), "S9694C1.s9694c1f4");
    check_field_offset(lv, s9694c1f5, ABISELECT(80,56), "S9694C1.s9694c1f5");
    check_field_offset(lv, s9694c1f6, ABISELECT(96,68), "S9694C1.s9694c1f6");
    check_field_offset(lv, s9694c1f7, ABISELECT(112,84), "S9694C1.s9694c1f7");
    check_field_offset(lv, s9694c1f8, ABISELECT(116,88), "S9694C1.s9694c1f8");
    check_field_offset(lv, s9694c1f9, ABISELECT(1432,1404), "S9694C1.s9694c1f9");
    test_class_info(&lv, &cd_S9694C1);
    dp->~S9694C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9694C1(Test_S9694C1, "S9694C1", ABISELECT(1584,1556));

#else // __cplusplus

extern void _ZN7S9694C1C1Ev();
extern void _ZN7S9694C1D1Ev();
Name_Map name_map_S9694C1[] = {
  NSPAIR(_ZN7S9694C1C1Ev),
  NSPAIR(_ZN7S9694C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9694C2;
extern VTBL_ENTRY _ZTI7S9694C2[];
extern  VTBL_ENTRY _ZTV7S9694C2[];
static Base_Class bases_S9694C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9694C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9694C1[];
extern void _ZN7S9694C1D1Ev();
extern void _ZN7S9694C1D0Ev();
extern void _ZN7S9694C22v4Ev();
extern void _ZN7S9694C22v5Ev();
extern void _ZN7S9694C22v6Ev();
extern void _ZN7S9694C12v1Ev();
extern void _ZN7S9694C12v2Ev();
extern void _ZN7S9694C12v3Ev();
static  VTBL_ENTRY vtc_S9694C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9694C1[0]),
  (VTBL_ENTRY)&_ZN7S9694C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9694C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9694C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9694C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9694C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9694C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9694C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9694C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9694C1[];
extern  VTBL_ENTRY _ZTV7S9694C1[];
Class_Descriptor cd_S9694C1 = {  "S9694C1", // class name
  bases_S9694C1, 1,
  &(vtc_S9694C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1584,1556), // object size
  NSPAIRA(_ZTI7S9694C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9694C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8122C2_nt  {
  int s8122c2f0;
  void  mf8122c2(); // _ZN10S8122C2_nt8mf8122c2Ev
  virtual  ~S8122C2_nt(); // _ZN10S8122C2_ntD1Ev
  S8122C2_nt(); // tgen
};
//SIG(-1 S8122C2_nt) C1{ vd m Fi}


void  S8122C2_nt ::mf8122c2(){}
 S8122C2_nt ::~S8122C2_nt(){ note_dtor("S8122C2_nt", this);}
S8122C2_nt ::S8122C2_nt(){ note_ctor("S8122C2_nt", this);} // tgen

//skip512 S8122C2_nt

#else // __cplusplus

extern void _ZN10S8122C2_ntC1Ev();
extern void _ZN10S8122C2_ntD1Ev();
Name_Map name_map_S8122C2_nt[] = {
  NSPAIR(_ZN10S8122C2_ntC1Ev),
  NSPAIR(_ZN10S8122C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8122C2_nt[];
extern void _ZN10S8122C2_ntD1Ev();
extern void _ZN10S8122C2_ntD0Ev();
static  VTBL_ENTRY vtc_S8122C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8122C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8122C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8122C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S8122C2_nt[];
VTBL_ENTRY *P__ZTI10S8122C2_nt = _ZTI10S8122C2_nt; 
extern  VTBL_ENTRY _ZTV10S8122C2_nt[];
Class_Descriptor cd_S8122C2_nt = {  "S8122C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8122C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S8122C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8122C2_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8122C3  {
  ::S16113C5_nt s8122c3f0;
  ::S2440C20_nt s8122c3f1;
};
//SIG(-1 S8122C3) C1{ FC2{ m Fp Fi FC3{ m}} FC4{ m Fp Fi FC5{ m}}}



static void Test_S8122C3()
{
  {
    init_simple_test("S8122C3");
    S8122C3 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S8122C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8122C3)");
    check_field_offset(lv, s8122c3f0, 0, "S8122C3.s8122c3f0");
    check_field_offset(lv, s8122c3f1, ABISELECT(16,12), "S8122C3.s8122c3f1");
  }
}
static Arrange_To_Call_Me vS8122C3(Test_S8122C3, "S8122C3", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8122C9  {
  int s8122c9f0[2];
  ::S16113C5_nt s8122c9f1;
  ::S2440C20_nt s8122c9f2;
  void *s8122c9f3;
  int s8122c9f4[2];
  void  mf8122c9(); // _ZN7S8122C98mf8122c9Ev
};
//SIG(1 S8122C9) C1{ m Fi[2] FC2{ m Fp Fi FC3{ m}} FC4{ m Fp Fi FC5{ m}} Fp Fi[2]}


void  S8122C9 ::mf8122c9(){}

static void Test_S8122C9()
{
  {
    init_simple_test("S8122C9");
    S8122C9 lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S8122C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8122C9)");
    check_field_offset(lv, s8122c9f0, 0, "S8122C9.s8122c9f0");
    check_field_offset(lv, s8122c9f1, 8, "S8122C9.s8122c9f1");
    check_field_offset(lv, s8122c9f2, ABISELECT(24,20), "S8122C9.s8122c9f2");
    check_field_offset(lv, s8122c9f3, ABISELECT(40,32), "S8122C9.s8122c9f3");
    check_field_offset(lv, s8122c9f4, ABISELECT(48,36), "S8122C9.s8122c9f4");
  }
}
static Arrange_To_Call_Me vS8122C9(Test_S8122C9, "S8122C9", ABISELECT(56,44));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8122C1  : S8122C2_nt {
  int s8122c1f0;
  ::S8122C3 s8122c1f1;
  int s8122c1f2;
  ::S8122C3 s8122c1f3[17];
  ::S2440C20_nt s8122c1f4;
  int s8122c1f5;
  ::S8122C3 s8122c1f6[15];
  int s8122c1f7;
  ::S8122C9 s8122c1f8[10];
  __tsi64 s8122c1f9;
  char s8122c1f10[538];
  virtual  ~S8122C1(); // _ZN7S8122C1D1Ev
  S8122C1(); // tgen
};
//SIG(1 S8122C1) C1{ BC2{ vd m Fi} vd Fi FC3{ FC4{ m Fp Fi FC5{ m}} FC6{ m Fp Fi FC7{ m}}} Fi FC3[17] FC6 Fi FC3[15] Fi FC8{ m Fi[2] FC4 FC6 Fp Fi[2]}[10] FL Fc[538]}


 S8122C1 ::~S8122C1(){ note_dtor("S8122C1", this);}
S8122C1 ::S8122C1(){ note_ctor("S8122C1", this);} // tgen

static void Test_S8122C1()
{
  extern Class_Descriptor cd_S8122C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(279,455)];
    init_test(&cd_S8122C1, buf);
    S8122C1 *dp, &lv = *(dp=new (buf) S8122C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2224,1816), "sizeof(S8122C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8122C1)");
    check_base_class_offset(lv, (S8122C2_nt*), 0, "S8122C1");
    check_field_offset(lv, s8122c1f0, ABISELECT(12,8), "S8122C1.s8122c1f0");
    check_field_offset(lv, s8122c1f1, ABISELECT(16,12), "S8122C1.s8122c1f1");
    check_field_offset(lv, s8122c1f2, ABISELECT(48,36), "S8122C1.s8122c1f2");
    check_field_offset(lv, s8122c1f3, ABISELECT(56,40), "S8122C1.s8122c1f3");
    check_field_offset(lv, s8122c1f4, ABISELECT(600,448), "S8122C1.s8122c1f4");
    check_field_offset(lv, s8122c1f5, ABISELECT(616,460), "S8122C1.s8122c1f5");
    check_field_offset(lv, s8122c1f6, ABISELECT(624,464), "S8122C1.s8122c1f6");
    check_field_offset(lv, s8122c1f7, ABISELECT(1104,824), "S8122C1.s8122c1f7");
    check_field_offset(lv, s8122c1f8, ABISELECT(1112,828), "S8122C1.s8122c1f8");
    check_field_offset(lv, s8122c1f9, ABISELECT(1672,1268), "S8122C1.s8122c1f9");
    check_field_offset(lv, s8122c1f10, ABISELECT(1680,1276), "S8122C1.s8122c1f10");
    test_class_info(&lv, &cd_S8122C1);
    dp->~S8122C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8122C1(Test_S8122C1, "S8122C1", ABISELECT(2224,1816));

#else // __cplusplus

extern void _ZN7S8122C1C1Ev();
extern void _ZN7S8122C1D1Ev();
Name_Map name_map_S8122C1[] = {
  NSPAIR(_ZN7S8122C1C1Ev),
  NSPAIR(_ZN7S8122C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8122C2_nt;
extern VTBL_ENTRY _ZTI10S8122C2_nt[];
extern  VTBL_ENTRY _ZTV10S8122C2_nt[];
static Base_Class bases_S8122C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8122C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8122C1[];
extern void _ZN7S8122C1D1Ev();
extern void _ZN7S8122C1D0Ev();
static  VTBL_ENTRY vtc_S8122C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8122C1[0]),
  (VTBL_ENTRY)&_ZN7S8122C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8122C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8122C1[];
extern  VTBL_ENTRY _ZTV7S8122C1[];
Class_Descriptor cd_S8122C1 = {  "S8122C1", // class name
  bases_S8122C1, 1,
  &(vtc_S8122C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2224,1816), // object size
  NSPAIRA(_ZTI7S8122C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8122C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20334C2  {
  virtual void  v6(); // _ZN8S20334C22v6Ev
  ~S20334C2(); // tgen
  S20334C2(); // tgen
};
//SIG(-1 S20334C2) C1{ v1}


void  S20334C2 ::v6(){vfunc_called(this, "_ZN8S20334C22v6Ev");}
S20334C2 ::~S20334C2(){ note_dtor("S20334C2", this);} // tgen
S20334C2 ::S20334C2(){ note_ctor("S20334C2", this);} // tgen

static void Test_S20334C2()
{
  extern Class_Descriptor cd_S20334C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20334C2, buf);
    S20334C2 *dp, &lv = *(dp=new (buf) S20334C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20334C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20334C2)");
    test_class_info(&lv, &cd_S20334C2);
    dp->~S20334C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20334C2(Test_S20334C2, "S20334C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20334C2C1Ev();
extern void _ZN8S20334C2D1Ev();
Name_Map name_map_S20334C2[] = {
  NSPAIR(_ZN8S20334C2C1Ev),
  NSPAIR(_ZN8S20334C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20334C2[];
extern void _ZN8S20334C22v6Ev();
static  VTBL_ENTRY vtc_S20334C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20334C2[0]),
  (VTBL_ENTRY)&_ZN8S20334C22v6Ev,
};
extern VTBL_ENTRY _ZTI8S20334C2[];
extern  VTBL_ENTRY _ZTV8S20334C2[];
Class_Descriptor cd_S20334C2 = {  "S20334C2", // class name
  0,0,//no base classes
  &(vtc_S20334C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20334C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20334C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20334C4  {
  virtual void  v7(); // _ZN8S20334C42v7Ev
  virtual void  v8(); // _ZN8S20334C42v8Ev
  virtual void  v9(); // _ZN8S20334C42v9Ev
  virtual void  v10(); // _ZN8S20334C43v10Ev
  ~S20334C4(); // tgen
  S20334C4(); // tgen
};
//SIG(-1 S20334C4) C1{ v1 v2 v3 v4}


void  S20334C4 ::v7(){vfunc_called(this, "_ZN8S20334C42v7Ev");}
void  S20334C4 ::v8(){vfunc_called(this, "_ZN8S20334C42v8Ev");}
void  S20334C4 ::v9(){vfunc_called(this, "_ZN8S20334C42v9Ev");}
void  S20334C4 ::v10(){vfunc_called(this, "_ZN8S20334C43v10Ev");}
S20334C4 ::~S20334C4(){ note_dtor("S20334C4", this);} // tgen
S20334C4 ::S20334C4(){ note_ctor("S20334C4", this);} // tgen

static void Test_S20334C4()
{
  extern Class_Descriptor cd_S20334C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20334C4, buf);
    S20334C4 *dp, &lv = *(dp=new (buf) S20334C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20334C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20334C4)");
    test_class_info(&lv, &cd_S20334C4);
    dp->~S20334C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20334C4(Test_S20334C4, "S20334C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20334C4C1Ev();
extern void _ZN8S20334C4D1Ev();
Name_Map name_map_S20334C4[] = {
  NSPAIR(_ZN8S20334C4C1Ev),
  NSPAIR(_ZN8S20334C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20334C4[];
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
static  VTBL_ENTRY vtc_S20334C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20334C4[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
};
extern VTBL_ENTRY _ZTI8S20334C4[];
extern  VTBL_ENTRY _ZTV8S20334C4[];
Class_Descriptor cd_S20334C4 = {  "S20334C4", // class name
  0,0,//no base classes
  &(vtc_S20334C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20334C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20334C4),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20334C5  : S20334C4 {
  char s20334c5f0;
  virtual void  v11(); // _ZN8S20334C53v11Ev
  virtual void  v12(); // _ZN8S20334C53v12Ev
  ~S20334C5(); // tgen
  S20334C5(); // tgen
};
//SIG(-1 S20334C5) C1{ BC2{ v3 v4 v5 v6} v1 v2 Fc}


void  S20334C5 ::v11(){vfunc_called(this, "_ZN8S20334C53v11Ev");}
void  S20334C5 ::v12(){vfunc_called(this, "_ZN8S20334C53v12Ev");}
S20334C5 ::~S20334C5(){ note_dtor("S20334C5", this);} // tgen
S20334C5 ::S20334C5(){ note_ctor("S20334C5", this);} // tgen

static void Test_S20334C5()
{
  extern Class_Descriptor cd_S20334C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20334C5, buf);
    S20334C5 *dp, &lv = *(dp=new (buf) S20334C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20334C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20334C5)");
    check_base_class_offset(lv, (S20334C4*), 0, "S20334C5");
    check_field_offset(lv, s20334c5f0, ABISELECT(8,4), "S20334C5.s20334c5f0");
    test_class_info(&lv, &cd_S20334C5);
    dp->~S20334C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20334C5(Test_S20334C5, "S20334C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20334C5C1Ev();
extern void _ZN8S20334C5D1Ev();
Name_Map name_map_S20334C5[] = {
  NSPAIR(_ZN8S20334C5C1Ev),
  NSPAIR(_ZN8S20334C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20334C4;
extern VTBL_ENTRY _ZTI8S20334C4[];
extern  VTBL_ENTRY _ZTV8S20334C4[];
static Base_Class bases_S20334C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20334C5[];
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
extern void _ZN8S20334C53v11Ev();
extern void _ZN8S20334C53v12Ev();
static  VTBL_ENTRY vtc_S20334C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20334C5[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v12Ev,
};
extern VTBL_ENTRY _ZTI8S20334C5[];
extern  VTBL_ENTRY _ZTV8S20334C5[];
Class_Descriptor cd_S20334C5 = {  "S20334C5", // class name
  bases_S20334C5, 1,
  &(vtc_S20334C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20334C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20334C5),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20334C6  : S20334C4 , virtual S20334C5 {
  int s20334c6f0;
  ::S20334C5 s20334c6f1[4];
  void *s20334c6f2;
  virtual  ~S20334C6(); // _ZN8S20334C6D2Ev
  virtual void  v13(); // _ZN8S20334C63v13Ev
  virtual void  v14(); // _ZN8S20334C63v14Ev
  virtual void  v15(); // _ZN8S20334C63v15Ev
  virtual void  v16(); // _ZN8S20334C63v16Ev
  virtual void  v17(); // _ZN8S20334C63v17Ev
  virtual void  v18(); // _ZN8S20334C63v18Ev
  S20334C6(); // tgen
};
//SIG(-1 S20334C6) C1{ BC2{ v7 v8 v9 v10} VBC3{ BC2 v11 v12 Fc} vd v1 v2 v3 v4 v5 v6 Fi FC3[4] Fp}


 S20334C6 ::~S20334C6(){ note_dtor("S20334C6", this);}
void  S20334C6 ::v13(){vfunc_called(this, "_ZN8S20334C63v13Ev");}
void  S20334C6 ::v14(){vfunc_called(this, "_ZN8S20334C63v14Ev");}
void  S20334C6 ::v15(){vfunc_called(this, "_ZN8S20334C63v15Ev");}
void  S20334C6 ::v16(){vfunc_called(this, "_ZN8S20334C63v16Ev");}
void  S20334C6 ::v17(){vfunc_called(this, "_ZN8S20334C63v17Ev");}
void  S20334C6 ::v18(){vfunc_called(this, "_ZN8S20334C63v18Ev");}
S20334C6 ::S20334C6(){ note_ctor("S20334C6", this);} // tgen

static void Test_S20334C6()
{
  extern Class_Descriptor cd_S20334C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[14];
    init_test(&cd_S20334C6, buf);
    S20334C6 *dp, &lv = *(dp=new (buf) S20334C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,52), "sizeof(S20334C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20334C6)");
    /*is_ambiguous_... S20334C6::S20334C4 */ AMB_check_base_class_offset(lv, (S20334C4*), 0, "S20334C6");
    check_base_class_offset(lv, (S20334C4*)(S20334C5*), ABISELECT(88,44), "S20334C6");
    check_base_class_offset(lv, (S20334C5*), ABISELECT(88,44), "S20334C6");
    check_field_offset(lv, s20334c6f0, ABISELECT(8,4), "S20334C6.s20334c6f0");
    check_field_offset(lv, s20334c6f1, ABISELECT(16,8), "S20334C6.s20334c6f1");
    check_field_offset(lv, s20334c6f2, ABISELECT(80,40), "S20334C6.s20334c6f2");
    test_class_info(&lv, &cd_S20334C6);
    dp->~S20334C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20334C6(Test_S20334C6, "S20334C6", ABISELECT(104,52));

#else // __cplusplus

extern void _ZN8S20334C6C1Ev();
extern void _ZN8S20334C6D2Ev();
Name_Map name_map_S20334C6[] = {
  NSPAIR(_ZN8S20334C6C1Ev),
  NSPAIR(_ZN8S20334C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20334C4;
extern VTBL_ENTRY _ZTI8S20334C4[];
extern  VTBL_ENTRY _ZTV8S20334C4[];
extern Class_Descriptor cd_S20334C4;
extern VTBL_ENTRY _ZTI8S20334C4[];
extern  VTBL_ENTRY _ZTV8S20334C4[];
extern Class_Descriptor cd_S20334C5;
extern VTBL_ENTRY _ZTI8S20334C5[];
extern  VTBL_ENTRY _ZTV8S20334C5[];
static Base_Class bases_S20334C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20334C4,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20334C5,    ABISELECT(88,44), //bcp->offset
    15, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20334C6[];
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
extern void _ZN8S20334C6D1Ev();
extern void _ZN8S20334C6D0Ev();
extern void _ZN8S20334C63v13Ev();
extern void _ZN8S20334C63v14Ev();
extern void _ZN8S20334C63v15Ev();
extern void _ZN8S20334C63v16Ev();
extern void _ZN8S20334C63v17Ev();
extern void _ZN8S20334C63v18Ev();
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
extern void _ZN8S20334C53v11Ev();
extern void _ZN8S20334C53v12Ev();
static  VTBL_ENTRY vtc_S20334C6[] = {
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20334C6[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20334C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20334C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S20334C6[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v12Ev,
};
extern VTBL_ENTRY _ZTV8S20334C6[];
static  VTT_ENTRY vtt_S20334C6[] = {
  {&(_ZTV8S20334C6[3]),  3,29},
  {&(_ZTV8S20334C6[23]),  23,29},
};
extern VTBL_ENTRY _ZTI8S20334C6[];
extern  VTBL_ENTRY _ZTV8S20334C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20334C6[];
Class_Descriptor cd_S20334C6 = {  "S20334C6", // class name
  bases_S20334C6, 3,
  &(vtc_S20334C6[0]), // expected_vtbl_contents
  &(vtt_S20334C6[0]), // expected_vtt_contents
  ABISELECT(104,52), // object size
  NSPAIRA(_ZTI8S20334C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20334C6),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20334C6),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20334C3  : virtual S20334C4 , S20334C5 , S20334C6 {
  ::S2489C12_nt s20334c3f0;
  int s20334c3f1;
  short s20334c3f2[3];
  virtual  ~S20334C3(); // _ZN8S20334C3D2Ev
  virtual void  v19(); // _ZN8S20334C33v19Ev
  S20334C3(); // tgen
};
//SIG(-1 S20334C3) C1{ VBC2{ v2 v3 v4 v5} BC3{ BC2 v6 v7 Fc} BC4{ BC2 VBC3 vd v8 v9 v10 v11 v12 v13 Fi FC3[4] Fp} vd v1 FC5{} Fi Fs[3]}


 S20334C3 ::~S20334C3(){ note_dtor("S20334C3", this);}
void  S20334C3 ::v19(){vfunc_called(this, "_ZN8S20334C33v19Ev");}
S20334C3 ::S20334C3(){ note_ctor("S20334C3", this);} // tgen

static void Test_S20334C3()
{
  extern Class_Descriptor cd_S20334C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,21)];
    init_test(&cd_S20334C3, buf);
    S20334C3 *dp, &lv = *(dp=new (buf) S20334C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,80), "sizeof(S20334C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20334C3)");
    /*is_ambiguous_... S20334C3::S20334C4 */ AMB_check_base_class_offset(lv, (S20334C4*), ABISELECT(120,68), "S20334C3");
    /*is_ambiguous_... S20334C3::S20334C5 */ AMB_check_base_class_offset(lv, (S20334C4*)(S20334C5*), 0, "S20334C3");
    /*is_ambiguous_... S20334C3::S20334C5 */ AMB_check_base_class_offset(lv, (S20334C5*), 0, "S20334C3");
    /*is_ambiguous_... S20334C6::S20334C4 */ AMB_check_base_class_offset(lv, (S20334C4*)(S20334C6*), ABISELECT(16,8), "S20334C3");
    /*is_ambiguous_... S20334C3::S20334C5 */ AMB_check_base_class_offset(lv, (S20334C4*)(S20334C5*), ABISELECT(128,72), "S20334C3");
    check_base_class_offset(lv, (S20334C5*)(S20334C6*), ABISELECT(128,72), "S20334C3");
    check_base_class_offset(lv, (S20334C6*), ABISELECT(16,8), "S20334C3");
    check_field_offset(lv, s20334c3f0, ABISELECT(104,52), "S20334C3.s20334c3f0");
    check_field_offset(lv, s20334c3f1, ABISELECT(108,56), "S20334C3.s20334c3f1");
    check_field_offset(lv, s20334c3f2, ABISELECT(112,60), "S20334C3.s20334c3f2");
    test_class_info(&lv, &cd_S20334C3);
    dp->~S20334C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20334C3(Test_S20334C3, "S20334C3", ABISELECT(144,80));

#else // __cplusplus

extern void _ZN8S20334C3C1Ev();
extern void _ZN8S20334C3D2Ev();
Name_Map name_map_S20334C3[] = {
  NSPAIR(_ZN8S20334C3C1Ev),
  NSPAIR(_ZN8S20334C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20334C4;
extern VTBL_ENTRY _ZTI8S20334C4[];
extern  VTBL_ENTRY _ZTV8S20334C4[];
extern Class_Descriptor cd_S20334C4;
extern VTBL_ENTRY _ZTI8S20334C4[];
extern  VTBL_ENTRY _ZTV8S20334C4[];
extern Class_Descriptor cd_S20334C5;
extern VTBL_ENTRY _ZTI8S20334C5[];
extern  VTBL_ENTRY _ZTV8S20334C5[];
extern Class_Descriptor cd_S20334C4;
extern VTBL_ENTRY _ZTI8S20334C4[];
extern  VTBL_ENTRY _ZTV8S20334C4[];
extern Class_Descriptor cd_S20334C4;
extern VTBL_ENTRY _ZTI8S20334C4[];
extern  VTBL_ENTRY _ZTV8S20334C4[];
extern Class_Descriptor cd_S20334C5;
extern VTBL_ENTRY _ZTI8S20334C5[];
extern  VTBL_ENTRY _ZTV8S20334C5[];
extern Class_Descriptor cd_S20334C6;
extern VTBL_ENTRY _ZTI8S20334C6[];
extern  VTBL_ENTRY _ZTV8S20334C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20334C6[];
static Base_Class bases_S20334C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20334C4,    ABISELECT(120,68), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20334C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20334C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20334C4,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20334C5,    ABISELECT(128,72), //bcp->offset
    38, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20334C6,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20334C3[];
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
extern void _ZN8S20334C53v11Ev();
extern void _ZN8S20334C53v12Ev();
extern void _ZN8S20334C3D1Ev();
extern void _ZN8S20334C3D0Ev();
extern void _ZN8S20334C33v19Ev();
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
extern void ABISELECT(_ZThn16_N8S20334C3D1Ev,_ZThn8_N8S20334C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20334C3D0Ev,_ZThn8_N8S20334C3D0Ev)();
extern void _ZN8S20334C63v13Ev();
extern void _ZN8S20334C63v14Ev();
extern void _ZN8S20334C63v15Ev();
extern void _ZN8S20334C63v16Ev();
extern void _ZN8S20334C63v17Ev();
extern void _ZN8S20334C63v18Ev();
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
extern void _ZN8S20334C53v11Ev();
extern void _ZN8S20334C53v12Ev();
static  VTBL_ENTRY vtc_S20334C3[] = {
  ABISELECT(128,72),
  ABISELECT(120,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20334C3[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20334C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20334C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20334C33v19Ev,
  ABISELECT(112,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20334C3[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20334C3D1Ev,_ZThn8_N8S20334C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20334C3D0Ev,_ZThn8_N8S20334C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20334C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI8S20334C3[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S20334C3[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v12Ev,
};
extern VTBL_ENTRY _ZTV8S20334C3[];
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
extern void _ZN8S20334C6D1Ev();
extern void _ZN8S20334C6D0Ev();
extern void _ZN8S20334C63v13Ev();
extern void _ZN8S20334C63v14Ev();
extern void _ZN8S20334C63v15Ev();
extern void _ZN8S20334C63v16Ev();
extern void _ZN8S20334C63v17Ev();
extern void _ZN8S20334C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20334C6__8S20334C3[] = {
  ABISELECT(112,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20334C6[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20334C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20334C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v18Ev,
};
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
extern void _ZN8S20334C53v11Ev();
extern void _ZN8S20334C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20334C5__8S20334C6__8S20334C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S20334C6[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v12Ev,
};
static  VTT_ENTRY vtt_S20334C3[] = {
  {&(_ZTV8S20334C3[4]),  4,52},
  {&(_tg__ZTV8S20334C6__8S20334C3[3]),  3,15},
  {&(_tg__ZTV8S20334C5__8S20334C6__8S20334C3[8]),  8,14},
  {&(_ZTV8S20334C3[34]),  34,52},
  {&(_ZTV8S20334C3[16]),  16,52},
  {&(_ZTV8S20334C3[46]),  46,52},
};
extern VTBL_ENTRY _ZTI8S20334C3[];
extern  VTBL_ENTRY _ZTV8S20334C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20334C3[];
Class_Descriptor cd_S20334C3 = {  "S20334C3", // class name
  bases_S20334C3, 7,
  &(vtc_S20334C3[0]), // expected_vtbl_contents
  &(vtt_S20334C3[0]), // expected_vtt_contents
  ABISELECT(144,80), // object size
  NSPAIRA(_ZTI8S20334C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20334C3),52, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20334C3),6, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20334C1  : virtual S20334C2 , virtual S20334C3 {
  virtual  ~S20334C1(); // _ZN8S20334C1D2Ev
  virtual void  v1(); // _ZN8S20334C12v1Ev
  virtual void  v2(); // _ZN8S20334C12v2Ev
  virtual void  v3(); // _ZN8S20334C12v3Ev
  virtual void  v4(); // _ZN8S20334C12v4Ev
  virtual void  v5(); // _ZN8S20334C12v5Ev
  S20334C1(); // tgen
};
//SIG(1 S20334C1) C1{ VBC2{ v6} VBC3{ VBC4{ v7 v8 v9 v10} BC5{ BC4 v11 v12 Fc} BC6{ BC4 VBC5 vd v13 v14 v15 v16 v17 v18 Fi FC5[4] Fp} vd v19 FC7{} Fi Fs[3]} vd v1 v2 v3 v4 v5}


 S20334C1 ::~S20334C1(){ note_dtor("S20334C1", this);}
void  S20334C1 ::v1(){vfunc_called(this, "_ZN8S20334C12v1Ev");}
void  S20334C1 ::v2(){vfunc_called(this, "_ZN8S20334C12v2Ev");}
void  S20334C1 ::v3(){vfunc_called(this, "_ZN8S20334C12v3Ev");}
void  S20334C1 ::v4(){vfunc_called(this, "_ZN8S20334C12v4Ev");}
void  S20334C1 ::v5(){vfunc_called(this, "_ZN8S20334C12v5Ev");}
S20334C1 ::S20334C1(){ note_ctor("S20334C1", this);} // tgen

static void Test_S20334C1()
{
  extern Class_Descriptor cd_S20334C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S20334C1, buf);
    S20334C1 *dp, &lv = *(dp=new (buf) S20334C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S20334C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20334C1)");
    check_base_class_offset(lv, (S20334C2*), 0, "S20334C1");
    /*is_ambiguous_... S20334C3::S20334C4 */ AMB_check_base_class_offset(lv, (S20334C4*)(S20334C3*), ABISELECT(128,72), "S20334C1");
    /*is_ambiguous_... S20334C3::S20334C5 */ AMB_check_base_class_offset(lv, (S20334C4*)(S20334C5*)(S20334C3*), ABISELECT(8,4), "S20334C1");
    /*is_ambiguous_... S20334C3::S20334C5 */ AMB_check_base_class_offset(lv, (S20334C5*)(S20334C3*), ABISELECT(8,4), "S20334C1");
    /*is_ambiguous_... S20334C6::S20334C4 */ AMB_check_base_class_offset(lv, (S20334C4*)(S20334C6*)(S20334C3*), ABISELECT(24,12), "S20334C1");
    /*is_ambiguous_... S20334C1::S20334C5 */ AMB_check_base_class_offset(lv, (S20334C4*)(S20334C5*), ABISELECT(136,76), "S20334C1");
    check_base_class_offset(lv, (S20334C5*)(S20334C6*)(S20334C3*), ABISELECT(136,76), "S20334C1");
    check_base_class_offset(lv, (S20334C6*)(S20334C3*), ABISELECT(24,12), "S20334C1");
    check_base_class_offset(lv, (S20334C3*), ABISELECT(8,4), "S20334C1");
    test_class_info(&lv, &cd_S20334C1);
    dp->~S20334C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20334C1(Test_S20334C1, "S20334C1", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN8S20334C1C1Ev();
extern void _ZN8S20334C1D2Ev();
Name_Map name_map_S20334C1[] = {
  NSPAIR(_ZN8S20334C1C1Ev),
  NSPAIR(_ZN8S20334C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20334C2;
extern VTBL_ENTRY _ZTI8S20334C2[];
extern  VTBL_ENTRY _ZTV8S20334C2[];
extern Class_Descriptor cd_S20334C4;
extern VTBL_ENTRY _ZTI8S20334C4[];
extern  VTBL_ENTRY _ZTV8S20334C4[];
extern Class_Descriptor cd_S20334C4;
extern VTBL_ENTRY _ZTI8S20334C4[];
extern  VTBL_ENTRY _ZTV8S20334C4[];
extern Class_Descriptor cd_S20334C5;
extern VTBL_ENTRY _ZTI8S20334C5[];
extern  VTBL_ENTRY _ZTV8S20334C5[];
extern Class_Descriptor cd_S20334C4;
extern VTBL_ENTRY _ZTI8S20334C4[];
extern  VTBL_ENTRY _ZTV8S20334C4[];
extern Class_Descriptor cd_S20334C4;
extern VTBL_ENTRY _ZTI8S20334C4[];
extern  VTBL_ENTRY _ZTV8S20334C4[];
extern Class_Descriptor cd_S20334C5;
extern VTBL_ENTRY _ZTI8S20334C5[];
extern  VTBL_ENTRY _ZTV8S20334C5[];
extern Class_Descriptor cd_S20334C6;
extern VTBL_ENTRY _ZTI8S20334C6[];
extern  VTBL_ENTRY _ZTV8S20334C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20334C6[];
extern Class_Descriptor cd_S20334C3;
extern VTBL_ENTRY _ZTI8S20334C3[];
extern  VTBL_ENTRY _ZTV8S20334C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20334C3[];
static Base_Class bases_S20334C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20334C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20334C4,    ABISELECT(128,72), //bcp->offset
    57, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20334C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20334C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20334C4,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20334C4,    ABISELECT(136,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20334C5,    ABISELECT(136,76), //bcp->offset
    67, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20334C6,    ABISELECT(24,12), //bcp->offset
    42, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20334C3,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20334C1[];
extern void _ZN8S20334C22v6Ev();
extern void _ZN8S20334C1D1Ev();
extern void _ZN8S20334C1D0Ev();
extern void _ZN8S20334C12v1Ev();
extern void _ZN8S20334C12v2Ev();
extern void _ZN8S20334C12v3Ev();
extern void _ZN8S20334C12v4Ev();
extern void _ZN8S20334C12v5Ev();
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
extern void _ZN8S20334C53v11Ev();
extern void _ZN8S20334C53v12Ev();
extern void ABISELECT(_ZTv0_n88_N8S20334C1D1Ev,_ZTv0_n44_N8S20334C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20334C1D1Ev,_ZThn4_N8S20334C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20334C1D0Ev,_ZTv0_n44_N8S20334C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20334C1D0Ev,_ZThn4_N8S20334C1D0Ev)() __attribute__((weak));
extern void _ZN8S20334C33v19Ev();
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
extern void ABISELECT(_ZTvn16_n88_N8S20334C1D1Ev,_ZTvn8_n44_N8S20334C1D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N8S20334C1D0Ev,_ZTvn8_n44_N8S20334C1D0Ev)();
extern void _ZN8S20334C63v13Ev();
extern void _ZN8S20334C63v14Ev();
extern void _ZN8S20334C63v15Ev();
extern void _ZN8S20334C63v16Ev();
extern void _ZN8S20334C63v17Ev();
extern void _ZN8S20334C63v18Ev();
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
extern void _ZN8S20334C53v11Ev();
extern void _ZN8S20334C53v12Ev();
static  VTBL_ENTRY vtc_S20334C1[] = {
  ABISELECT(136,76),
  ABISELECT(128,72),
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20334C1[0]),
  (VTBL_ENTRY)&_ZN8S20334C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20334C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20334C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20334C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20334C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20334C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20334C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20334C12v5Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(128,72),
  ABISELECT(120,68),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20334C1[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20334C1D1Ev,_ZTv0_n44_N8S20334C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20334C1D0Ev,_ZTv0_n44_N8S20334C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20334C33v19Ev,
  ABISELECT(112,64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20334C1[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N8S20334C1D1Ev,_ZTvn8_n44_N8S20334C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N8S20334C1D0Ev,_ZTvn8_n44_N8S20334C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20334C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S20334C1[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI8S20334C1[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v12Ev,
};
extern VTBL_ENTRY _ZTV8S20334C1[];
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
extern void _ZN8S20334C53v11Ev();
extern void _ZN8S20334C53v12Ev();
extern void _ZN8S20334C3D1Ev();
extern void _ZN8S20334C3D0Ev();
extern void _ZN8S20334C33v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20334C3__8S20334C1[] = {
  ABISELECT(128,72),
  ABISELECT(120,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20334C3[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20334C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20334C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20334C33v19Ev,
};
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
extern void _ZN8S20334C6D1Ev();
extern void _ZN8S20334C6D0Ev();
extern void _ZN8S20334C63v13Ev();
extern void _ZN8S20334C63v14Ev();
extern void _ZN8S20334C63v15Ev();
extern void _ZN8S20334C63v16Ev();
extern void _ZN8S20334C63v17Ev();
extern void _ZN8S20334C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20334C68S20334C3__8S20334C1[] = {
  ABISELECT(112,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20334C6[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20334C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20334C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v18Ev,
};
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
extern void _ZN8S20334C53v11Ev();
extern void _ZN8S20334C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20334C5__8S20334C68S20334C3__8S20334C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S20334C6[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v12Ev,
};
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20334C4__8S20334C3__8S20334C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI8S20334C3[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
};
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
extern void ABISELECT(_ZThn16_N8S20334C3D1Ev,_ZThn8_N8S20334C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20334C3D0Ev,_ZThn8_N8S20334C3D0Ev)();
extern void _ZN8S20334C63v13Ev();
extern void _ZN8S20334C63v14Ev();
extern void _ZN8S20334C63v15Ev();
extern void _ZN8S20334C63v16Ev();
extern void _ZN8S20334C63v17Ev();
extern void _ZN8S20334C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20334C6__8S20334C3__8S20334C1[] = {
  ABISELECT(112,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20334C3[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20334C3D1Ev,_ZThn8_N8S20334C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20334C3D0Ev,_ZThn8_N8S20334C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20334C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20334C63v18Ev,
};
extern void _ZN8S20334C42v7Ev();
extern void _ZN8S20334C42v8Ev();
extern void _ZN8S20334C42v9Ev();
extern void _ZN8S20334C43v10Ev();
extern void _ZN8S20334C53v11Ev();
extern void _ZN8S20334C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20334C5__A1__8S20334C3__8S20334C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S20334C3[0]),
  (VTBL_ENTRY)&_ZN8S20334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20334C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20334C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20334C53v12Ev,
};
static  VTT_ENTRY vtt_S20334C1[] = {
  {&(_ZTV8S20334C1[7]),  7,81},
  {&(_ZTV8S20334C1[7]),  7,81},
  {&(_ZTV8S20334C1[33]),  33,81},
  {&(_ZTV8S20334C1[63]),  63,81},
  {&(_ZTV8S20334C1[45]),  45,81},
  {&(_ZTV8S20334C1[75]),  75,81},
  {&(_tg__ZTV8S20334C3__8S20334C1[4]),  4,13},
  {&(_tg__ZTV8S20334C68S20334C3__8S20334C1[3]),  3,15},
  {&(_tg__ZTV8S20334C5__8S20334C68S20334C3__8S20334C1[8]),  8,14},
  {&(_tg__ZTV8S20334C4__8S20334C3__8S20334C1[6]),  6,10},
  {&(_tg__ZTV8S20334C6__8S20334C3__8S20334C1[3]),  3,15},
  {&(_tg__ZTV8S20334C5__A1__8S20334C3__8S20334C1[8]),  8,14},
};
extern VTBL_ENTRY _ZTI8S20334C1[];
extern  VTBL_ENTRY _ZTV8S20334C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20334C1[];
static VTBL_ENTRY alt_thunk_names88[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20334C1D0Ev,_ZTv0_n44_N8S20334C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20334C1D0Ev,_ZThn4_N8S20334C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20334C1D1Ev,_ZTv0_n44_N8S20334C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20334C1D1Ev,_ZThn4_N8S20334C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20334C1 = {  "S20334C1", // class name
  bases_S20334C1, 9,
  &(vtc_S20334C1[0]), // expected_vtbl_contents
  &(vtt_S20334C1[0]), // expected_vtt_contents
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI8S20334C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20334C1),81, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20334C1),12, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names88,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4414C3  {
  ::S16113C5_nt s4414c3f0;
  int s4414c3f1[2];
  char s4414c3f2;
  virtual  ~S4414C3(); // _ZN7S4414C3D1Ev
  virtual void  v2(); // _ZN7S4414C32v2Ev
  virtual void  v3(); // _ZN7S4414C32v3Ev
  virtual void  v4(); // _ZN7S4414C32v4Ev
  S4414C3(); // tgen
};
//SIG(-1 S4414C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4414C3 ::~S4414C3(){ note_dtor("S4414C3", this);}
void  S4414C3 ::v2(){vfunc_called(this, "_ZN7S4414C32v2Ev");}
void  S4414C3 ::v3(){vfunc_called(this, "_ZN7S4414C32v3Ev");}
void  S4414C3 ::v4(){vfunc_called(this, "_ZN7S4414C32v4Ev");}
S4414C3 ::S4414C3(){ note_ctor("S4414C3", this);} // tgen

static void Test_S4414C3()
{
  extern Class_Descriptor cd_S4414C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4414C3, buf);
    S4414C3 *dp, &lv = *(dp=new (buf) S4414C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4414C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4414C3)");
    check_field_offset(lv, s4414c3f0, ABISELECT(8,4), "S4414C3.s4414c3f0");
    check_field_offset(lv, s4414c3f1, ABISELECT(24,16), "S4414C3.s4414c3f1");
    check_field_offset(lv, s4414c3f2, ABISELECT(32,24), "S4414C3.s4414c3f2");
    test_class_info(&lv, &cd_S4414C3);
    dp->~S4414C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4414C3(Test_S4414C3, "S4414C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4414C3C1Ev();
extern void _ZN7S4414C3D1Ev();
Name_Map name_map_S4414C3[] = {
  NSPAIR(_ZN7S4414C3C1Ev),
  NSPAIR(_ZN7S4414C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4414C3[];
extern void _ZN7S4414C3D1Ev();
extern void _ZN7S4414C3D0Ev();
extern void _ZN7S4414C32v2Ev();
extern void _ZN7S4414C32v3Ev();
extern void _ZN7S4414C32v4Ev();
static  VTBL_ENTRY vtc_S4414C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4414C3[0]),
  (VTBL_ENTRY)&_ZN7S4414C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4414C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4414C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4414C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4414C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4414C3[];
extern  VTBL_ENTRY _ZTV7S4414C3[];
Class_Descriptor cd_S4414C3 = {  "S4414C3", // class name
  0,0,//no base classes
  &(vtc_S4414C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4414C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4414C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4414C2  : S4414C3 {
  void *s4414c2f0[2];
  int s4414c2f1;
  char s4414c2f2;
  virtual  ~S4414C2(); // _ZN7S4414C2D1Ev
  virtual void  v5(); // _ZN7S4414C22v5Ev
  S4414C2(); // tgen
};
//SIG(-1 S4414C2) C1{ BC2{ vd v2 v3 v4 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 Fp[2] Fi Fc}


 S4414C2 ::~S4414C2(){ note_dtor("S4414C2", this);}
void  S4414C2 ::v5(){vfunc_called(this, "_ZN7S4414C22v5Ev");}
S4414C2 ::S4414C2(){ note_ctor("S4414C2", this);} // tgen

static void Test_S4414C2()
{
  extern Class_Descriptor cd_S4414C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4414C2, buf);
    S4414C2 *dp, &lv = *(dp=new (buf) S4414C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4414C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4414C2)");
    check_base_class_offset(lv, (S4414C3*), 0, "S4414C2");
    check_field_offset(lv, s4414c2f0, ABISELECT(40,28), "S4414C2.s4414c2f0");
    check_field_offset(lv, s4414c2f1, ABISELECT(56,36), "S4414C2.s4414c2f1");
    check_field_offset(lv, s4414c2f2, ABISELECT(60,40), "S4414C2.s4414c2f2");
    test_class_info(&lv, &cd_S4414C2);
    dp->~S4414C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4414C2(Test_S4414C2, "S4414C2", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4414C2C1Ev();
extern void _ZN7S4414C2D1Ev();
Name_Map name_map_S4414C2[] = {
  NSPAIR(_ZN7S4414C2C1Ev),
  NSPAIR(_ZN7S4414C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4414C3;
extern VTBL_ENTRY _ZTI7S4414C3[];
extern  VTBL_ENTRY _ZTV7S4414C3[];
static Base_Class bases_S4414C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4414C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4414C2[];
extern void _ZN7S4414C2D1Ev();
extern void _ZN7S4414C2D0Ev();
extern void _ZN7S4414C32v2Ev();
extern void _ZN7S4414C32v3Ev();
extern void _ZN7S4414C32v4Ev();
extern void _ZN7S4414C22v5Ev();
static  VTBL_ENTRY vtc_S4414C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4414C2[0]),
  (VTBL_ENTRY)&_ZN7S4414C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4414C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4414C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4414C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4414C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4414C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4414C2[];
extern  VTBL_ENTRY _ZTV7S4414C2[];
Class_Descriptor cd_S4414C2 = {  "S4414C2", // class name
  bases_S4414C2, 1,
  &(vtc_S4414C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4414C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4414C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4414C1  : S4414C2 {
  int s4414c1f0;
  ::S8511C12 s4414c1f1;
  ::S10275C6_nt s4414c1f2;
  ::S4206C36_nt s4414c1f3;
  ::S8511C3_nt s4414c1f4;
  virtual  ~S4414C1(); // _ZN7S4414C1D1Ev
  virtual void  v1(); // _ZN7S4414C12v1Ev
  S4414C1(); // tgen
};
//SIG(1 S4414C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 Fp[2] Fi Fc} vd v1 Fi FC6{ m FC4 Fi[5]} FC7{ m Fp[2]} FC8{ m Fp Fi[2] FC5} FC9{ m Fp[2]}}


 S4414C1 ::~S4414C1(){ note_dtor("S4414C1", this);}
void  S4414C1 ::v1(){vfunc_called(this, "_ZN7S4414C12v1Ev");}
S4414C1 ::S4414C1(){ note_ctor("S4414C1", this);} // tgen

static void Test_S4414C1()
{
  extern Class_Descriptor cd_S4414C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,29)];
    init_test(&cd_S4414C1, buf);
    S4414C1 *dp, &lv = *(dp=new (buf) S4414C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,112), "sizeof(S4414C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4414C1)");
    check_base_class_offset(lv, (S4414C3*)(S4414C2*), 0, "S4414C1");
    check_base_class_offset(lv, (S4414C2*), 0, "S4414C1");
    check_field_offset(lv, s4414c1f0, ABISELECT(64,44), "S4414C1.s4414c1f0");
    check_field_offset(lv, s4414c1f1, ABISELECT(72,48), "S4414C1.s4414c1f1");
    check_field_offset(lv, s4414c1f2, ABISELECT(112,80), "S4414C1.s4414c1f2");
    check_field_offset(lv, s4414c1f3, ABISELECT(128,88), "S4414C1.s4414c1f3");
    check_field_offset(lv, s4414c1f4, ABISELECT(152,104), "S4414C1.s4414c1f4");
    test_class_info(&lv, &cd_S4414C1);
    dp->~S4414C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4414C1(Test_S4414C1, "S4414C1", ABISELECT(168,112));

#else // __cplusplus

extern void _ZN7S4414C1C1Ev();
extern void _ZN7S4414C1D1Ev();
Name_Map name_map_S4414C1[] = {
  NSPAIR(_ZN7S4414C1C1Ev),
  NSPAIR(_ZN7S4414C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4414C3;
extern VTBL_ENTRY _ZTI7S4414C3[];
extern  VTBL_ENTRY _ZTV7S4414C3[];
extern Class_Descriptor cd_S4414C2;
extern VTBL_ENTRY _ZTI7S4414C2[];
extern  VTBL_ENTRY _ZTV7S4414C2[];
static Base_Class bases_S4414C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4414C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4414C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4414C1[];
extern void _ZN7S4414C1D1Ev();
extern void _ZN7S4414C1D0Ev();
extern void _ZN7S4414C32v2Ev();
extern void _ZN7S4414C32v3Ev();
extern void _ZN7S4414C32v4Ev();
extern void _ZN7S4414C22v5Ev();
extern void _ZN7S4414C12v1Ev();
static  VTBL_ENTRY vtc_S4414C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4414C1[0]),
  (VTBL_ENTRY)&_ZN7S4414C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4414C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4414C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4414C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4414C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4414C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4414C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4414C1[];
extern  VTBL_ENTRY _ZTV7S4414C1[];
Class_Descriptor cd_S4414C1 = {  "S4414C1", // class name
  bases_S4414C1, 2,
  &(vtc_S4414C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,112), // object size
  NSPAIRA(_ZTI7S4414C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4414C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9901C6_nt  {
  char s9901c6f0[20];
};
//SIG(-1 S9901C6_nt) C1{ Fc[20]}



//skip512 S9901C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9901C5_nt  {
  ::S9901C6_nt s9901c5f0;
  char s9901c5f1[16];
};
//SIG(-1 S9901C5_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S9901C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9901C2  {
  void *s9901c2f0[3];
  ::S16113C5_nt s9901c2f1;
  ::S9901C5_nt s9901c2f2;
  int s9901c2f3;
  virtual  ~S9901C2(); // _ZN7S9901C2D1Ev
  virtual void  v5(); // _ZN7S9901C22v5Ev
  virtual void  v6(); // _ZN7S9901C22v6Ev
  virtual void  v7(); // _ZN7S9901C22v7Ev
  virtual void  v8(); // _ZN7S9901C22v8Ev
  virtual void  v9(); // _ZN7S9901C22v9Ev
  virtual void  v10(); // _ZN7S9901C23v10Ev
  virtual void  v11(); // _ZN7S9901C23v11Ev
  virtual void  v12(); // _ZN7S9901C23v12Ev
  S9901C2(); // tgen
};
//SIG(-1 S9901C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[3] FC2{ m Fp Fi FC3{ m}} FC4{ FC5{ Fc[20]} Fc[16]} Fi}


 S9901C2 ::~S9901C2(){ note_dtor("S9901C2", this);}
void  S9901C2 ::v5(){vfunc_called(this, "_ZN7S9901C22v5Ev");}
void  S9901C2 ::v6(){vfunc_called(this, "_ZN7S9901C22v6Ev");}
void  S9901C2 ::v7(){vfunc_called(this, "_ZN7S9901C22v7Ev");}
void  S9901C2 ::v8(){vfunc_called(this, "_ZN7S9901C22v8Ev");}
void  S9901C2 ::v9(){vfunc_called(this, "_ZN7S9901C22v9Ev");}
void  S9901C2 ::v10(){vfunc_called(this, "_ZN7S9901C23v10Ev");}
void  S9901C2 ::v11(){vfunc_called(this, "_ZN7S9901C23v11Ev");}
void  S9901C2 ::v12(){vfunc_called(this, "_ZN7S9901C23v12Ev");}
S9901C2 ::S9901C2(){ note_ctor("S9901C2", this);} // tgen

static void Test_S9901C2()
{
  extern Class_Descriptor cd_S9901C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,18)];
    init_test(&cd_S9901C2, buf);
    S9901C2 *dp, &lv = *(dp=new (buf) S9901C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,68), "sizeof(S9901C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9901C2)");
    check_field_offset(lv, s9901c2f0, ABISELECT(8,4), "S9901C2.s9901c2f0");
    check_field_offset(lv, s9901c2f1, ABISELECT(32,16), "S9901C2.s9901c2f1");
    check_field_offset(lv, s9901c2f2, ABISELECT(48,28), "S9901C2.s9901c2f2");
    check_field_offset(lv, s9901c2f3, ABISELECT(84,64), "S9901C2.s9901c2f3");
    test_class_info(&lv, &cd_S9901C2);
    dp->~S9901C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9901C2(Test_S9901C2, "S9901C2", ABISELECT(88,68));

#else // __cplusplus

extern void _ZN7S9901C2C1Ev();
extern void _ZN7S9901C2D1Ev();
Name_Map name_map_S9901C2[] = {
  NSPAIR(_ZN7S9901C2C1Ev),
  NSPAIR(_ZN7S9901C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9901C2[];
extern void _ZN7S9901C2D1Ev();
extern void _ZN7S9901C2D0Ev();
extern void _ZN7S9901C22v5Ev();
extern void _ZN7S9901C22v6Ev();
extern void _ZN7S9901C22v7Ev();
extern void _ZN7S9901C22v8Ev();
extern void _ZN7S9901C22v9Ev();
extern void _ZN7S9901C23v10Ev();
extern void _ZN7S9901C23v11Ev();
extern void _ZN7S9901C23v12Ev();
static  VTBL_ENTRY vtc_S9901C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9901C2[0]),
  (VTBL_ENTRY)&_ZN7S9901C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9901C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9901C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9901C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9901C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9901C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9901C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9901C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9901C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9901C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S9901C2[];
extern  VTBL_ENTRY _ZTV7S9901C2[];
Class_Descriptor cd_S9901C2 = {  "S9901C2", // class name
  0,0,//no base classes
  &(vtc_S9901C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,68), // object size
  NSPAIRA(_ZTI7S9901C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9901C2),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9901C7_nt  {
  ::S4206C36_nt s9901c7f0;
  void *s9901c7f1[2];
  void  mf9901c7(); // _ZN10S9901C7_nt8mf9901c7Ev
};
//SIG(-1 S9901C7_nt) C1{ m FC2{ m Fp Fi[2] FC3{ m}} Fp[2]}


void  S9901C7_nt ::mf9901c7(){}

//skip512 S9901C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9901C1  : S9901C2 {
  ::S9901C7_nt s9901c1f0;
  char s9901c1f1;
  virtual  ~S9901C1(); // _ZN7S9901C1D1Ev
  virtual void  v1(); // _ZN7S9901C12v1Ev
  virtual void  v2(); // _ZN7S9901C12v2Ev
  virtual void  v3(); // _ZN7S9901C12v3Ev
  virtual void  v4(); // _ZN7S9901C12v4Ev
  S9901C1(); // tgen
};
//SIG(1 S9901C1) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 Fp[3] FC3{ m Fp Fi FC4{ m}} FC5{ FC6{ Fc[20]} Fc[16]} Fi} vd v1 v2 v3 v4 FC7{ m FC8{ m Fp Fi[2] FC4} Fp[2]} Fc}


 S9901C1 ::~S9901C1(){ note_dtor("S9901C1", this);}
void  S9901C1 ::v1(){vfunc_called(this, "_ZN7S9901C12v1Ev");}
void  S9901C1 ::v2(){vfunc_called(this, "_ZN7S9901C12v2Ev");}
void  S9901C1 ::v3(){vfunc_called(this, "_ZN7S9901C12v3Ev");}
void  S9901C1 ::v4(){vfunc_called(this, "_ZN7S9901C12v4Ev");}
S9901C1 ::S9901C1(){ note_ctor("S9901C1", this);} // tgen

static void Test_S9901C1()
{
  extern Class_Descriptor cd_S9901C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,25)];
    init_test(&cd_S9901C1, buf);
    S9901C1 *dp, &lv = *(dp=new (buf) S9901C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,96), "sizeof(S9901C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9901C1)");
    check_base_class_offset(lv, (S9901C2*), 0, "S9901C1");
    check_field_offset(lv, s9901c1f0, ABISELECT(88,68), "S9901C1.s9901c1f0");
    check_field_offset(lv, s9901c1f1, ABISELECT(128,92), "S9901C1.s9901c1f1");
    test_class_info(&lv, &cd_S9901C1);
    dp->~S9901C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9901C1(Test_S9901C1, "S9901C1", ABISELECT(136,96));

#else // __cplusplus

extern void _ZN7S9901C1C1Ev();
extern void _ZN7S9901C1D1Ev();
Name_Map name_map_S9901C1[] = {
  NSPAIR(_ZN7S9901C1C1Ev),
  NSPAIR(_ZN7S9901C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9901C2;
extern VTBL_ENTRY _ZTI7S9901C2[];
extern  VTBL_ENTRY _ZTV7S9901C2[];
static Base_Class bases_S9901C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9901C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9901C1[];
extern void _ZN7S9901C1D1Ev();
extern void _ZN7S9901C1D0Ev();
extern void _ZN7S9901C22v5Ev();
extern void _ZN7S9901C22v6Ev();
extern void _ZN7S9901C22v7Ev();
extern void _ZN7S9901C22v8Ev();
extern void _ZN7S9901C22v9Ev();
extern void _ZN7S9901C23v10Ev();
extern void _ZN7S9901C23v11Ev();
extern void _ZN7S9901C23v12Ev();
extern void _ZN7S9901C12v1Ev();
extern void _ZN7S9901C12v2Ev();
extern void _ZN7S9901C12v3Ev();
extern void _ZN7S9901C12v4Ev();
static  VTBL_ENTRY vtc_S9901C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9901C1[0]),
  (VTBL_ENTRY)&_ZN7S9901C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9901C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9901C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9901C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9901C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9901C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9901C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9901C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9901C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9901C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9901C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9901C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9901C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9901C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9901C1[];
extern  VTBL_ENTRY _ZTV7S9901C1[];
Class_Descriptor cd_S9901C1 = {  "S9901C1", // class name
  bases_S9901C1, 1,
  &(vtc_S9901C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,96), // object size
  NSPAIRA(_ZTI7S9901C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9901C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14707C2_nt  {
  int s14707c2f0[11];
};
//SIG(-1 S14707C2_nt) C1{ Fi[11]}



//skip512 S14707C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14707C3_nt  {
  void *s14707c3f0;
  int s14707c3f1;
};
//SIG(-1 S14707C3_nt) C1{ Fp Fi}



//skip512 S14707C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14707C1  {
  void *s14707c1f0[5];
  long s14707c1f1;
  void *s14707c1f2[2];
  int s14707c1f3;
  long s14707c1f4;
  void *s14707c1f5[3];
  ::S14707C2_nt s14707c1f6;
  int s14707c1f7;
  void *s14707c1f8[7];
  ::S14707C3_nt s14707c1f9;
  void *s14707c1f10[7];
  long s14707c1f11[3];
  void *s14707c1f12;
  int s14707c1f13;
  void *s14707c1f14[2];
  int s14707c1f15[2];
  char s14707c1f16[32];
  void *s14707c1f17[3];
  int s14707c1f18[2];
  void *s14707c1f19[3];
  char s14707c1f20[48];
  void *s14707c1f21[8];
  int s14707c1f22;
  void *s14707c1f23[7];
};
//SIG(1 S14707C1) C1{ Fp[5] Fl Fp[2] Fi Fl Fp[3] FC2{ Fi[11]} Fi Fp[7] FC3{ Fp Fi} Fp[7] Fl[3] Fp Fi Fp[2] Fi[2] Fc[32] Fp[3] Fi[2] Fp[3] Fc[48] Fp[8] Fi Fp[7]}



static void Test_S14707C1()
{
  {
    init_simple_test("S14707C1");
    S14707C1 lv;
    check2(sizeof(lv), ABISELECT(608,376), "sizeof(S14707C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14707C1)");
    check_field_offset(lv, s14707c1f0, 0, "S14707C1.s14707c1f0");
    check_field_offset(lv, s14707c1f1, ABISELECT(40,20), "S14707C1.s14707c1f1");
    check_field_offset(lv, s14707c1f2, ABISELECT(48,24), "S14707C1.s14707c1f2");
    check_field_offset(lv, s14707c1f3, ABISELECT(64,32), "S14707C1.s14707c1f3");
    check_field_offset(lv, s14707c1f4, ABISELECT(72,36), "S14707C1.s14707c1f4");
    check_field_offset(lv, s14707c1f5, ABISELECT(80,40), "S14707C1.s14707c1f5");
    check_field_offset(lv, s14707c1f6, ABISELECT(104,52), "S14707C1.s14707c1f6");
    check_field_offset(lv, s14707c1f7, ABISELECT(148,96), "S14707C1.s14707c1f7");
    check_field_offset(lv, s14707c1f8, ABISELECT(152,100), "S14707C1.s14707c1f8");
    check_field_offset(lv, s14707c1f9, ABISELECT(208,128), "S14707C1.s14707c1f9");
    check_field_offset(lv, s14707c1f10, ABISELECT(224,136), "S14707C1.s14707c1f10");
    check_field_offset(lv, s14707c1f11, ABISELECT(280,164), "S14707C1.s14707c1f11");
    check_field_offset(lv, s14707c1f12, ABISELECT(304,176), "S14707C1.s14707c1f12");
    check_field_offset(lv, s14707c1f13, ABISELECT(312,180), "S14707C1.s14707c1f13");
    check_field_offset(lv, s14707c1f14, ABISELECT(320,184), "S14707C1.s14707c1f14");
    check_field_offset(lv, s14707c1f15, ABISELECT(336,192), "S14707C1.s14707c1f15");
    check_field_offset(lv, s14707c1f16, ABISELECT(344,200), "S14707C1.s14707c1f16");
    check_field_offset(lv, s14707c1f17, ABISELECT(376,232), "S14707C1.s14707c1f17");
    check_field_offset(lv, s14707c1f18, ABISELECT(400,244), "S14707C1.s14707c1f18");
    check_field_offset(lv, s14707c1f19, ABISELECT(408,252), "S14707C1.s14707c1f19");
    check_field_offset(lv, s14707c1f20, ABISELECT(432,264), "S14707C1.s14707c1f20");
    check_field_offset(lv, s14707c1f21, ABISELECT(480,312), "S14707C1.s14707c1f21");
    check_field_offset(lv, s14707c1f22, ABISELECT(544,344), "S14707C1.s14707c1f22");
    check_field_offset(lv, s14707c1f23, ABISELECT(552,348), "S14707C1.s14707c1f23");
  }
}
static Arrange_To_Call_Me vS14707C1(Test_S14707C1, "S14707C1", ABISELECT(608,376));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5795C3  {
  int s5795c3f0;
  char s5795c3f1;
  long s5795c3f2;
  __tsi64 s5795c3f3;
  long s5795c3f4[4];
  long double s5795c3f5[4];
  short s5795c3f6[4];
  void *s5795c3f7[2];
  ::S6469C3_nt s5795c3f8;
  int s5795c3f9[2];
  void  mf5795c3(); // _ZN7S5795C38mf5795c3Ev
};
//SIG(-1 S5795C3) C1{ m Fi Fc Fl FL Fl[4] FD[4] Fs[4] Fp[2] FC2{ m Fi[2]} Fi[2]}


void  S5795C3 ::mf5795c3(){}

static void Test_S5795C3()
{
  {
    init_simple_test("S5795C3");
    S5795C3 lv;
    check2(sizeof(lv), ABISELECT(176,116), "sizeof(S5795C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5795C3)");
    check_field_offset(lv, s5795c3f0, 0, "S5795C3.s5795c3f0");
    check_field_offset(lv, s5795c3f1, 4, "S5795C3.s5795c3f1");
    check_field_offset(lv, s5795c3f2, 8, "S5795C3.s5795c3f2");
    check_field_offset(lv, s5795c3f3, ABISELECT(16,12), "S5795C3.s5795c3f3");
    check_field_offset(lv, s5795c3f4, ABISELECT(24,20), "S5795C3.s5795c3f4");
    check_field_offset(lv, s5795c3f5, ABISELECT(64,36), "S5795C3.s5795c3f5");
    check_field_offset(lv, s5795c3f6, ABISELECT(128,84), "S5795C3.s5795c3f6");
    check_field_offset(lv, s5795c3f7, ABISELECT(136,92), "S5795C3.s5795c3f7");
    check_field_offset(lv, s5795c3f8, ABISELECT(152,100), "S5795C3.s5795c3f8");
    check_field_offset(lv, s5795c3f9, ABISELECT(160,108), "S5795C3.s5795c3f9");
  }
}
static Arrange_To_Call_Me vS5795C3(Test_S5795C3, "S5795C3", ABISELECT(176,116));

#else // __cplusplus

Class_Descriptor cd_S5795C3 = {  "S5795C3", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(176,116), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5795C2  {
  int s5795c2f0[2];
  void *s5795c2f1;
  char s5795c2f2;
  long double s5795c2f3[3];
  long s5795c2f4;
  void *s5795c2f5;
  int s5795c2f6;
  void *s5795c2f7;
  int s5795c2f8;
  __tsi64 s5795c2f9;
  ::S5795C3 s5795c2f10;
  char s5795c2f11;
  void *s5795c2f12;
  __tsi64 s5795c2f13;
  ::S5795C3 s5795c2f14;
  long double s5795c2f15[3];
  long s5795c2f16;
  int s5795c2f17[2];
  void  mf5795c2(); // _ZN7S5795C28mf5795c2Ev
};
//SIG(-1 S5795C2) C1{ m Fi[2] Fp Fc FD[3] Fl Fp Fi Fp Fi FL FC2{ m Fi Fc Fl FL Fl[4] FD[4] Fs[4] Fp[2] FC3{ m Fi[2]} Fi[2]} Fc Fp FL FC2 FD[3] Fl Fi[2]}


void  S5795C2 ::mf5795c2(){}

static void Test_S5795C2()
{
  {
    init_simple_test("S5795C2");
    S5795C2 lv;
    check2(sizeof(lv), ABISELECT(576,376), "sizeof(S5795C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5795C2)");
    check_field_offset(lv, s5795c2f0, 0, "S5795C2.s5795c2f0");
    check_field_offset(lv, s5795c2f1, 8, "S5795C2.s5795c2f1");
    check_field_offset(lv, s5795c2f2, ABISELECT(16,12), "S5795C2.s5795c2f2");
    check_field_offset(lv, s5795c2f3, ABISELECT(32,16), "S5795C2.s5795c2f3");
    check_field_offset(lv, s5795c2f4, ABISELECT(80,52), "S5795C2.s5795c2f4");
    check_field_offset(lv, s5795c2f5, ABISELECT(88,56), "S5795C2.s5795c2f5");
    check_field_offset(lv, s5795c2f6, ABISELECT(96,60), "S5795C2.s5795c2f6");
    check_field_offset(lv, s5795c2f7, ABISELECT(104,64), "S5795C2.s5795c2f7");
    check_field_offset(lv, s5795c2f8, ABISELECT(112,68), "S5795C2.s5795c2f8");
    check_field_offset(lv, s5795c2f9, ABISELECT(120,72), "S5795C2.s5795c2f9");
    check_field_offset(lv, s5795c2f10, ABISELECT(128,80), "S5795C2.s5795c2f10");
    check_field_offset(lv, s5795c2f11, ABISELECT(304,196), "S5795C2.s5795c2f11");
    check_field_offset(lv, s5795c2f12, ABISELECT(312,200), "S5795C2.s5795c2f12");
    check_field_offset(lv, s5795c2f13, ABISELECT(320,204), "S5795C2.s5795c2f13");
    check_field_offset(lv, s5795c2f14, ABISELECT(336,212), "S5795C2.s5795c2f14");
    check_field_offset(lv, s5795c2f15, ABISELECT(512,328), "S5795C2.s5795c2f15");
    check_field_offset(lv, s5795c2f16, ABISELECT(560,364), "S5795C2.s5795c2f16");
    check_field_offset(lv, s5795c2f17, ABISELECT(568,368), "S5795C2.s5795c2f17");
  }
}
static Arrange_To_Call_Me vS5795C2(Test_S5795C2, "S5795C2", ABISELECT(576,376));

#else // __cplusplus

Class_Descriptor cd_S5795C2 = {  "S5795C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(576,376), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5795C1  : S5795C2 {
};
//SIG(1 S5795C1) C1{ BC2{ m Fi[2] Fp Fc FD[3] Fl Fp Fi Fp Fi FL FC3{ m Fi Fc Fl FL Fl[4] FD[4] Fs[4] Fp[2] FC4{ m Fi[2]} Fi[2]} Fc Fp FL FC3 FD[3] Fl Fi[2]}}



static void Test_S5795C1()
{
  extern Class_Descriptor cd_S5795C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,95)];
    init_test(&cd_S5795C1, buf);
    S5795C1 &lv = *(new (buf) S5795C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,376), "sizeof(S5795C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5795C1)");
    check_base_class_offset(lv, (S5795C2*), 0, "S5795C1");
    test_class_info(&lv, &cd_S5795C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5795C1(Test_S5795C1, "S5795C1", ABISELECT(576,376));

#else // __cplusplus

extern Class_Descriptor cd_S5795C2;
static Base_Class bases_S5795C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5795C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5795C1 = {  "S5795C1", // class name
  bases_S5795C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(576,376), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4410C3  {
  ::S16113C5_nt s4410c3f0;
  int s4410c3f1[2];
  char s4410c3f2;
  virtual  ~S4410C3(); // _ZN7S4410C3D1Ev
  virtual void  v2(); // _ZN7S4410C32v2Ev
  virtual void  v3(); // _ZN7S4410C32v3Ev
  virtual void  v4(); // _ZN7S4410C32v4Ev
  S4410C3(); // tgen
};
//SIG(-1 S4410C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4410C3 ::~S4410C3(){ note_dtor("S4410C3", this);}
void  S4410C3 ::v2(){vfunc_called(this, "_ZN7S4410C32v2Ev");}
void  S4410C3 ::v3(){vfunc_called(this, "_ZN7S4410C32v3Ev");}
void  S4410C3 ::v4(){vfunc_called(this, "_ZN7S4410C32v4Ev");}
S4410C3 ::S4410C3(){ note_ctor("S4410C3", this);} // tgen

static void Test_S4410C3()
{
  extern Class_Descriptor cd_S4410C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4410C3, buf);
    S4410C3 *dp, &lv = *(dp=new (buf) S4410C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4410C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4410C3)");
    check_field_offset(lv, s4410c3f0, ABISELECT(8,4), "S4410C3.s4410c3f0");
    check_field_offset(lv, s4410c3f1, ABISELECT(24,16), "S4410C3.s4410c3f1");
    check_field_offset(lv, s4410c3f2, ABISELECT(32,24), "S4410C3.s4410c3f2");
    test_class_info(&lv, &cd_S4410C3);
    dp->~S4410C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4410C3(Test_S4410C3, "S4410C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4410C3C1Ev();
extern void _ZN7S4410C3D1Ev();
Name_Map name_map_S4410C3[] = {
  NSPAIR(_ZN7S4410C3C1Ev),
  NSPAIR(_ZN7S4410C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4410C3[];
extern void _ZN7S4410C3D1Ev();
extern void _ZN7S4410C3D0Ev();
extern void _ZN7S4410C32v2Ev();
extern void _ZN7S4410C32v3Ev();
extern void _ZN7S4410C32v4Ev();
static  VTBL_ENTRY vtc_S4410C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4410C3[0]),
  (VTBL_ENTRY)&_ZN7S4410C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4410C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4410C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4410C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4410C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4410C3[];
extern  VTBL_ENTRY _ZTV7S4410C3[];
Class_Descriptor cd_S4410C3 = {  "S4410C3", // class name
  0,0,//no base classes
  &(vtc_S4410C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4410C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4410C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4410C2  : S4410C3 {
  void *s4410c2f0[2];
  int s4410c2f1;
  char s4410c2f2;
  virtual  ~S4410C2(); // _ZN7S4410C2D1Ev
  virtual void  v5(); // _ZN7S4410C22v5Ev
  S4410C2(); // tgen
};
//SIG(-1 S4410C2) C1{ BC2{ vd v2 v3 v4 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 Fp[2] Fi Fc}


 S4410C2 ::~S4410C2(){ note_dtor("S4410C2", this);}
void  S4410C2 ::v5(){vfunc_called(this, "_ZN7S4410C22v5Ev");}
S4410C2 ::S4410C2(){ note_ctor("S4410C2", this);} // tgen

static void Test_S4410C2()
{
  extern Class_Descriptor cd_S4410C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4410C2, buf);
    S4410C2 *dp, &lv = *(dp=new (buf) S4410C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4410C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4410C2)");
    check_base_class_offset(lv, (S4410C3*), 0, "S4410C2");
    check_field_offset(lv, s4410c2f0, ABISELECT(40,28), "S4410C2.s4410c2f0");
    check_field_offset(lv, s4410c2f1, ABISELECT(56,36), "S4410C2.s4410c2f1");
    check_field_offset(lv, s4410c2f2, ABISELECT(60,40), "S4410C2.s4410c2f2");
    test_class_info(&lv, &cd_S4410C2);
    dp->~S4410C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4410C2(Test_S4410C2, "S4410C2", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4410C2C1Ev();
extern void _ZN7S4410C2D1Ev();
Name_Map name_map_S4410C2[] = {
  NSPAIR(_ZN7S4410C2C1Ev),
  NSPAIR(_ZN7S4410C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4410C3;
extern VTBL_ENTRY _ZTI7S4410C3[];
extern  VTBL_ENTRY _ZTV7S4410C3[];
static Base_Class bases_S4410C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4410C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4410C2[];
extern void _ZN7S4410C2D1Ev();
extern void _ZN7S4410C2D0Ev();
extern void _ZN7S4410C32v2Ev();
extern void _ZN7S4410C32v3Ev();
extern void _ZN7S4410C32v4Ev();
extern void _ZN7S4410C22v5Ev();
static  VTBL_ENTRY vtc_S4410C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4410C2[0]),
  (VTBL_ENTRY)&_ZN7S4410C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4410C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4410C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4410C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4410C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4410C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4410C2[];
extern  VTBL_ENTRY _ZTV7S4410C2[];
Class_Descriptor cd_S4410C2 = {  "S4410C2", // class name
  bases_S4410C2, 1,
  &(vtc_S4410C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4410C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4410C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4410C1  : S4410C2 {
  ::S4206C36_nt s4410c1f0;
  ::S4206C36_nt s4410c1f1;
  ::S4206C36_nt s4410c1f2;
  ::S4206C36_nt s4410c1f3;
  ::S2440C37 s4410c1f4;
  void *s4410c1f5;
  virtual  ~S4410C1(); // _ZN7S4410C1D1Ev
  virtual void  v1(); // _ZN7S4410C12v1Ev
  S4410C1(); // tgen
};
//SIG(1 S4410C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 Fp[2] Fi Fc} vd v1 FC6{ m Fp Fi[2] FC5} FC6 FC6 FC6 FC7{ m Fp Fi[2] FC5} Fp}


 S4410C1 ::~S4410C1(){ note_dtor("S4410C1", this);}
void  S4410C1 ::v1(){vfunc_called(this, "_ZN7S4410C12v1Ev");}
S4410C1 ::S4410C1(){ note_ctor("S4410C1", this);} // tgen

static void Test_S4410C1()
{
  extern Class_Descriptor cd_S4410C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,33)];
    init_test(&cd_S4410C1, buf);
    S4410C1 *dp, &lv = *(dp=new (buf) S4410C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S4410C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4410C1)");
    check_base_class_offset(lv, (S4410C3*)(S4410C2*), 0, "S4410C1");
    check_base_class_offset(lv, (S4410C2*), 0, "S4410C1");
    check_field_offset(lv, s4410c1f0, ABISELECT(64,44), "S4410C1.s4410c1f0");
    check_field_offset(lv, s4410c1f1, ABISELECT(88,60), "S4410C1.s4410c1f1");
    check_field_offset(lv, s4410c1f2, ABISELECT(112,76), "S4410C1.s4410c1f2");
    check_field_offset(lv, s4410c1f3, ABISELECT(136,92), "S4410C1.s4410c1f3");
    check_field_offset(lv, s4410c1f4, ABISELECT(160,108), "S4410C1.s4410c1f4");
    check_field_offset(lv, s4410c1f5, ABISELECT(184,124), "S4410C1.s4410c1f5");
    test_class_info(&lv, &cd_S4410C1);
    dp->~S4410C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4410C1(Test_S4410C1, "S4410C1", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN7S4410C1C1Ev();
extern void _ZN7S4410C1D1Ev();
Name_Map name_map_S4410C1[] = {
  NSPAIR(_ZN7S4410C1C1Ev),
  NSPAIR(_ZN7S4410C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4410C3;
extern VTBL_ENTRY _ZTI7S4410C3[];
extern  VTBL_ENTRY _ZTV7S4410C3[];
extern Class_Descriptor cd_S4410C2;
extern VTBL_ENTRY _ZTI7S4410C2[];
extern  VTBL_ENTRY _ZTV7S4410C2[];
static Base_Class bases_S4410C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4410C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4410C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4410C1[];
extern void _ZN7S4410C1D1Ev();
extern void _ZN7S4410C1D0Ev();
extern void _ZN7S4410C32v2Ev();
extern void _ZN7S4410C32v3Ev();
extern void _ZN7S4410C32v4Ev();
extern void _ZN7S4410C22v5Ev();
extern void _ZN7S4410C12v1Ev();
static  VTBL_ENTRY vtc_S4410C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4410C1[0]),
  (VTBL_ENTRY)&_ZN7S4410C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4410C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4410C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4410C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4410C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4410C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4410C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4410C1[];
extern  VTBL_ENTRY _ZTV7S4410C1[];
Class_Descriptor cd_S4410C1 = {  "S4410C1", // class name
  bases_S4410C1, 2,
  &(vtc_S4410C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI7S4410C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4410C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5735C2  {
  int s5735c2f0;
  char s5735c2f1;
  void *s5735c2f2;
  int s5735c2f3;
  __tsi64 s5735c2f4;
  ::S5795C3 s5735c2f5;
  char s5735c2f6;
  void *s5735c2f7;
  __tsi64 s5735c2f8;
  ::S5795C3 s5735c2f9;
  int s5735c2f10;
  long double s5735c2f11[3];
  int s5735c2f12;
  long double s5735c2f13[3];
  void *s5735c2f14;
  long s5735c2f15;
  void *s5735c2f16;
  long s5735c2f17;
  int s5735c2f18[2];
  void  mf5735c2(); // _ZN7S5735C28mf5735c2Ev
};
//SIG(-1 S5735C2) C1{ m Fi Fc Fp Fi FL FC2{ m Fi Fc Fl FL Fl[4] FD[4] Fs[4] Fp[2] FC3{ m Fi[2]} Fi[2]} Fc Fp FL FC2 Fi FD[3] Fi FD[3] Fp Fl Fp Fl Fi[2]}


void  S5735C2 ::mf5735c2(){}

static void Test_S5735C2()
{
  {
    init_simple_test("S5735C2");
    S5735C2 lv;
    check2(sizeof(lv), ABISELECT(592,376), "sizeof(S5735C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5735C2)");
    check_field_offset(lv, s5735c2f0, 0, "S5735C2.s5735c2f0");
    check_field_offset(lv, s5735c2f1, 4, "S5735C2.s5735c2f1");
    check_field_offset(lv, s5735c2f2, 8, "S5735C2.s5735c2f2");
    check_field_offset(lv, s5735c2f3, ABISELECT(16,12), "S5735C2.s5735c2f3");
    check_field_offset(lv, s5735c2f4, ABISELECT(24,16), "S5735C2.s5735c2f4");
    check_field_offset(lv, s5735c2f5, ABISELECT(32,24), "S5735C2.s5735c2f5");
    check_field_offset(lv, s5735c2f6, ABISELECT(208,140), "S5735C2.s5735c2f6");
    check_field_offset(lv, s5735c2f7, ABISELECT(216,144), "S5735C2.s5735c2f7");
    check_field_offset(lv, s5735c2f8, ABISELECT(224,148), "S5735C2.s5735c2f8");
    check_field_offset(lv, s5735c2f9, ABISELECT(240,156), "S5735C2.s5735c2f9");
    check_field_offset(lv, s5735c2f10, ABISELECT(416,272), "S5735C2.s5735c2f10");
    check_field_offset(lv, s5735c2f11, ABISELECT(432,276), "S5735C2.s5735c2f11");
    check_field_offset(lv, s5735c2f12, ABISELECT(480,312), "S5735C2.s5735c2f12");
    check_field_offset(lv, s5735c2f13, ABISELECT(496,316), "S5735C2.s5735c2f13");
    check_field_offset(lv, s5735c2f14, ABISELECT(544,352), "S5735C2.s5735c2f14");
    check_field_offset(lv, s5735c2f15, ABISELECT(552,356), "S5735C2.s5735c2f15");
    check_field_offset(lv, s5735c2f16, ABISELECT(560,360), "S5735C2.s5735c2f16");
    check_field_offset(lv, s5735c2f17, ABISELECT(568,364), "S5735C2.s5735c2f17");
    check_field_offset(lv, s5735c2f18, ABISELECT(576,368), "S5735C2.s5735c2f18");
  }
}
static Arrange_To_Call_Me vS5735C2(Test_S5735C2, "S5735C2", ABISELECT(592,376));

#else // __cplusplus

Class_Descriptor cd_S5735C2 = {  "S5735C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(592,376), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5735C1  : S5735C2 {
};
//SIG(1 S5735C1) C1{ BC2{ m Fi Fc Fp Fi FL FC3{ m Fi Fc Fl FL Fl[4] FD[4] Fs[4] Fp[2] FC4{ m Fi[2]} Fi[2]} Fc Fp FL FC3 Fi FD[3] Fi FD[3] Fp Fl Fp Fl Fi[2]}}



static void Test_S5735C1()
{
  extern Class_Descriptor cd_S5735C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(38,95)];
    init_test(&cd_S5735C1, buf);
    S5735C1 &lv = *(new (buf) S5735C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(592,376), "sizeof(S5735C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5735C1)");
    check_base_class_offset(lv, (S5735C2*), 0, "S5735C1");
    test_class_info(&lv, &cd_S5735C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5735C1(Test_S5735C1, "S5735C1", ABISELECT(592,376));

#else // __cplusplus

extern Class_Descriptor cd_S5735C2;
static Base_Class bases_S5735C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5735C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5735C1 = {  "S5735C1", // class name
  bases_S5735C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(592,376), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9473C2  {
  void *s9473c2f0[3];
  ::S16113C5_nt s9473c2f1;
  ::S9901C5_nt s9473c2f2;
  int s9473c2f3;
  virtual  ~S9473C2(); // _ZN7S9473C2D1Ev
  virtual void  v3(); // _ZN7S9473C22v3Ev
  virtual void  v4(); // _ZN7S9473C22v4Ev
  virtual void  v5(); // _ZN7S9473C22v5Ev
  virtual void  v6(); // _ZN7S9473C22v6Ev
  virtual void  v7(); // _ZN7S9473C22v7Ev
  virtual void  v8(); // _ZN7S9473C22v8Ev
  virtual void  v9(); // _ZN7S9473C22v9Ev
  virtual void  v10(); // _ZN7S9473C23v10Ev
  S9473C2(); // tgen
};
//SIG(-1 S9473C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[3] FC2{ m Fp Fi FC3{ m}} FC4{ FC5{ Fc[20]} Fc[16]} Fi}


 S9473C2 ::~S9473C2(){ note_dtor("S9473C2", this);}
void  S9473C2 ::v3(){vfunc_called(this, "_ZN7S9473C22v3Ev");}
void  S9473C2 ::v4(){vfunc_called(this, "_ZN7S9473C22v4Ev");}
void  S9473C2 ::v5(){vfunc_called(this, "_ZN7S9473C22v5Ev");}
void  S9473C2 ::v6(){vfunc_called(this, "_ZN7S9473C22v6Ev");}
void  S9473C2 ::v7(){vfunc_called(this, "_ZN7S9473C22v7Ev");}
void  S9473C2 ::v8(){vfunc_called(this, "_ZN7S9473C22v8Ev");}
void  S9473C2 ::v9(){vfunc_called(this, "_ZN7S9473C22v9Ev");}
void  S9473C2 ::v10(){vfunc_called(this, "_ZN7S9473C23v10Ev");}
S9473C2 ::S9473C2(){ note_ctor("S9473C2", this);} // tgen

static void Test_S9473C2()
{
  extern Class_Descriptor cd_S9473C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,18)];
    init_test(&cd_S9473C2, buf);
    S9473C2 *dp, &lv = *(dp=new (buf) S9473C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,68), "sizeof(S9473C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9473C2)");
    check_field_offset(lv, s9473c2f0, ABISELECT(8,4), "S9473C2.s9473c2f0");
    check_field_offset(lv, s9473c2f1, ABISELECT(32,16), "S9473C2.s9473c2f1");
    check_field_offset(lv, s9473c2f2, ABISELECT(48,28), "S9473C2.s9473c2f2");
    check_field_offset(lv, s9473c2f3, ABISELECT(84,64), "S9473C2.s9473c2f3");
    test_class_info(&lv, &cd_S9473C2);
    dp->~S9473C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9473C2(Test_S9473C2, "S9473C2", ABISELECT(88,68));

#else // __cplusplus

extern void _ZN7S9473C2C1Ev();
extern void _ZN7S9473C2D1Ev();
Name_Map name_map_S9473C2[] = {
  NSPAIR(_ZN7S9473C2C1Ev),
  NSPAIR(_ZN7S9473C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9473C2[];
extern void _ZN7S9473C2D1Ev();
extern void _ZN7S9473C2D0Ev();
extern void _ZN7S9473C22v3Ev();
extern void _ZN7S9473C22v4Ev();
extern void _ZN7S9473C22v5Ev();
extern void _ZN7S9473C22v6Ev();
extern void _ZN7S9473C22v7Ev();
extern void _ZN7S9473C22v8Ev();
extern void _ZN7S9473C22v9Ev();
extern void _ZN7S9473C23v10Ev();
static  VTBL_ENTRY vtc_S9473C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9473C2[0]),
  (VTBL_ENTRY)&_ZN7S9473C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9473C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9473C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9473C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9473C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9473C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9473C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9473C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9473C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9473C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S9473C2[];
extern  VTBL_ENTRY _ZTV7S9473C2[];
Class_Descriptor cd_S9473C2 = {  "S9473C2", // class name
  0,0,//no base classes
  &(vtc_S9473C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,68), // object size
  NSPAIRA(_ZTI7S9473C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9473C2),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9473C1  : S9473C2 {
  ::S9901C7_nt s9473c1f0;
  int s9473c1f1[2];
  virtual  ~S9473C1(); // _ZN7S9473C1D1Ev
  virtual void  v1(); // _ZN7S9473C12v1Ev
  virtual void  v2(); // _ZN7S9473C12v2Ev
  S9473C1(); // tgen
};
//SIG(1 S9473C1) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 v9 v10 Fp[3] FC3{ m Fp Fi FC4{ m}} FC5{ FC6{ Fc[20]} Fc[16]} Fi} vd v1 v2 FC7{ m FC8{ m Fp Fi[2] FC4} Fp[2]} Fi[2]}


 S9473C1 ::~S9473C1(){ note_dtor("S9473C1", this);}
void  S9473C1 ::v1(){vfunc_called(this, "_ZN7S9473C12v1Ev");}
void  S9473C1 ::v2(){vfunc_called(this, "_ZN7S9473C12v2Ev");}
S9473C1 ::S9473C1(){ note_ctor("S9473C1", this);} // tgen

static void Test_S9473C1()
{
  extern Class_Descriptor cd_S9473C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,26)];
    init_test(&cd_S9473C1, buf);
    S9473C1 *dp, &lv = *(dp=new (buf) S9473C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,100), "sizeof(S9473C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9473C1)");
    check_base_class_offset(lv, (S9473C2*), 0, "S9473C1");
    check_field_offset(lv, s9473c1f0, ABISELECT(88,68), "S9473C1.s9473c1f0");
    check_field_offset(lv, s9473c1f1, ABISELECT(128,92), "S9473C1.s9473c1f1");
    test_class_info(&lv, &cd_S9473C1);
    dp->~S9473C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9473C1(Test_S9473C1, "S9473C1", ABISELECT(136,100));

#else // __cplusplus

extern void _ZN7S9473C1C1Ev();
extern void _ZN7S9473C1D1Ev();
Name_Map name_map_S9473C1[] = {
  NSPAIR(_ZN7S9473C1C1Ev),
  NSPAIR(_ZN7S9473C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9473C2;
extern VTBL_ENTRY _ZTI7S9473C2[];
extern  VTBL_ENTRY _ZTV7S9473C2[];
static Base_Class bases_S9473C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9473C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9473C1[];
extern void _ZN7S9473C1D1Ev();
extern void _ZN7S9473C1D0Ev();
extern void _ZN7S9473C22v3Ev();
extern void _ZN7S9473C22v4Ev();
extern void _ZN7S9473C22v5Ev();
extern void _ZN7S9473C22v6Ev();
extern void _ZN7S9473C22v7Ev();
extern void _ZN7S9473C22v8Ev();
extern void _ZN7S9473C22v9Ev();
extern void _ZN7S9473C23v10Ev();
extern void _ZN7S9473C12v1Ev();
extern void _ZN7S9473C12v2Ev();
static  VTBL_ENTRY vtc_S9473C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9473C1[0]),
  (VTBL_ENTRY)&_ZN7S9473C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9473C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9473C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9473C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9473C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9473C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9473C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9473C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9473C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9473C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9473C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9473C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9473C1[];
extern  VTBL_ENTRY _ZTV7S9473C1[];
Class_Descriptor cd_S9473C1 = {  "S9473C1", // class name
  bases_S9473C1, 1,
  &(vtc_S9473C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,100), // object size
  NSPAIRA(_ZTI7S9473C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9473C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9472C2  {
  void *s9472c2f0[3];
  ::S16113C5_nt s9472c2f1;
  ::S9901C5_nt s9472c2f2;
  int s9472c2f3;
  virtual  ~S9472C2(); // _ZN7S9472C2D1Ev
  virtual void  v3(); // _ZN7S9472C22v3Ev
  virtual void  v4(); // _ZN7S9472C22v4Ev
  virtual void  v5(); // _ZN7S9472C22v5Ev
  virtual void  v6(); // _ZN7S9472C22v6Ev
  virtual void  v7(); // _ZN7S9472C22v7Ev
  virtual void  v8(); // _ZN7S9472C22v8Ev
  virtual void  v9(); // _ZN7S9472C22v9Ev
  virtual void  v10(); // _ZN7S9472C23v10Ev
  S9472C2(); // tgen
};
//SIG(-1 S9472C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[3] FC2{ m Fp Fi FC3{ m}} FC4{ FC5{ Fc[20]} Fc[16]} Fi}


 S9472C2 ::~S9472C2(){ note_dtor("S9472C2", this);}
void  S9472C2 ::v3(){vfunc_called(this, "_ZN7S9472C22v3Ev");}
void  S9472C2 ::v4(){vfunc_called(this, "_ZN7S9472C22v4Ev");}
void  S9472C2 ::v5(){vfunc_called(this, "_ZN7S9472C22v5Ev");}
void  S9472C2 ::v6(){vfunc_called(this, "_ZN7S9472C22v6Ev");}
void  S9472C2 ::v7(){vfunc_called(this, "_ZN7S9472C22v7Ev");}
void  S9472C2 ::v8(){vfunc_called(this, "_ZN7S9472C22v8Ev");}
void  S9472C2 ::v9(){vfunc_called(this, "_ZN7S9472C22v9Ev");}
void  S9472C2 ::v10(){vfunc_called(this, "_ZN7S9472C23v10Ev");}
S9472C2 ::S9472C2(){ note_ctor("S9472C2", this);} // tgen

static void Test_S9472C2()
{
  extern Class_Descriptor cd_S9472C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,18)];
    init_test(&cd_S9472C2, buf);
    S9472C2 *dp, &lv = *(dp=new (buf) S9472C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,68), "sizeof(S9472C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9472C2)");
    check_field_offset(lv, s9472c2f0, ABISELECT(8,4), "S9472C2.s9472c2f0");
    check_field_offset(lv, s9472c2f1, ABISELECT(32,16), "S9472C2.s9472c2f1");
    check_field_offset(lv, s9472c2f2, ABISELECT(48,28), "S9472C2.s9472c2f2");
    check_field_offset(lv, s9472c2f3, ABISELECT(84,64), "S9472C2.s9472c2f3");
    test_class_info(&lv, &cd_S9472C2);
    dp->~S9472C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9472C2(Test_S9472C2, "S9472C2", ABISELECT(88,68));

#else // __cplusplus

extern void _ZN7S9472C2C1Ev();
extern void _ZN7S9472C2D1Ev();
Name_Map name_map_S9472C2[] = {
  NSPAIR(_ZN7S9472C2C1Ev),
  NSPAIR(_ZN7S9472C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9472C2[];
extern void _ZN7S9472C2D1Ev();
extern void _ZN7S9472C2D0Ev();
extern void _ZN7S9472C22v3Ev();
extern void _ZN7S9472C22v4Ev();
extern void _ZN7S9472C22v5Ev();
extern void _ZN7S9472C22v6Ev();
extern void _ZN7S9472C22v7Ev();
extern void _ZN7S9472C22v8Ev();
extern void _ZN7S9472C22v9Ev();
extern void _ZN7S9472C23v10Ev();
static  VTBL_ENTRY vtc_S9472C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9472C2[0]),
  (VTBL_ENTRY)&_ZN7S9472C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9472C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9472C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9472C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9472C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9472C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9472C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9472C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9472C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9472C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S9472C2[];
extern  VTBL_ENTRY _ZTV7S9472C2[];
Class_Descriptor cd_S9472C2 = {  "S9472C2", // class name
  0,0,//no base classes
  &(vtc_S9472C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,68), // object size
  NSPAIRA(_ZTI7S9472C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9472C2),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9472C7  {
  ::S2440C20_nt s9472c7f0;
  ::S16113C5_nt s9472c7f1;
  ::S16113C5_nt s9472c7f2;
  ::S16113C5_nt s9472c7f3;
  ::S16113C5_nt s9472c7f4;
};
//SIG(-1 S9472C7) C1{ FC2{ m Fp Fi FC3{ m}} FC4{ m Fp Fi FC5{ m}} FC4 FC4 FC4}



static void Test_S9472C7()
{
  {
    init_simple_test("S9472C7");
    S9472C7 lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S9472C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9472C7)");
    check_field_offset(lv, s9472c7f0, 0, "S9472C7.s9472c7f0");
    check_field_offset(lv, s9472c7f1, ABISELECT(16,12), "S9472C7.s9472c7f1");
    check_field_offset(lv, s9472c7f2, ABISELECT(32,24), "S9472C7.s9472c7f2");
    check_field_offset(lv, s9472c7f3, ABISELECT(48,36), "S9472C7.s9472c7f3");
    check_field_offset(lv, s9472c7f4, ABISELECT(64,48), "S9472C7.s9472c7f4");
  }
}
static Arrange_To_Call_Me vS9472C7(Test_S9472C7, "S9472C7", ABISELECT(80,60));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9472C1  : S9472C2 {
  ::S9472C7 s9472c1f0;
  virtual  ~S9472C1(); // _ZN7S9472C1D1Ev
  virtual void  v1(); // _ZN7S9472C12v1Ev
  virtual void  v2(); // _ZN7S9472C12v2Ev
  S9472C1(); // tgen
};
//SIG(1 S9472C1) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 v9 v10 Fp[3] FC3{ m Fp Fi FC4{ m}} FC5{ FC6{ Fc[20]} Fc[16]} Fi} vd v1 v2 FC7{ FC8{ m Fp Fi FC9{ m}} FC3 FC3 FC3 FC3}}


 S9472C1 ::~S9472C1(){ note_dtor("S9472C1", this);}
void  S9472C1 ::v1(){vfunc_called(this, "_ZN7S9472C12v1Ev");}
void  S9472C1 ::v2(){vfunc_called(this, "_ZN7S9472C12v2Ev");}
S9472C1 ::S9472C1(){ note_ctor("S9472C1", this);} // tgen

static void Test_S9472C1()
{
  extern Class_Descriptor cd_S9472C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,33)];
    init_test(&cd_S9472C1, buf);
    S9472C1 *dp, &lv = *(dp=new (buf) S9472C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,128), "sizeof(S9472C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9472C1)");
    check_base_class_offset(lv, (S9472C2*), 0, "S9472C1");
    check_field_offset(lv, s9472c1f0, ABISELECT(88,68), "S9472C1.s9472c1f0");
    test_class_info(&lv, &cd_S9472C1);
    dp->~S9472C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9472C1(Test_S9472C1, "S9472C1", ABISELECT(168,128));

#else // __cplusplus

extern void _ZN7S9472C1C1Ev();
extern void _ZN7S9472C1D1Ev();
Name_Map name_map_S9472C1[] = {
  NSPAIR(_ZN7S9472C1C1Ev),
  NSPAIR(_ZN7S9472C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9472C2;
extern VTBL_ENTRY _ZTI7S9472C2[];
extern  VTBL_ENTRY _ZTV7S9472C2[];
static Base_Class bases_S9472C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9472C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9472C1[];
extern void _ZN7S9472C1D1Ev();
extern void _ZN7S9472C1D0Ev();
extern void _ZN7S9472C22v3Ev();
extern void _ZN7S9472C22v4Ev();
extern void _ZN7S9472C22v5Ev();
extern void _ZN7S9472C22v6Ev();
extern void _ZN7S9472C22v7Ev();
extern void _ZN7S9472C22v8Ev();
extern void _ZN7S9472C22v9Ev();
extern void _ZN7S9472C23v10Ev();
extern void _ZN7S9472C12v1Ev();
extern void _ZN7S9472C12v2Ev();
static  VTBL_ENTRY vtc_S9472C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9472C1[0]),
  (VTBL_ENTRY)&_ZN7S9472C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9472C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9472C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9472C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9472C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9472C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9472C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9472C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9472C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9472C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9472C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9472C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9472C1[];
extern  VTBL_ENTRY _ZTV7S9472C1[];
Class_Descriptor cd_S9472C1 = {  "S9472C1", // class name
  bases_S9472C1, 1,
  &(vtc_S9472C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,128), // object size
  NSPAIRA(_ZTI7S9472C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9472C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4412C3  {
  ::S16113C5_nt s4412c3f0;
  int s4412c3f1[2];
  char s4412c3f2;
  virtual  ~S4412C3(); // _ZN7S4412C3D1Ev
  virtual void  v2(); // _ZN7S4412C32v2Ev
  virtual void  v3(); // _ZN7S4412C32v3Ev
  virtual void  v4(); // _ZN7S4412C32v4Ev
  S4412C3(); // tgen
};
//SIG(-1 S4412C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4412C3 ::~S4412C3(){ note_dtor("S4412C3", this);}
void  S4412C3 ::v2(){vfunc_called(this, "_ZN7S4412C32v2Ev");}
void  S4412C3 ::v3(){vfunc_called(this, "_ZN7S4412C32v3Ev");}
void  S4412C3 ::v4(){vfunc_called(this, "_ZN7S4412C32v4Ev");}
S4412C3 ::S4412C3(){ note_ctor("S4412C3", this);} // tgen

static void Test_S4412C3()
{
  extern Class_Descriptor cd_S4412C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4412C3, buf);
    S4412C3 *dp, &lv = *(dp=new (buf) S4412C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4412C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4412C3)");
    check_field_offset(lv, s4412c3f0, ABISELECT(8,4), "S4412C3.s4412c3f0");
    check_field_offset(lv, s4412c3f1, ABISELECT(24,16), "S4412C3.s4412c3f1");
    check_field_offset(lv, s4412c3f2, ABISELECT(32,24), "S4412C3.s4412c3f2");
    test_class_info(&lv, &cd_S4412C3);
    dp->~S4412C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4412C3(Test_S4412C3, "S4412C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4412C3C1Ev();
extern void _ZN7S4412C3D1Ev();
Name_Map name_map_S4412C3[] = {
  NSPAIR(_ZN7S4412C3C1Ev),
  NSPAIR(_ZN7S4412C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4412C3[];
extern void _ZN7S4412C3D1Ev();
extern void _ZN7S4412C3D0Ev();
extern void _ZN7S4412C32v2Ev();
extern void _ZN7S4412C32v3Ev();
extern void _ZN7S4412C32v4Ev();
static  VTBL_ENTRY vtc_S4412C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4412C3[0]),
  (VTBL_ENTRY)&_ZN7S4412C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4412C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4412C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4412C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4412C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4412C3[];
extern  VTBL_ENTRY _ZTV7S4412C3[];
Class_Descriptor cd_S4412C3 = {  "S4412C3", // class name
  0,0,//no base classes
  &(vtc_S4412C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4412C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4412C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4412C2  : S4412C3 {
  void *s4412c2f0[2];
  int s4412c2f1;
  char s4412c2f2;
  virtual  ~S4412C2(); // _ZN7S4412C2D1Ev
  virtual void  v5(); // _ZN7S4412C22v5Ev
  S4412C2(); // tgen
};
//SIG(-1 S4412C2) C1{ BC2{ vd v2 v3 v4 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 Fp[2] Fi Fc}


 S4412C2 ::~S4412C2(){ note_dtor("S4412C2", this);}
void  S4412C2 ::v5(){vfunc_called(this, "_ZN7S4412C22v5Ev");}
S4412C2 ::S4412C2(){ note_ctor("S4412C2", this);} // tgen

static void Test_S4412C2()
{
  extern Class_Descriptor cd_S4412C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4412C2, buf);
    S4412C2 *dp, &lv = *(dp=new (buf) S4412C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4412C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4412C2)");
    check_base_class_offset(lv, (S4412C3*), 0, "S4412C2");
    check_field_offset(lv, s4412c2f0, ABISELECT(40,28), "S4412C2.s4412c2f0");
    check_field_offset(lv, s4412c2f1, ABISELECT(56,36), "S4412C2.s4412c2f1");
    check_field_offset(lv, s4412c2f2, ABISELECT(60,40), "S4412C2.s4412c2f2");
    test_class_info(&lv, &cd_S4412C2);
    dp->~S4412C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4412C2(Test_S4412C2, "S4412C2", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4412C2C1Ev();
extern void _ZN7S4412C2D1Ev();
Name_Map name_map_S4412C2[] = {
  NSPAIR(_ZN7S4412C2C1Ev),
  NSPAIR(_ZN7S4412C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4412C3;
extern VTBL_ENTRY _ZTI7S4412C3[];
extern  VTBL_ENTRY _ZTV7S4412C3[];
static Base_Class bases_S4412C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4412C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4412C2[];
extern void _ZN7S4412C2D1Ev();
extern void _ZN7S4412C2D0Ev();
extern void _ZN7S4412C32v2Ev();
extern void _ZN7S4412C32v3Ev();
extern void _ZN7S4412C32v4Ev();
extern void _ZN7S4412C22v5Ev();
static  VTBL_ENTRY vtc_S4412C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4412C2[0]),
  (VTBL_ENTRY)&_ZN7S4412C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4412C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4412C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4412C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4412C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4412C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4412C2[];
extern  VTBL_ENTRY _ZTV7S4412C2[];
Class_Descriptor cd_S4412C2 = {  "S4412C2", // class name
  bases_S4412C2, 1,
  &(vtc_S4412C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4412C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4412C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4412C1  : S4412C2 {
  ::S10275C6_nt s4412c1f0;
  ::S4206C36_nt s4412c1f1;
  int s4412c1f2;
  ::S8511C3_nt s4412c1f3;
  int s4412c1f4;
  virtual  ~S4412C1(); // _ZN7S4412C1D1Ev
  virtual void  v1(); // _ZN7S4412C12v1Ev
  S4412C1(); // tgen
};
//SIG(1 S4412C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 Fp[2] Fi Fc} vd v1 FC6{ m Fp[2]} FC7{ m Fp Fi[2] FC5} Fi FC8{ m Fp[2]} Fi}


 S4412C1 ::~S4412C1(){ note_dtor("S4412C1", this);}
void  S4412C1 ::v1(){vfunc_called(this, "_ZN7S4412C12v1Ev");}
S4412C1 ::S4412C1(){ note_ctor("S4412C1", this);} // tgen

static void Test_S4412C1()
{
  extern Class_Descriptor cd_S4412C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,22)];
    init_test(&cd_S4412C1, buf);
    S4412C1 *dp, &lv = *(dp=new (buf) S4412C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S4412C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4412C1)");
    check_base_class_offset(lv, (S4412C3*)(S4412C2*), 0, "S4412C1");
    check_base_class_offset(lv, (S4412C2*), 0, "S4412C1");
    check_field_offset(lv, s4412c1f0, ABISELECT(64,44), "S4412C1.s4412c1f0");
    check_field_offset(lv, s4412c1f1, ABISELECT(80,52), "S4412C1.s4412c1f1");
    check_field_offset(lv, s4412c1f2, ABISELECT(104,68), "S4412C1.s4412c1f2");
    check_field_offset(lv, s4412c1f3, ABISELECT(112,72), "S4412C1.s4412c1f3");
    check_field_offset(lv, s4412c1f4, ABISELECT(128,80), "S4412C1.s4412c1f4");
    test_class_info(&lv, &cd_S4412C1);
    dp->~S4412C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4412C1(Test_S4412C1, "S4412C1", ABISELECT(136,84));

#else // __cplusplus

extern void _ZN7S4412C1C1Ev();
extern void _ZN7S4412C1D1Ev();
Name_Map name_map_S4412C1[] = {
  NSPAIR(_ZN7S4412C1C1Ev),
  NSPAIR(_ZN7S4412C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4412C3;
extern VTBL_ENTRY _ZTI7S4412C3[];
extern  VTBL_ENTRY _ZTV7S4412C3[];
extern Class_Descriptor cd_S4412C2;
extern VTBL_ENTRY _ZTI7S4412C2[];
extern  VTBL_ENTRY _ZTV7S4412C2[];
static Base_Class bases_S4412C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4412C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4412C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4412C1[];
extern void _ZN7S4412C1D1Ev();
extern void _ZN7S4412C1D0Ev();
extern void _ZN7S4412C32v2Ev();
extern void _ZN7S4412C32v3Ev();
extern void _ZN7S4412C32v4Ev();
extern void _ZN7S4412C22v5Ev();
extern void _ZN7S4412C12v1Ev();
static  VTBL_ENTRY vtc_S4412C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4412C1[0]),
  (VTBL_ENTRY)&_ZN7S4412C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4412C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4412C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4412C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4412C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4412C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4412C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4412C1[];
extern  VTBL_ENTRY _ZTV7S4412C1[];
Class_Descriptor cd_S4412C1 = {  "S4412C1", // class name
  bases_S4412C1, 2,
  &(vtc_S4412C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI7S4412C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4412C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4413C3  {
  ::S16113C5_nt s4413c3f0;
  int s4413c3f1[2];
  char s4413c3f2;
  virtual  ~S4413C3(); // _ZN7S4413C3D1Ev
  virtual void  v2(); // _ZN7S4413C32v2Ev
  virtual void  v3(); // _ZN7S4413C32v3Ev
  virtual void  v4(); // _ZN7S4413C32v4Ev
  S4413C3(); // tgen
};
//SIG(-1 S4413C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4413C3 ::~S4413C3(){ note_dtor("S4413C3", this);}
void  S4413C3 ::v2(){vfunc_called(this, "_ZN7S4413C32v2Ev");}
void  S4413C3 ::v3(){vfunc_called(this, "_ZN7S4413C32v3Ev");}
void  S4413C3 ::v4(){vfunc_called(this, "_ZN7S4413C32v4Ev");}
S4413C3 ::S4413C3(){ note_ctor("S4413C3", this);} // tgen

static void Test_S4413C3()
{
  extern Class_Descriptor cd_S4413C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4413C3, buf);
    S4413C3 *dp, &lv = *(dp=new (buf) S4413C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4413C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4413C3)");
    check_field_offset(lv, s4413c3f0, ABISELECT(8,4), "S4413C3.s4413c3f0");
    check_field_offset(lv, s4413c3f1, ABISELECT(24,16), "S4413C3.s4413c3f1");
    check_field_offset(lv, s4413c3f2, ABISELECT(32,24), "S4413C3.s4413c3f2");
    test_class_info(&lv, &cd_S4413C3);
    dp->~S4413C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4413C3(Test_S4413C3, "S4413C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4413C3C1Ev();
extern void _ZN7S4413C3D1Ev();
Name_Map name_map_S4413C3[] = {
  NSPAIR(_ZN7S4413C3C1Ev),
  NSPAIR(_ZN7S4413C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4413C3[];
extern void _ZN7S4413C3D1Ev();
extern void _ZN7S4413C3D0Ev();
extern void _ZN7S4413C32v2Ev();
extern void _ZN7S4413C32v3Ev();
extern void _ZN7S4413C32v4Ev();
static  VTBL_ENTRY vtc_S4413C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4413C3[0]),
  (VTBL_ENTRY)&_ZN7S4413C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4413C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4413C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4413C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4413C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4413C3[];
extern  VTBL_ENTRY _ZTV7S4413C3[];
Class_Descriptor cd_S4413C3 = {  "S4413C3", // class name
  0,0,//no base classes
  &(vtc_S4413C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4413C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4413C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4413C2  : S4413C3 {
  void *s4413c2f0[2];
  int s4413c2f1;
  char s4413c2f2;
  virtual  ~S4413C2(); // _ZN7S4413C2D1Ev
  virtual void  v5(); // _ZN7S4413C22v5Ev
  S4413C2(); // tgen
};
//SIG(-1 S4413C2) C1{ BC2{ vd v2 v3 v4 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 Fp[2] Fi Fc}


 S4413C2 ::~S4413C2(){ note_dtor("S4413C2", this);}
void  S4413C2 ::v5(){vfunc_called(this, "_ZN7S4413C22v5Ev");}
S4413C2 ::S4413C2(){ note_ctor("S4413C2", this);} // tgen

static void Test_S4413C2()
{
  extern Class_Descriptor cd_S4413C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4413C2, buf);
    S4413C2 *dp, &lv = *(dp=new (buf) S4413C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4413C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4413C2)");
    check_base_class_offset(lv, (S4413C3*), 0, "S4413C2");
    check_field_offset(lv, s4413c2f0, ABISELECT(40,28), "S4413C2.s4413c2f0");
    check_field_offset(lv, s4413c2f1, ABISELECT(56,36), "S4413C2.s4413c2f1");
    check_field_offset(lv, s4413c2f2, ABISELECT(60,40), "S4413C2.s4413c2f2");
    test_class_info(&lv, &cd_S4413C2);
    dp->~S4413C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4413C2(Test_S4413C2, "S4413C2", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4413C2C1Ev();
extern void _ZN7S4413C2D1Ev();
Name_Map name_map_S4413C2[] = {
  NSPAIR(_ZN7S4413C2C1Ev),
  NSPAIR(_ZN7S4413C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4413C3;
extern VTBL_ENTRY _ZTI7S4413C3[];
extern  VTBL_ENTRY _ZTV7S4413C3[];
static Base_Class bases_S4413C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4413C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4413C2[];
extern void _ZN7S4413C2D1Ev();
extern void _ZN7S4413C2D0Ev();
extern void _ZN7S4413C32v2Ev();
extern void _ZN7S4413C32v3Ev();
extern void _ZN7S4413C32v4Ev();
extern void _ZN7S4413C22v5Ev();
static  VTBL_ENTRY vtc_S4413C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4413C2[0]),
  (VTBL_ENTRY)&_ZN7S4413C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4413C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4413C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4413C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4413C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4413C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4413C2[];
extern  VTBL_ENTRY _ZTV7S4413C2[];
Class_Descriptor cd_S4413C2 = {  "S4413C2", // class name
  bases_S4413C2, 1,
  &(vtc_S4413C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4413C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4413C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4413C1  : S4413C2 {
  ::S10275C6_nt s4413c1f0;
  ::S4206C36_nt s4413c1f1;
  int s4413c1f2;
  ::S8511C3_nt s4413c1f3;
  virtual  ~S4413C1(); // _ZN7S4413C1D1Ev
  virtual void  v1(); // _ZN7S4413C12v1Ev
  S4413C1(); // tgen
};
//SIG(1 S4413C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 Fp[2] Fi Fc} vd v1 FC6{ m Fp[2]} FC7{ m Fp Fi[2] FC5} Fi FC8{ m Fp[2]}}


 S4413C1 ::~S4413C1(){ note_dtor("S4413C1", this);}
void  S4413C1 ::v1(){vfunc_called(this, "_ZN7S4413C12v1Ev");}
S4413C1 ::S4413C1(){ note_ctor("S4413C1", this);} // tgen

static void Test_S4413C1()
{
  extern Class_Descriptor cd_S4413C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,21)];
    init_test(&cd_S4413C1, buf);
    S4413C1 *dp, &lv = *(dp=new (buf) S4413C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S4413C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4413C1)");
    check_base_class_offset(lv, (S4413C3*)(S4413C2*), 0, "S4413C1");
    check_base_class_offset(lv, (S4413C2*), 0, "S4413C1");
    check_field_offset(lv, s4413c1f0, ABISELECT(64,44), "S4413C1.s4413c1f0");
    check_field_offset(lv, s4413c1f1, ABISELECT(80,52), "S4413C1.s4413c1f1");
    check_field_offset(lv, s4413c1f2, ABISELECT(104,68), "S4413C1.s4413c1f2");
    check_field_offset(lv, s4413c1f3, ABISELECT(112,72), "S4413C1.s4413c1f3");
    test_class_info(&lv, &cd_S4413C1);
    dp->~S4413C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4413C1(Test_S4413C1, "S4413C1", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN7S4413C1C1Ev();
extern void _ZN7S4413C1D1Ev();
Name_Map name_map_S4413C1[] = {
  NSPAIR(_ZN7S4413C1C1Ev),
  NSPAIR(_ZN7S4413C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4413C3;
extern VTBL_ENTRY _ZTI7S4413C3[];
extern  VTBL_ENTRY _ZTV7S4413C3[];
extern Class_Descriptor cd_S4413C2;
extern VTBL_ENTRY _ZTI7S4413C2[];
extern  VTBL_ENTRY _ZTV7S4413C2[];
static Base_Class bases_S4413C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4413C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4413C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4413C1[];
extern void _ZN7S4413C1D1Ev();
extern void _ZN7S4413C1D0Ev();
extern void _ZN7S4413C32v2Ev();
extern void _ZN7S4413C32v3Ev();
extern void _ZN7S4413C32v4Ev();
extern void _ZN7S4413C22v5Ev();
extern void _ZN7S4413C12v1Ev();
static  VTBL_ENTRY vtc_S4413C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4413C1[0]),
  (VTBL_ENTRY)&_ZN7S4413C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4413C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4413C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4413C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4413C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4413C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4413C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4413C1[];
extern  VTBL_ENTRY _ZTV7S4413C1[];
Class_Descriptor cd_S4413C1 = {  "S4413C1", // class name
  bases_S4413C1, 2,
  &(vtc_S4413C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI7S4413C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4413C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4411C3  {
  ::S16113C5_nt s4411c3f0;
  int s4411c3f1[2];
  char s4411c3f2;
  virtual  ~S4411C3(); // _ZN7S4411C3D1Ev
  virtual void  v2(); // _ZN7S4411C32v2Ev
  virtual void  v3(); // _ZN7S4411C32v3Ev
  virtual void  v4(); // _ZN7S4411C32v4Ev
  S4411C3(); // tgen
};
//SIG(-1 S4411C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4411C3 ::~S4411C3(){ note_dtor("S4411C3", this);}
void  S4411C3 ::v2(){vfunc_called(this, "_ZN7S4411C32v2Ev");}
void  S4411C3 ::v3(){vfunc_called(this, "_ZN7S4411C32v3Ev");}
void  S4411C3 ::v4(){vfunc_called(this, "_ZN7S4411C32v4Ev");}
S4411C3 ::S4411C3(){ note_ctor("S4411C3", this);} // tgen

static void Test_S4411C3()
{
  extern Class_Descriptor cd_S4411C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4411C3, buf);
    S4411C3 *dp, &lv = *(dp=new (buf) S4411C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4411C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4411C3)");
    check_field_offset(lv, s4411c3f0, ABISELECT(8,4), "S4411C3.s4411c3f0");
    check_field_offset(lv, s4411c3f1, ABISELECT(24,16), "S4411C3.s4411c3f1");
    check_field_offset(lv, s4411c3f2, ABISELECT(32,24), "S4411C3.s4411c3f2");
    test_class_info(&lv, &cd_S4411C3);
    dp->~S4411C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4411C3(Test_S4411C3, "S4411C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4411C3C1Ev();
extern void _ZN7S4411C3D1Ev();
Name_Map name_map_S4411C3[] = {
  NSPAIR(_ZN7S4411C3C1Ev),
  NSPAIR(_ZN7S4411C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4411C3[];
extern void _ZN7S4411C3D1Ev();
extern void _ZN7S4411C3D0Ev();
extern void _ZN7S4411C32v2Ev();
extern void _ZN7S4411C32v3Ev();
extern void _ZN7S4411C32v4Ev();
static  VTBL_ENTRY vtc_S4411C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4411C3[0]),
  (VTBL_ENTRY)&_ZN7S4411C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4411C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4411C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4411C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4411C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4411C3[];
extern  VTBL_ENTRY _ZTV7S4411C3[];
Class_Descriptor cd_S4411C3 = {  "S4411C3", // class name
  0,0,//no base classes
  &(vtc_S4411C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4411C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4411C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4411C2  : S4411C3 {
  void *s4411c2f0[2];
  int s4411c2f1;
  char s4411c2f2;
  virtual  ~S4411C2(); // _ZN7S4411C2D1Ev
  virtual void  v5(); // _ZN7S4411C22v5Ev
  S4411C2(); // tgen
};
//SIG(-1 S4411C2) C1{ BC2{ vd v2 v3 v4 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 Fp[2] Fi Fc}


 S4411C2 ::~S4411C2(){ note_dtor("S4411C2", this);}
void  S4411C2 ::v5(){vfunc_called(this, "_ZN7S4411C22v5Ev");}
S4411C2 ::S4411C2(){ note_ctor("S4411C2", this);} // tgen

static void Test_S4411C2()
{
  extern Class_Descriptor cd_S4411C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4411C2, buf);
    S4411C2 *dp, &lv = *(dp=new (buf) S4411C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4411C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4411C2)");
    check_base_class_offset(lv, (S4411C3*), 0, "S4411C2");
    check_field_offset(lv, s4411c2f0, ABISELECT(40,28), "S4411C2.s4411c2f0");
    check_field_offset(lv, s4411c2f1, ABISELECT(56,36), "S4411C2.s4411c2f1");
    check_field_offset(lv, s4411c2f2, ABISELECT(60,40), "S4411C2.s4411c2f2");
    test_class_info(&lv, &cd_S4411C2);
    dp->~S4411C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4411C2(Test_S4411C2, "S4411C2", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4411C2C1Ev();
extern void _ZN7S4411C2D1Ev();
Name_Map name_map_S4411C2[] = {
  NSPAIR(_ZN7S4411C2C1Ev),
  NSPAIR(_ZN7S4411C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4411C3;
extern VTBL_ENTRY _ZTI7S4411C3[];
extern  VTBL_ENTRY _ZTV7S4411C3[];
static Base_Class bases_S4411C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4411C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4411C2[];
extern void _ZN7S4411C2D1Ev();
extern void _ZN7S4411C2D0Ev();
extern void _ZN7S4411C32v2Ev();
extern void _ZN7S4411C32v3Ev();
extern void _ZN7S4411C32v4Ev();
extern void _ZN7S4411C22v5Ev();
static  VTBL_ENTRY vtc_S4411C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4411C2[0]),
  (VTBL_ENTRY)&_ZN7S4411C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4411C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4411C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4411C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4411C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4411C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4411C2[];
extern  VTBL_ENTRY _ZTV7S4411C2[];
Class_Descriptor cd_S4411C2 = {  "S4411C2", // class name
  bases_S4411C2, 1,
  &(vtc_S4411C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4411C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4411C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4411C1  : S4411C2 {
  ::S4206C36_nt s4411c1f0;
  ::S2440C37 s4411c1f1;
  virtual  ~S4411C1(); // _ZN7S4411C1D1Ev
  virtual void  v1(); // _ZN7S4411C12v1Ev
  S4411C1(); // tgen
};
//SIG(1 S4411C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 Fp[2] Fi Fc} vd v1 FC6{ m Fp Fi[2] FC5} FC7{ m Fp Fi[2] FC5}}


 S4411C1 ::~S4411C1(){ note_dtor("S4411C1", this);}
void  S4411C1 ::v1(){vfunc_called(this, "_ZN7S4411C12v1Ev");}
S4411C1 ::S4411C1(){ note_ctor("S4411C1", this);} // tgen

static void Test_S4411C1()
{
  extern Class_Descriptor cd_S4411C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S4411C1, buf);
    S4411C1 *dp, &lv = *(dp=new (buf) S4411C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S4411C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4411C1)");
    check_base_class_offset(lv, (S4411C3*)(S4411C2*), 0, "S4411C1");
    check_base_class_offset(lv, (S4411C2*), 0, "S4411C1");
    check_field_offset(lv, s4411c1f0, ABISELECT(64,44), "S4411C1.s4411c1f0");
    check_field_offset(lv, s4411c1f1, ABISELECT(88,60), "S4411C1.s4411c1f1");
    test_class_info(&lv, &cd_S4411C1);
    dp->~S4411C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4411C1(Test_S4411C1, "S4411C1", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S4411C1C1Ev();
extern void _ZN7S4411C1D1Ev();
Name_Map name_map_S4411C1[] = {
  NSPAIR(_ZN7S4411C1C1Ev),
  NSPAIR(_ZN7S4411C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4411C3;
extern VTBL_ENTRY _ZTI7S4411C3[];
extern  VTBL_ENTRY _ZTV7S4411C3[];
extern Class_Descriptor cd_S4411C2;
extern VTBL_ENTRY _ZTI7S4411C2[];
extern  VTBL_ENTRY _ZTV7S4411C2[];
static Base_Class bases_S4411C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4411C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4411C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4411C1[];
extern void _ZN7S4411C1D1Ev();
extern void _ZN7S4411C1D0Ev();
extern void _ZN7S4411C32v2Ev();
extern void _ZN7S4411C32v3Ev();
extern void _ZN7S4411C32v4Ev();
extern void _ZN7S4411C22v5Ev();
extern void _ZN7S4411C12v1Ev();
static  VTBL_ENTRY vtc_S4411C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4411C1[0]),
  (VTBL_ENTRY)&_ZN7S4411C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4411C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4411C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4411C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4411C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4411C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4411C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4411C1[];
extern  VTBL_ENTRY _ZTV7S4411C1[];
Class_Descriptor cd_S4411C1 = {  "S4411C1", // class name
  bases_S4411C1, 2,
  &(vtc_S4411C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S4411C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4411C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4416C3  {
  ::S16113C5_nt s4416c3f0;
  int s4416c3f1[2];
  char s4416c3f2;
  virtual  ~S4416C3(); // _ZN7S4416C3D1Ev
  virtual void  v2(); // _ZN7S4416C32v2Ev
  virtual void  v3(); // _ZN7S4416C32v3Ev
  virtual void  v4(); // _ZN7S4416C32v4Ev
  S4416C3(); // tgen
};
//SIG(-1 S4416C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4416C3 ::~S4416C3(){ note_dtor("S4416C3", this);}
void  S4416C3 ::v2(){vfunc_called(this, "_ZN7S4416C32v2Ev");}
void  S4416C3 ::v3(){vfunc_called(this, "_ZN7S4416C32v3Ev");}
void  S4416C3 ::v4(){vfunc_called(this, "_ZN7S4416C32v4Ev");}
S4416C3 ::S4416C3(){ note_ctor("S4416C3", this);} // tgen

static void Test_S4416C3()
{
  extern Class_Descriptor cd_S4416C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4416C3, buf);
    S4416C3 *dp, &lv = *(dp=new (buf) S4416C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4416C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4416C3)");
    check_field_offset(lv, s4416c3f0, ABISELECT(8,4), "S4416C3.s4416c3f0");
    check_field_offset(lv, s4416c3f1, ABISELECT(24,16), "S4416C3.s4416c3f1");
    check_field_offset(lv, s4416c3f2, ABISELECT(32,24), "S4416C3.s4416c3f2");
    test_class_info(&lv, &cd_S4416C3);
    dp->~S4416C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4416C3(Test_S4416C3, "S4416C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4416C3C1Ev();
extern void _ZN7S4416C3D1Ev();
Name_Map name_map_S4416C3[] = {
  NSPAIR(_ZN7S4416C3C1Ev),
  NSPAIR(_ZN7S4416C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4416C3[];
extern void _ZN7S4416C3D1Ev();
extern void _ZN7S4416C3D0Ev();
extern void _ZN7S4416C32v2Ev();
extern void _ZN7S4416C32v3Ev();
extern void _ZN7S4416C32v4Ev();
static  VTBL_ENTRY vtc_S4416C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4416C3[0]),
  (VTBL_ENTRY)&_ZN7S4416C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4416C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4416C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4416C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4416C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4416C3[];
extern  VTBL_ENTRY _ZTV7S4416C3[];
Class_Descriptor cd_S4416C3 = {  "S4416C3", // class name
  0,0,//no base classes
  &(vtc_S4416C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4416C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4416C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4416C2  : S4416C3 {
  void *s4416c2f0[2];
  int s4416c2f1;
  char s4416c2f2;
  virtual  ~S4416C2(); // _ZN7S4416C2D1Ev
  virtual void  v5(); // _ZN7S4416C22v5Ev
  S4416C2(); // tgen
};
//SIG(-1 S4416C2) C1{ BC2{ vd v2 v3 v4 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 Fp[2] Fi Fc}


 S4416C2 ::~S4416C2(){ note_dtor("S4416C2", this);}
void  S4416C2 ::v5(){vfunc_called(this, "_ZN7S4416C22v5Ev");}
S4416C2 ::S4416C2(){ note_ctor("S4416C2", this);} // tgen

static void Test_S4416C2()
{
  extern Class_Descriptor cd_S4416C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4416C2, buf);
    S4416C2 *dp, &lv = *(dp=new (buf) S4416C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4416C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4416C2)");
    check_base_class_offset(lv, (S4416C3*), 0, "S4416C2");
    check_field_offset(lv, s4416c2f0, ABISELECT(40,28), "S4416C2.s4416c2f0");
    check_field_offset(lv, s4416c2f1, ABISELECT(56,36), "S4416C2.s4416c2f1");
    check_field_offset(lv, s4416c2f2, ABISELECT(60,40), "S4416C2.s4416c2f2");
    test_class_info(&lv, &cd_S4416C2);
    dp->~S4416C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4416C2(Test_S4416C2, "S4416C2", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4416C2C1Ev();
extern void _ZN7S4416C2D1Ev();
Name_Map name_map_S4416C2[] = {
  NSPAIR(_ZN7S4416C2C1Ev),
  NSPAIR(_ZN7S4416C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4416C3;
extern VTBL_ENTRY _ZTI7S4416C3[];
extern  VTBL_ENTRY _ZTV7S4416C3[];
static Base_Class bases_S4416C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4416C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4416C2[];
extern void _ZN7S4416C2D1Ev();
extern void _ZN7S4416C2D0Ev();
extern void _ZN7S4416C32v2Ev();
extern void _ZN7S4416C32v3Ev();
extern void _ZN7S4416C32v4Ev();
extern void _ZN7S4416C22v5Ev();
static  VTBL_ENTRY vtc_S4416C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4416C2[0]),
  (VTBL_ENTRY)&_ZN7S4416C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4416C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4416C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4416C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4416C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4416C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4416C2[];
extern  VTBL_ENTRY _ZTV7S4416C2[];
Class_Descriptor cd_S4416C2 = {  "S4416C2", // class name
  bases_S4416C2, 1,
  &(vtc_S4416C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4416C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4416C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4416C1  : S4416C2 {
  int s4416c1f0;
  ::S10275C6_nt s4416c1f1;
  ::S4206C36_nt s4416c1f2;
  ::S10275C6_nt s4416c1f3;
  ::S10275C6_nt s4416c1f4;
  virtual  ~S4416C1(); // _ZN7S4416C1D1Ev
  virtual void  v1(); // _ZN7S4416C12v1Ev
  S4416C1(); // tgen
};
//SIG(1 S4416C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 Fp[2] Fi Fc} vd v1 Fi FC6{ m Fp[2]} FC7{ m Fp Fi[2] FC5} FC6 FC6}


 S4416C1 ::~S4416C1(){ note_dtor("S4416C1", this);}
void  S4416C1 ::v1(){vfunc_called(this, "_ZN7S4416C12v1Ev");}
S4416C1 ::S4416C1(){ note_ctor("S4416C1", this);} // tgen

static void Test_S4416C1()
{
  extern Class_Descriptor cd_S4416C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S4416C1, buf);
    S4416C1 *dp, &lv = *(dp=new (buf) S4416C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S4416C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4416C1)");
    check_base_class_offset(lv, (S4416C3*)(S4416C2*), 0, "S4416C1");
    check_base_class_offset(lv, (S4416C2*), 0, "S4416C1");
    check_field_offset(lv, s4416c1f0, ABISELECT(64,44), "S4416C1.s4416c1f0");
    check_field_offset(lv, s4416c1f1, ABISELECT(72,48), "S4416C1.s4416c1f1");
    check_field_offset(lv, s4416c1f2, ABISELECT(88,56), "S4416C1.s4416c1f2");
    check_field_offset(lv, s4416c1f3, ABISELECT(112,72), "S4416C1.s4416c1f3");
    check_field_offset(lv, s4416c1f4, ABISELECT(128,80), "S4416C1.s4416c1f4");
    test_class_info(&lv, &cd_S4416C1);
    dp->~S4416C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4416C1(Test_S4416C1, "S4416C1", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S4416C1C1Ev();
extern void _ZN7S4416C1D1Ev();
Name_Map name_map_S4416C1[] = {
  NSPAIR(_ZN7S4416C1C1Ev),
  NSPAIR(_ZN7S4416C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4416C3;
extern VTBL_ENTRY _ZTI7S4416C3[];
extern  VTBL_ENTRY _ZTV7S4416C3[];
extern Class_Descriptor cd_S4416C2;
extern VTBL_ENTRY _ZTI7S4416C2[];
extern  VTBL_ENTRY _ZTV7S4416C2[];
static Base_Class bases_S4416C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4416C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4416C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4416C1[];
extern void _ZN7S4416C1D1Ev();
extern void _ZN7S4416C1D0Ev();
extern void _ZN7S4416C32v2Ev();
extern void _ZN7S4416C32v3Ev();
extern void _ZN7S4416C32v4Ev();
extern void _ZN7S4416C22v5Ev();
extern void _ZN7S4416C12v1Ev();
static  VTBL_ENTRY vtc_S4416C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4416C1[0]),
  (VTBL_ENTRY)&_ZN7S4416C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4416C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4416C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4416C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4416C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4416C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4416C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4416C1[];
extern  VTBL_ENTRY _ZTV7S4416C1[];
Class_Descriptor cd_S4416C1 = {  "S4416C1", // class name
  bases_S4416C1, 2,
  &(vtc_S4416C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S4416C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4416C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4415C3  {
  ::S16113C5_nt s4415c3f0;
  int s4415c3f1[2];
  char s4415c3f2;
  virtual  ~S4415C3(); // _ZN7S4415C3D1Ev
  virtual void  v2(); // _ZN7S4415C32v2Ev
  virtual void  v3(); // _ZN7S4415C32v3Ev
  virtual void  v4(); // _ZN7S4415C32v4Ev
  S4415C3(); // tgen
};
//SIG(-1 S4415C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4415C3 ::~S4415C3(){ note_dtor("S4415C3", this);}
void  S4415C3 ::v2(){vfunc_called(this, "_ZN7S4415C32v2Ev");}
void  S4415C3 ::v3(){vfunc_called(this, "_ZN7S4415C32v3Ev");}
void  S4415C3 ::v4(){vfunc_called(this, "_ZN7S4415C32v4Ev");}
S4415C3 ::S4415C3(){ note_ctor("S4415C3", this);} // tgen

static void Test_S4415C3()
{
  extern Class_Descriptor cd_S4415C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4415C3, buf);
    S4415C3 *dp, &lv = *(dp=new (buf) S4415C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4415C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4415C3)");
    check_field_offset(lv, s4415c3f0, ABISELECT(8,4), "S4415C3.s4415c3f0");
    check_field_offset(lv, s4415c3f1, ABISELECT(24,16), "S4415C3.s4415c3f1");
    check_field_offset(lv, s4415c3f2, ABISELECT(32,24), "S4415C3.s4415c3f2");
    test_class_info(&lv, &cd_S4415C3);
    dp->~S4415C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4415C3(Test_S4415C3, "S4415C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4415C3C1Ev();
extern void _ZN7S4415C3D1Ev();
Name_Map name_map_S4415C3[] = {
  NSPAIR(_ZN7S4415C3C1Ev),
  NSPAIR(_ZN7S4415C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4415C3[];
extern void _ZN7S4415C3D1Ev();
extern void _ZN7S4415C3D0Ev();
extern void _ZN7S4415C32v2Ev();
extern void _ZN7S4415C32v3Ev();
extern void _ZN7S4415C32v4Ev();
static  VTBL_ENTRY vtc_S4415C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4415C3[0]),
  (VTBL_ENTRY)&_ZN7S4415C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4415C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4415C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4415C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4415C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4415C3[];
extern  VTBL_ENTRY _ZTV7S4415C3[];
Class_Descriptor cd_S4415C3 = {  "S4415C3", // class name
  0,0,//no base classes
  &(vtc_S4415C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4415C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4415C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4415C2  : S4415C3 {
  void *s4415c2f0[2];
  int s4415c2f1;
  char s4415c2f2;
  virtual  ~S4415C2(); // _ZN7S4415C2D1Ev
  virtual void  v5(); // _ZN7S4415C22v5Ev
  S4415C2(); // tgen
};
//SIG(-1 S4415C2) C1{ BC2{ vd v2 v3 v4 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 Fp[2] Fi Fc}


 S4415C2 ::~S4415C2(){ note_dtor("S4415C2", this);}
void  S4415C2 ::v5(){vfunc_called(this, "_ZN7S4415C22v5Ev");}
S4415C2 ::S4415C2(){ note_ctor("S4415C2", this);} // tgen

static void Test_S4415C2()
{
  extern Class_Descriptor cd_S4415C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4415C2, buf);
    S4415C2 *dp, &lv = *(dp=new (buf) S4415C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4415C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4415C2)");
    check_base_class_offset(lv, (S4415C3*), 0, "S4415C2");
    check_field_offset(lv, s4415c2f0, ABISELECT(40,28), "S4415C2.s4415c2f0");
    check_field_offset(lv, s4415c2f1, ABISELECT(56,36), "S4415C2.s4415c2f1");
    check_field_offset(lv, s4415c2f2, ABISELECT(60,40), "S4415C2.s4415c2f2");
    test_class_info(&lv, &cd_S4415C2);
    dp->~S4415C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4415C2(Test_S4415C2, "S4415C2", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4415C2C1Ev();
extern void _ZN7S4415C2D1Ev();
Name_Map name_map_S4415C2[] = {
  NSPAIR(_ZN7S4415C2C1Ev),
  NSPAIR(_ZN7S4415C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4415C3;
extern VTBL_ENTRY _ZTI7S4415C3[];
extern  VTBL_ENTRY _ZTV7S4415C3[];
static Base_Class bases_S4415C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4415C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4415C2[];
extern void _ZN7S4415C2D1Ev();
extern void _ZN7S4415C2D0Ev();
extern void _ZN7S4415C32v2Ev();
extern void _ZN7S4415C32v3Ev();
extern void _ZN7S4415C32v4Ev();
extern void _ZN7S4415C22v5Ev();
static  VTBL_ENTRY vtc_S4415C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4415C2[0]),
  (VTBL_ENTRY)&_ZN7S4415C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4415C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4415C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4415C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4415C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4415C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4415C2[];
extern  VTBL_ENTRY _ZTV7S4415C2[];
Class_Descriptor cd_S4415C2 = {  "S4415C2", // class name
  bases_S4415C2, 1,
  &(vtc_S4415C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4415C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4415C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4415C1  : S4415C2 {
  int s4415c1f0;
  ::S4206C36_nt s4415c1f1;
  ::S8511C12 s4415c1f2;
  virtual  ~S4415C1(); // _ZN7S4415C1D1Ev
  virtual void  v1(); // _ZN7S4415C12v1Ev
  S4415C1(); // tgen
};
//SIG(1 S4415C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 Fp[2] Fi Fc} vd v1 Fi FC6{ m Fp Fi[2] FC5} FC7{ m FC4 Fi[5]}}


 S4415C1 ::~S4415C1(){ note_dtor("S4415C1", this);}
void  S4415C1 ::v1(){vfunc_called(this, "_ZN7S4415C12v1Ev");}
S4415C1 ::S4415C1(){ note_ctor("S4415C1", this);} // tgen

static void Test_S4415C1()
{
  extern Class_Descriptor cd_S4415C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,25)];
    init_test(&cd_S4415C1, buf);
    S4415C1 *dp, &lv = *(dp=new (buf) S4415C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,96), "sizeof(S4415C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4415C1)");
    check_base_class_offset(lv, (S4415C3*)(S4415C2*), 0, "S4415C1");
    check_base_class_offset(lv, (S4415C2*), 0, "S4415C1");
    check_field_offset(lv, s4415c1f0, ABISELECT(64,44), "S4415C1.s4415c1f0");
    check_field_offset(lv, s4415c1f1, ABISELECT(72,48), "S4415C1.s4415c1f1");
    check_field_offset(lv, s4415c1f2, ABISELECT(96,64), "S4415C1.s4415c1f2");
    test_class_info(&lv, &cd_S4415C1);
    dp->~S4415C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4415C1(Test_S4415C1, "S4415C1", ABISELECT(136,96));

#else // __cplusplus

extern void _ZN7S4415C1C1Ev();
extern void _ZN7S4415C1D1Ev();
Name_Map name_map_S4415C1[] = {
  NSPAIR(_ZN7S4415C1C1Ev),
  NSPAIR(_ZN7S4415C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4415C3;
extern VTBL_ENTRY _ZTI7S4415C3[];
extern  VTBL_ENTRY _ZTV7S4415C3[];
extern Class_Descriptor cd_S4415C2;
extern VTBL_ENTRY _ZTI7S4415C2[];
extern  VTBL_ENTRY _ZTV7S4415C2[];
static Base_Class bases_S4415C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4415C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4415C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4415C1[];
extern void _ZN7S4415C1D1Ev();
extern void _ZN7S4415C1D0Ev();
extern void _ZN7S4415C32v2Ev();
extern void _ZN7S4415C32v3Ev();
extern void _ZN7S4415C32v4Ev();
extern void _ZN7S4415C22v5Ev();
extern void _ZN7S4415C12v1Ev();
static  VTBL_ENTRY vtc_S4415C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4415C1[0]),
  (VTBL_ENTRY)&_ZN7S4415C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4415C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4415C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4415C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4415C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4415C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4415C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4415C1[];
extern  VTBL_ENTRY _ZTV7S4415C1[];
Class_Descriptor cd_S4415C1 = {  "S4415C1", // class name
  bases_S4415C1, 2,
  &(vtc_S4415C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,96), // object size
  NSPAIRA(_ZTI7S4415C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4415C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5107C3  {
  ::S16113C5_nt s5107c3f0;
  int s5107c3f1[2];
  char s5107c3f2;
  virtual  ~S5107C3(); // _ZN7S5107C3D1Ev
  virtual void  v4(); // _ZN7S5107C32v4Ev
  virtual void  v5(); // _ZN7S5107C32v5Ev
  virtual void  v6(); // _ZN7S5107C32v6Ev
  S5107C3(); // tgen
};
//SIG(-1 S5107C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5107C3 ::~S5107C3(){ note_dtor("S5107C3", this);}
void  S5107C3 ::v4(){vfunc_called(this, "_ZN7S5107C32v4Ev");}
void  S5107C3 ::v5(){vfunc_called(this, "_ZN7S5107C32v5Ev");}
void  S5107C3 ::v6(){vfunc_called(this, "_ZN7S5107C32v6Ev");}
S5107C3 ::S5107C3(){ note_ctor("S5107C3", this);} // tgen

static void Test_S5107C3()
{
  extern Class_Descriptor cd_S5107C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5107C3, buf);
    S5107C3 *dp, &lv = *(dp=new (buf) S5107C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5107C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5107C3)");
    check_field_offset(lv, s5107c3f0, ABISELECT(8,4), "S5107C3.s5107c3f0");
    check_field_offset(lv, s5107c3f1, ABISELECT(24,16), "S5107C3.s5107c3f1");
    check_field_offset(lv, s5107c3f2, ABISELECT(32,24), "S5107C3.s5107c3f2");
    test_class_info(&lv, &cd_S5107C3);
    dp->~S5107C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5107C3(Test_S5107C3, "S5107C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5107C3C1Ev();
extern void _ZN7S5107C3D1Ev();
Name_Map name_map_S5107C3[] = {
  NSPAIR(_ZN7S5107C3C1Ev),
  NSPAIR(_ZN7S5107C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5107C3[];
extern void _ZN7S5107C3D1Ev();
extern void _ZN7S5107C3D0Ev();
extern void _ZN7S5107C32v4Ev();
extern void _ZN7S5107C32v5Ev();
extern void _ZN7S5107C32v6Ev();
static  VTBL_ENTRY vtc_S5107C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5107C3[0]),
  (VTBL_ENTRY)&_ZN7S5107C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5107C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5107C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5107C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5107C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5107C3[];
extern  VTBL_ENTRY _ZTV7S5107C3[];
Class_Descriptor cd_S5107C3 = {  "S5107C3", // class name
  0,0,//no base classes
  &(vtc_S5107C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5107C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5107C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5107C2  : S5107C3 {
  char s5107c2f0[2];
  int s5107c2f1;
  ::S16113C5_nt s5107c2f2;
  void *s5107c2f3;
  virtual  ~S5107C2(); // _ZN7S5107C2D1Ev
  virtual void  v7(); // _ZN7S5107C22v7Ev
  virtual void  v8(); // _ZN7S5107C22v8Ev
  virtual void  v9(); // _ZN7S5107C22v9Ev
  virtual void  v10(); // _ZN7S5107C23v10Ev
  virtual void  v11(); // _ZN7S5107C23v11Ev
  virtual void  v12(); // _ZN7S5107C23v12Ev
  S5107C2(); // tgen
};
//SIG(-1 S5107C2) C1{ BC2{ vd v7 v8 v9 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 v5 v6 Fc[2] Fi FC3 Fp}


 S5107C2 ::~S5107C2(){ note_dtor("S5107C2", this);}
void  S5107C2 ::v7(){vfunc_called(this, "_ZN7S5107C22v7Ev");}
void  S5107C2 ::v8(){vfunc_called(this, "_ZN7S5107C22v8Ev");}
void  S5107C2 ::v9(){vfunc_called(this, "_ZN7S5107C22v9Ev");}
void  S5107C2 ::v10(){vfunc_called(this, "_ZN7S5107C23v10Ev");}
void  S5107C2 ::v11(){vfunc_called(this, "_ZN7S5107C23v11Ev");}
void  S5107C2 ::v12(){vfunc_called(this, "_ZN7S5107C23v12Ev");}
S5107C2 ::S5107C2(){ note_ctor("S5107C2", this);} // tgen

static void Test_S5107C2()
{
  extern Class_Descriptor cd_S5107C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S5107C2, buf);
    S5107C2 *dp, &lv = *(dp=new (buf) S5107C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S5107C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5107C2)");
    check_base_class_offset(lv, (S5107C3*), 0, "S5107C2");
    check_field_offset(lv, s5107c2f0, ABISELECT(33,25), "S5107C2.s5107c2f0");
    check_field_offset(lv, s5107c2f1, ABISELECT(36,28), "S5107C2.s5107c2f1");
    check_field_offset(lv, s5107c2f2, ABISELECT(40,32), "S5107C2.s5107c2f2");
    check_field_offset(lv, s5107c2f3, ABISELECT(56,44), "S5107C2.s5107c2f3");
    test_class_info(&lv, &cd_S5107C2);
    dp->~S5107C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5107C2(Test_S5107C2, "S5107C2", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S5107C2C1Ev();
extern void _ZN7S5107C2D1Ev();
Name_Map name_map_S5107C2[] = {
  NSPAIR(_ZN7S5107C2C1Ev),
  NSPAIR(_ZN7S5107C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5107C3;
extern VTBL_ENTRY _ZTI7S5107C3[];
extern  VTBL_ENTRY _ZTV7S5107C3[];
static Base_Class bases_S5107C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5107C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5107C2[];
extern void _ZN7S5107C2D1Ev();
extern void _ZN7S5107C2D0Ev();
extern void _ZN7S5107C32v4Ev();
extern void _ZN7S5107C32v5Ev();
extern void _ZN7S5107C32v6Ev();
extern void _ZN7S5107C22v7Ev();
extern void _ZN7S5107C22v8Ev();
extern void _ZN7S5107C22v9Ev();
extern void _ZN7S5107C23v10Ev();
extern void _ZN7S5107C23v11Ev();
extern void _ZN7S5107C23v12Ev();
static  VTBL_ENTRY vtc_S5107C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5107C2[0]),
  (VTBL_ENTRY)&_ZN7S5107C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5107C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5107C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5107C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5107C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5107C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5107C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5107C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5107C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5107C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5107C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S5107C2[];
extern  VTBL_ENTRY _ZTV7S5107C2[];
Class_Descriptor cd_S5107C2 = {  "S5107C2", // class name
  bases_S5107C2, 1,
  &(vtc_S5107C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S5107C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5107C2),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5107C1  : S5107C2 {
  ::S16113C5_nt s5107c1f0;
  int s5107c1f1[2];
  virtual  ~S5107C1(); // _ZN7S5107C1D1Ev
  virtual void  v1(); // _ZN7S5107C12v1Ev
  virtual void  v2(); // _ZN7S5107C12v2Ev
  virtual void  v3(); // _ZN7S5107C12v3Ev
  S5107C1(); // tgen
};
//SIG(1 S5107C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v7 v8 v9 v10 v11 v12 Fc[2] Fi FC4 Fp} vd v1 v2 v3 FC4 Fi[2]}


 S5107C1 ::~S5107C1(){ note_dtor("S5107C1", this);}
void  S5107C1 ::v1(){vfunc_called(this, "_ZN7S5107C12v1Ev");}
void  S5107C1 ::v2(){vfunc_called(this, "_ZN7S5107C12v2Ev");}
void  S5107C1 ::v3(){vfunc_called(this, "_ZN7S5107C12v3Ev");}
S5107C1 ::S5107C1(){ note_ctor("S5107C1", this);} // tgen

static void Test_S5107C1()
{
  extern Class_Descriptor cd_S5107C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,18)];
    init_test(&cd_S5107C1, buf);
    S5107C1 *dp, &lv = *(dp=new (buf) S5107C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,68), "sizeof(S5107C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5107C1)");
    check_base_class_offset(lv, (S5107C3*)(S5107C2*), 0, "S5107C1");
    check_base_class_offset(lv, (S5107C2*), 0, "S5107C1");
    check_field_offset(lv, s5107c1f0, ABISELECT(64,48), "S5107C1.s5107c1f0");
    check_field_offset(lv, s5107c1f1, ABISELECT(80,60), "S5107C1.s5107c1f1");
    test_class_info(&lv, &cd_S5107C1);
    dp->~S5107C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5107C1(Test_S5107C1, "S5107C1", ABISELECT(88,68));

#else // __cplusplus

extern void _ZN7S5107C1C1Ev();
extern void _ZN7S5107C1D1Ev();
Name_Map name_map_S5107C1[] = {
  NSPAIR(_ZN7S5107C1C1Ev),
  NSPAIR(_ZN7S5107C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5107C3;
extern VTBL_ENTRY _ZTI7S5107C3[];
extern  VTBL_ENTRY _ZTV7S5107C3[];
extern Class_Descriptor cd_S5107C2;
extern VTBL_ENTRY _ZTI7S5107C2[];
extern  VTBL_ENTRY _ZTV7S5107C2[];
static Base_Class bases_S5107C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5107C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5107C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5107C1[];
extern void _ZN7S5107C1D1Ev();
extern void _ZN7S5107C1D0Ev();
extern void _ZN7S5107C32v4Ev();
extern void _ZN7S5107C32v5Ev();
extern void _ZN7S5107C32v6Ev();
extern void _ZN7S5107C22v7Ev();
extern void _ZN7S5107C22v8Ev();
extern void _ZN7S5107C22v9Ev();
extern void _ZN7S5107C23v10Ev();
extern void _ZN7S5107C23v11Ev();
extern void _ZN7S5107C23v12Ev();
extern void _ZN7S5107C12v1Ev();
extern void _ZN7S5107C12v2Ev();
extern void _ZN7S5107C12v3Ev();
static  VTBL_ENTRY vtc_S5107C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5107C1[0]),
  (VTBL_ENTRY)&_ZN7S5107C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5107C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5107C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5107C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5107C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5107C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5107C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5107C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5107C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5107C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5107C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5107C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5107C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5107C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5107C1[];
extern  VTBL_ENTRY _ZTV7S5107C1[];
Class_Descriptor cd_S5107C1 = {  "S5107C1", // class name
  bases_S5107C1, 2,
  &(vtc_S5107C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,68), // object size
  NSPAIRA(_ZTI7S5107C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5107C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14261C2  {
  char s14261c2f0[4];
  int s14261c2f1[3];
  short s14261c2f2[2];
  int s14261c2f3;
  char s14261c2f4[8];
  long s14261c2f5;
  int s14261c2f6[2];
};
//SIG(-1 S14261C2) C1{ Fc[4] Fi[3] Fs[2] Fi Fc[8] Fl Fi[2]}



static void Test_S14261C2()
{
  {
    init_simple_test("S14261C2");
    S14261C2 lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S14261C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14261C2)");
    check_field_offset(lv, s14261c2f0, 0, "S14261C2.s14261c2f0");
    check_field_offset(lv, s14261c2f1, 4, "S14261C2.s14261c2f1");
    check_field_offset(lv, s14261c2f2, 16, "S14261C2.s14261c2f2");
    check_field_offset(lv, s14261c2f3, 20, "S14261C2.s14261c2f3");
    check_field_offset(lv, s14261c2f4, 24, "S14261C2.s14261c2f4");
    check_field_offset(lv, s14261c2f5, 32, "S14261C2.s14261c2f5");
    check_field_offset(lv, s14261c2f6, ABISELECT(40,36), "S14261C2.s14261c2f6");
  }
}
static Arrange_To_Call_Me vS14261C2(Test_S14261C2, "S14261C2", ABISELECT(48,44));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14261C3_nt  {
  int s14261c3f0[3];
  char s14261c3f1[4];
};
//SIG(-1 S14261C3_nt) C1{ Fi[3] Fc[4]}



//skip512 S14261C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14261C4  {
  long s14261c4f0[3];
  int s14261c4f1;
  char s14261c4f2[4];
};
//SIG(1 S14261C4) C1{ Fl[3] Fi Fc[4]}



static void Test_S14261C4()
{
  {
    init_simple_test("S14261C4");
    S14261C4 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S14261C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14261C4)");
    check_field_offset(lv, s14261c4f0, 0, "S14261C4.s14261c4f0");
    check_field_offset(lv, s14261c4f1, ABISELECT(24,12), "S14261C4.s14261c4f1");
    check_field_offset(lv, s14261c4f2, ABISELECT(28,16), "S14261C4.s14261c4f2");
  }
}
static Arrange_To_Call_Me vS14261C4(Test_S14261C4, "S14261C4", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14261C1  {
  void *s14261c1f0;
  int s14261c1f1;
  short s14261c1f2[2];
  int s14261c1f3;
  char s14261c1f4[544];
  ::S14261C2 s14261c1f5;
  ::S14261C3_nt s14261c1f6;
  ::S14261C4 s14261c1f7[9];
  void *s14261c1f8;
  int s14261c1f9;
};
//SIG(1 S14261C1) C1{ Fp Fi Fs[2] Fi Fc[544] FC2{ Fc[4] Fi[3] Fs[2] Fi Fc[8] Fl Fi[2]} FC3{ Fi[3] Fc[4]} FC4{ Fl[3] Fi Fc[4]}[9] Fp Fi}



static void Test_S14261C1()
{
  {
    init_simple_test("S14261C1");
    S14261C1 lv;
    check2(sizeof(lv), ABISELECT(936,808), "sizeof(S14261C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14261C1)");
    check_field_offset(lv, s14261c1f0, 0, "S14261C1.s14261c1f0");
    check_field_offset(lv, s14261c1f1, ABISELECT(8,4), "S14261C1.s14261c1f1");
    check_field_offset(lv, s14261c1f2, ABISELECT(12,8), "S14261C1.s14261c1f2");
    check_field_offset(lv, s14261c1f3, ABISELECT(16,12), "S14261C1.s14261c1f3");
    check_field_offset(lv, s14261c1f4, ABISELECT(20,16), "S14261C1.s14261c1f4");
    check_field_offset(lv, s14261c1f5, ABISELECT(568,560), "S14261C1.s14261c1f5");
    check_field_offset(lv, s14261c1f6, ABISELECT(616,604), "S14261C1.s14261c1f6");
    check_field_offset(lv, s14261c1f7, ABISELECT(632,620), "S14261C1.s14261c1f7");
    check_field_offset(lv, s14261c1f8, ABISELECT(920,800), "S14261C1.s14261c1f8");
    check_field_offset(lv, s14261c1f9, ABISELECT(928,804), "S14261C1.s14261c1f9");
  }
}
static Arrange_To_Call_Me vS14261C1(Test_S14261C1, "S14261C1", ABISELECT(936,808));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7910C9_nt  {
  int s7910c9f0[2];
  void *s7910c9f1;
  int s7910c9f2[2];
  void *s7910c9f3;
  int s7910c9f4;
};
//SIG(-1 S7910C9_nt) C1{ Fi[2] Fp Fi[2] Fp Fi}



//skip512 S7910C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7910C1  : S8511C5_nt {
  ::S6462C12_nt s7910c1f0;
  int s7910c1f1[10];
  char s7910c1f2[2];
  int s7910c1f3[3];
  ::S7910C9_nt s7910c1f4;
  int s7910c1f5;
  virtual  ~S7910C1(); // _ZN7S7910C1D1Ev
  S7910C1(); // tgen
};
//SIG(1 S7910C1) C1{ BC2{ vd m FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}}} vd FC7{ m FC8{ FL[4]}} Fi[10] Fc[2] Fi[3] FC9{ Fi[2] Fp Fi[2] Fp Fi} Fi}


 S7910C1 ::~S7910C1(){ note_dtor("S7910C1", this);}
S7910C1 ::S7910C1(){ note_ctor("S7910C1", this);} // tgen

static void Test_S7910C1()
{
  extern Class_Descriptor cd_S7910C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,35)];
    init_test(&cd_S7910C1, buf);
    S7910C1 *dp, &lv = *(dp=new (buf) S7910C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,136), "sizeof(S7910C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7910C1)");
    check_base_class_offset(lv, (S8511C5_nt*), 0, "S7910C1");
    check_field_offset(lv, s7910c1f0, ABISELECT(24,16), "S7910C1.s7910c1f0");
    check_field_offset(lv, s7910c1f1, ABISELECT(56,48), "S7910C1.s7910c1f1");
    check_field_offset(lv, s7910c1f2, ABISELECT(96,88), "S7910C1.s7910c1f2");
    check_field_offset(lv, s7910c1f3, ABISELECT(100,92), "S7910C1.s7910c1f3");
    check_field_offset(lv, s7910c1f4, ABISELECT(112,104), "S7910C1.s7910c1f4");
    check_field_offset(lv, s7910c1f5, ABISELECT(152,132), "S7910C1.s7910c1f5");
    test_class_info(&lv, &cd_S7910C1);
    dp->~S7910C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7910C1(Test_S7910C1, "S7910C1", ABISELECT(160,136));

#else // __cplusplus

extern void _ZN7S7910C1C1Ev();
extern void _ZN7S7910C1D1Ev();
Name_Map name_map_S7910C1[] = {
  NSPAIR(_ZN7S7910C1C1Ev),
  NSPAIR(_ZN7S7910C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8511C5_nt;
extern VTBL_ENTRY _ZTI10S8511C5_nt[];
extern  VTBL_ENTRY _ZTV10S8511C5_nt[];
static Base_Class bases_S7910C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8511C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7910C1[];
extern void _ZN7S7910C1D1Ev();
extern void _ZN7S7910C1D0Ev();
static  VTBL_ENTRY vtc_S7910C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7910C1[0]),
  (VTBL_ENTRY)&_ZN7S7910C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7910C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S7910C1[];
extern  VTBL_ENTRY _ZTV7S7910C1[];
Class_Descriptor cd_S7910C1 = {  "S7910C1", // class name
  bases_S7910C1, 1,
  &(vtc_S7910C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,136), // object size
  NSPAIRA(_ZTI7S7910C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7910C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7909C8_nt  {
  long s7909c8f0[4];
};
//SIG(-1 S7909C8_nt) C1{ Fl[4]}



//skip512 S7909C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7909C7_nt  {
  ::S7909C8_nt s7909c7f0;
  void  mf7909c7(); // _ZN10S7909C7_nt8mf7909c7Ev
};
//SIG(-1 S7909C7_nt) C1{ m FC2{ Fl[4]}}


void  S7909C7_nt ::mf7909c7(){}

//skip512 S7909C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7909C1  : S8511C5_nt {
  ::S7909C7_nt s7909c1f0;
  int s7909c1f1[10];
  char s7909c1f2[2];
  int s7909c1f3[3];
  ::S7910C9_nt s7909c1f4;
  int s7909c1f5;
  virtual  ~S7909C1(); // _ZN7S7909C1D1Ev
  S7909C1(); // tgen
};
//SIG(1 S7909C1) C1{ BC2{ vd m FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}}} vd FC7{ m FC8{ Fl[4]}} Fi[10] Fc[2] Fi[3] FC9{ Fi[2] Fp Fi[2] Fp Fi} Fi}


 S7909C1 ::~S7909C1(){ note_dtor("S7909C1", this);}
S7909C1 ::S7909C1(){ note_ctor("S7909C1", this);} // tgen

static void Test_S7909C1()
{
  extern Class_Descriptor cd_S7909C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,31)];
    init_test(&cd_S7909C1, buf);
    S7909C1 *dp, &lv = *(dp=new (buf) S7909C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,120), "sizeof(S7909C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7909C1)");
    check_base_class_offset(lv, (S8511C5_nt*), 0, "S7909C1");
    check_field_offset(lv, s7909c1f0, ABISELECT(24,16), "S7909C1.s7909c1f0");
    check_field_offset(lv, s7909c1f1, ABISELECT(56,32), "S7909C1.s7909c1f1");
    check_field_offset(lv, s7909c1f2, ABISELECT(96,72), "S7909C1.s7909c1f2");
    check_field_offset(lv, s7909c1f3, ABISELECT(100,76), "S7909C1.s7909c1f3");
    check_field_offset(lv, s7909c1f4, ABISELECT(112,88), "S7909C1.s7909c1f4");
    check_field_offset(lv, s7909c1f5, ABISELECT(152,116), "S7909C1.s7909c1f5");
    test_class_info(&lv, &cd_S7909C1);
    dp->~S7909C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7909C1(Test_S7909C1, "S7909C1", ABISELECT(160,120));

#else // __cplusplus

extern void _ZN7S7909C1C1Ev();
extern void _ZN7S7909C1D1Ev();
Name_Map name_map_S7909C1[] = {
  NSPAIR(_ZN7S7909C1C1Ev),
  NSPAIR(_ZN7S7909C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8511C5_nt;
extern VTBL_ENTRY _ZTI10S8511C5_nt[];
extern  VTBL_ENTRY _ZTV10S8511C5_nt[];
static Base_Class bases_S7909C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8511C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7909C1[];
extern void _ZN7S7909C1D1Ev();
extern void _ZN7S7909C1D0Ev();
static  VTBL_ENTRY vtc_S7909C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7909C1[0]),
  (VTBL_ENTRY)&_ZN7S7909C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7909C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S7909C1[];
extern  VTBL_ENTRY _ZTV7S7909C1[];
Class_Descriptor cd_S7909C1 = {  "S7909C1", // class name
  bases_S7909C1, 1,
  &(vtc_S7909C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,120), // object size
  NSPAIRA(_ZTI7S7909C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7909C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5108C3  {
  ::S16113C5_nt s5108c3f0;
  int s5108c3f1[2];
  char s5108c3f2;
  virtual  ~S5108C3(); // _ZN7S5108C3D1Ev
  virtual void  v4(); // _ZN7S5108C32v4Ev
  virtual void  v5(); // _ZN7S5108C32v5Ev
  virtual void  v6(); // _ZN7S5108C32v6Ev
  S5108C3(); // tgen
};
//SIG(-1 S5108C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5108C3 ::~S5108C3(){ note_dtor("S5108C3", this);}
void  S5108C3 ::v4(){vfunc_called(this, "_ZN7S5108C32v4Ev");}
void  S5108C3 ::v5(){vfunc_called(this, "_ZN7S5108C32v5Ev");}
void  S5108C3 ::v6(){vfunc_called(this, "_ZN7S5108C32v6Ev");}
S5108C3 ::S5108C3(){ note_ctor("S5108C3", this);} // tgen

static void Test_S5108C3()
{
  extern Class_Descriptor cd_S5108C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5108C3, buf);
    S5108C3 *dp, &lv = *(dp=new (buf) S5108C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5108C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5108C3)");
    check_field_offset(lv, s5108c3f0, ABISELECT(8,4), "S5108C3.s5108c3f0");
    check_field_offset(lv, s5108c3f1, ABISELECT(24,16), "S5108C3.s5108c3f1");
    check_field_offset(lv, s5108c3f2, ABISELECT(32,24), "S5108C3.s5108c3f2");
    test_class_info(&lv, &cd_S5108C3);
    dp->~S5108C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5108C3(Test_S5108C3, "S5108C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5108C3C1Ev();
extern void _ZN7S5108C3D1Ev();
Name_Map name_map_S5108C3[] = {
  NSPAIR(_ZN7S5108C3C1Ev),
  NSPAIR(_ZN7S5108C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5108C3[];
extern void _ZN7S5108C3D1Ev();
extern void _ZN7S5108C3D0Ev();
extern void _ZN7S5108C32v4Ev();
extern void _ZN7S5108C32v5Ev();
extern void _ZN7S5108C32v6Ev();
static  VTBL_ENTRY vtc_S5108C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5108C3[0]),
  (VTBL_ENTRY)&_ZN7S5108C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5108C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5108C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5108C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5108C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5108C3[];
extern  VTBL_ENTRY _ZTV7S5108C3[];
Class_Descriptor cd_S5108C3 = {  "S5108C3", // class name
  0,0,//no base classes
  &(vtc_S5108C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5108C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5108C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5108C2  : S5108C3 {
  char s5108c2f0[2];
  int s5108c2f1;
  ::S16113C5_nt s5108c2f2;
  void *s5108c2f3;
  virtual  ~S5108C2(); // _ZN7S5108C2D1Ev
  virtual void  v7(); // _ZN7S5108C22v7Ev
  virtual void  v8(); // _ZN7S5108C22v8Ev
  virtual void  v9(); // _ZN7S5108C22v9Ev
  virtual void  v10(); // _ZN7S5108C23v10Ev
  virtual void  v11(); // _ZN7S5108C23v11Ev
  virtual void  v12(); // _ZN7S5108C23v12Ev
  S5108C2(); // tgen
};
//SIG(-1 S5108C2) C1{ BC2{ vd v7 v8 v9 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 v5 v6 Fc[2] Fi FC3 Fp}


 S5108C2 ::~S5108C2(){ note_dtor("S5108C2", this);}
void  S5108C2 ::v7(){vfunc_called(this, "_ZN7S5108C22v7Ev");}
void  S5108C2 ::v8(){vfunc_called(this, "_ZN7S5108C22v8Ev");}
void  S5108C2 ::v9(){vfunc_called(this, "_ZN7S5108C22v9Ev");}
void  S5108C2 ::v10(){vfunc_called(this, "_ZN7S5108C23v10Ev");}
void  S5108C2 ::v11(){vfunc_called(this, "_ZN7S5108C23v11Ev");}
void  S5108C2 ::v12(){vfunc_called(this, "_ZN7S5108C23v12Ev");}
S5108C2 ::S5108C2(){ note_ctor("S5108C2", this);} // tgen

static void Test_S5108C2()
{
  extern Class_Descriptor cd_S5108C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S5108C2, buf);
    S5108C2 *dp, &lv = *(dp=new (buf) S5108C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S5108C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5108C2)");
    check_base_class_offset(lv, (S5108C3*), 0, "S5108C2");
    check_field_offset(lv, s5108c2f0, ABISELECT(33,25), "S5108C2.s5108c2f0");
    check_field_offset(lv, s5108c2f1, ABISELECT(36,28), "S5108C2.s5108c2f1");
    check_field_offset(lv, s5108c2f2, ABISELECT(40,32), "S5108C2.s5108c2f2");
    check_field_offset(lv, s5108c2f3, ABISELECT(56,44), "S5108C2.s5108c2f3");
    test_class_info(&lv, &cd_S5108C2);
    dp->~S5108C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5108C2(Test_S5108C2, "S5108C2", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S5108C2C1Ev();
extern void _ZN7S5108C2D1Ev();
Name_Map name_map_S5108C2[] = {
  NSPAIR(_ZN7S5108C2C1Ev),
  NSPAIR(_ZN7S5108C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5108C3;
extern VTBL_ENTRY _ZTI7S5108C3[];
extern  VTBL_ENTRY _ZTV7S5108C3[];
static Base_Class bases_S5108C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5108C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5108C2[];
extern void _ZN7S5108C2D1Ev();
extern void _ZN7S5108C2D0Ev();
extern void _ZN7S5108C32v4Ev();
extern void _ZN7S5108C32v5Ev();
extern void _ZN7S5108C32v6Ev();
extern void _ZN7S5108C22v7Ev();
extern void _ZN7S5108C22v8Ev();
extern void _ZN7S5108C22v9Ev();
extern void _ZN7S5108C23v10Ev();
extern void _ZN7S5108C23v11Ev();
extern void _ZN7S5108C23v12Ev();
static  VTBL_ENTRY vtc_S5108C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5108C2[0]),
  (VTBL_ENTRY)&_ZN7S5108C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5108C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5108C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5108C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5108C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5108C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5108C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5108C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5108C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5108C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5108C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S5108C2[];
extern  VTBL_ENTRY _ZTV7S5108C2[];
Class_Descriptor cd_S5108C2 = {  "S5108C2", // class name
  bases_S5108C2, 1,
  &(vtc_S5108C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S5108C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5108C2),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5108C1  : S5108C2 {
  ::S16113C5_nt s5108c1f0;
  virtual  ~S5108C1(); // _ZN7S5108C1D1Ev
  virtual void  v1(); // _ZN7S5108C12v1Ev
  virtual void  v2(); // _ZN7S5108C12v2Ev
  virtual void  v3(); // _ZN7S5108C12v3Ev
  S5108C1(); // tgen
};
//SIG(1 S5108C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v7 v8 v9 v10 v11 v12 Fc[2] Fi FC4 Fp} vd v1 v2 v3 FC4}


 S5108C1 ::~S5108C1(){ note_dtor("S5108C1", this);}
void  S5108C1 ::v1(){vfunc_called(this, "_ZN7S5108C12v1Ev");}
void  S5108C1 ::v2(){vfunc_called(this, "_ZN7S5108C12v2Ev");}
void  S5108C1 ::v3(){vfunc_called(this, "_ZN7S5108C12v3Ev");}
S5108C1 ::S5108C1(){ note_ctor("S5108C1", this);} // tgen

static void Test_S5108C1()
{
  extern Class_Descriptor cd_S5108C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S5108C1, buf);
    S5108C1 *dp, &lv = *(dp=new (buf) S5108C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S5108C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5108C1)");
    check_base_class_offset(lv, (S5108C3*)(S5108C2*), 0, "S5108C1");
    check_base_class_offset(lv, (S5108C2*), 0, "S5108C1");
    check_field_offset(lv, s5108c1f0, ABISELECT(64,48), "S5108C1.s5108c1f0");
    test_class_info(&lv, &cd_S5108C1);
    dp->~S5108C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5108C1(Test_S5108C1, "S5108C1", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN7S5108C1C1Ev();
extern void _ZN7S5108C1D1Ev();
Name_Map name_map_S5108C1[] = {
  NSPAIR(_ZN7S5108C1C1Ev),
  NSPAIR(_ZN7S5108C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5108C3;
extern VTBL_ENTRY _ZTI7S5108C3[];
extern  VTBL_ENTRY _ZTV7S5108C3[];
extern Class_Descriptor cd_S5108C2;
extern VTBL_ENTRY _ZTI7S5108C2[];
extern  VTBL_ENTRY _ZTV7S5108C2[];
static Base_Class bases_S5108C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5108C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5108C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5108C1[];
extern void _ZN7S5108C1D1Ev();
extern void _ZN7S5108C1D0Ev();
extern void _ZN7S5108C32v4Ev();
extern void _ZN7S5108C32v5Ev();
extern void _ZN7S5108C32v6Ev();
extern void _ZN7S5108C22v7Ev();
extern void _ZN7S5108C22v8Ev();
extern void _ZN7S5108C22v9Ev();
extern void _ZN7S5108C23v10Ev();
extern void _ZN7S5108C23v11Ev();
extern void _ZN7S5108C23v12Ev();
extern void _ZN7S5108C12v1Ev();
extern void _ZN7S5108C12v2Ev();
extern void _ZN7S5108C12v3Ev();
static  VTBL_ENTRY vtc_S5108C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5108C1[0]),
  (VTBL_ENTRY)&_ZN7S5108C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5108C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5108C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5108C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5108C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5108C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5108C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5108C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5108C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5108C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5108C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5108C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5108C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5108C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5108C1[];
extern  VTBL_ENTRY _ZTV7S5108C1[];
Class_Descriptor cd_S5108C1 = {  "S5108C1", // class name
  bases_S5108C1, 2,
  &(vtc_S5108C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI7S5108C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5108C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7913C7_nt  {
  __tsi64 s7913c7f0[4];
  void  mf7913c7(); // _ZN10S7913C7_nt8mf7913c7Ev
};
//SIG(-1 S7913C7_nt) C1{ m FL[4]}


void  S7913C7_nt ::mf7913c7(){}

//skip512 S7913C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7913C1  : S8511C5_nt {
  ::S7913C7_nt s7913c1f0;
  int s7913c1f1[10];
  char s7913c1f2[2];
  int s7913c1f3[3];
  ::S7910C9_nt s7913c1f4;
  int s7913c1f5;
  virtual  ~S7913C1(); // _ZN7S7913C1D1Ev
  S7913C1(); // tgen
};
//SIG(1 S7913C1) C1{ BC2{ vd m FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}}} vd FC7{ m FL[4]} Fi[10] Fc[2] Fi[3] FC8{ Fi[2] Fp Fi[2] Fp Fi} Fi}


 S7913C1 ::~S7913C1(){ note_dtor("S7913C1", this);}
S7913C1 ::S7913C1(){ note_ctor("S7913C1", this);} // tgen

static void Test_S7913C1()
{
  extern Class_Descriptor cd_S7913C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,35)];
    init_test(&cd_S7913C1, buf);
    S7913C1 *dp, &lv = *(dp=new (buf) S7913C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,136), "sizeof(S7913C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7913C1)");
    check_base_class_offset(lv, (S8511C5_nt*), 0, "S7913C1");
    check_field_offset(lv, s7913c1f0, ABISELECT(24,16), "S7913C1.s7913c1f0");
    check_field_offset(lv, s7913c1f1, ABISELECT(56,48), "S7913C1.s7913c1f1");
    check_field_offset(lv, s7913c1f2, ABISELECT(96,88), "S7913C1.s7913c1f2");
    check_field_offset(lv, s7913c1f3, ABISELECT(100,92), "S7913C1.s7913c1f3");
    check_field_offset(lv, s7913c1f4, ABISELECT(112,104), "S7913C1.s7913c1f4");
    check_field_offset(lv, s7913c1f5, ABISELECT(152,132), "S7913C1.s7913c1f5");
    test_class_info(&lv, &cd_S7913C1);
    dp->~S7913C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7913C1(Test_S7913C1, "S7913C1", ABISELECT(160,136));

#else // __cplusplus

extern void _ZN7S7913C1C1Ev();
extern void _ZN7S7913C1D1Ev();
Name_Map name_map_S7913C1[] = {
  NSPAIR(_ZN7S7913C1C1Ev),
  NSPAIR(_ZN7S7913C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8511C5_nt;
extern VTBL_ENTRY _ZTI10S8511C5_nt[];
extern  VTBL_ENTRY _ZTV10S8511C5_nt[];
static Base_Class bases_S7913C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8511C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7913C1[];
extern void _ZN7S7913C1D1Ev();
extern void _ZN7S7913C1D0Ev();
static  VTBL_ENTRY vtc_S7913C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7913C1[0]),
  (VTBL_ENTRY)&_ZN7S7913C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7913C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S7913C1[];
extern  VTBL_ENTRY _ZTV7S7913C1[];
Class_Descriptor cd_S7913C1 = {  "S7913C1", // class name
  bases_S7913C1, 1,
  &(vtc_S7913C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,136), // object size
  NSPAIRA(_ZTI7S7913C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7913C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4418C3  {
  ::S16113C5_nt s4418c3f0;
  int s4418c3f1[2];
  char s4418c3f2;
  virtual  ~S4418C3(); // _ZN7S4418C3D1Ev
  virtual void  v2(); // _ZN7S4418C32v2Ev
  virtual void  v3(); // _ZN7S4418C32v3Ev
  virtual void  v4(); // _ZN7S4418C32v4Ev
  S4418C3(); // tgen
};
//SIG(-1 S4418C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4418C3 ::~S4418C3(){ note_dtor("S4418C3", this);}
void  S4418C3 ::v2(){vfunc_called(this, "_ZN7S4418C32v2Ev");}
void  S4418C3 ::v3(){vfunc_called(this, "_ZN7S4418C32v3Ev");}
void  S4418C3 ::v4(){vfunc_called(this, "_ZN7S4418C32v4Ev");}
S4418C3 ::S4418C3(){ note_ctor("S4418C3", this);} // tgen

static void Test_S4418C3()
{
  extern Class_Descriptor cd_S4418C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4418C3, buf);
    S4418C3 *dp, &lv = *(dp=new (buf) S4418C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4418C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4418C3)");
    check_field_offset(lv, s4418c3f0, ABISELECT(8,4), "S4418C3.s4418c3f0");
    check_field_offset(lv, s4418c3f1, ABISELECT(24,16), "S4418C3.s4418c3f1");
    check_field_offset(lv, s4418c3f2, ABISELECT(32,24), "S4418C3.s4418c3f2");
    test_class_info(&lv, &cd_S4418C3);
    dp->~S4418C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4418C3(Test_S4418C3, "S4418C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4418C3C1Ev();
extern void _ZN7S4418C3D1Ev();
Name_Map name_map_S4418C3[] = {
  NSPAIR(_ZN7S4418C3C1Ev),
  NSPAIR(_ZN7S4418C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4418C3[];
extern void _ZN7S4418C3D1Ev();
extern void _ZN7S4418C3D0Ev();
extern void _ZN7S4418C32v2Ev();
extern void _ZN7S4418C32v3Ev();
extern void _ZN7S4418C32v4Ev();
static  VTBL_ENTRY vtc_S4418C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4418C3[0]),
  (VTBL_ENTRY)&_ZN7S4418C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4418C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4418C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4418C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4418C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4418C3[];
extern  VTBL_ENTRY _ZTV7S4418C3[];
Class_Descriptor cd_S4418C3 = {  "S4418C3", // class name
  0,0,//no base classes
  &(vtc_S4418C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4418C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4418C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4418C2  : S4418C3 {
  void *s4418c2f0[2];
  int s4418c2f1;
  char s4418c2f2;
  virtual  ~S4418C2(); // _ZN7S4418C2D1Ev
  virtual void  v5(); // _ZN7S4418C22v5Ev
  S4418C2(); // tgen
};
//SIG(-1 S4418C2) C1{ BC2{ vd v2 v3 v4 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 Fp[2] Fi Fc}


 S4418C2 ::~S4418C2(){ note_dtor("S4418C2", this);}
void  S4418C2 ::v5(){vfunc_called(this, "_ZN7S4418C22v5Ev");}
S4418C2 ::S4418C2(){ note_ctor("S4418C2", this);} // tgen

static void Test_S4418C2()
{
  extern Class_Descriptor cd_S4418C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4418C2, buf);
    S4418C2 *dp, &lv = *(dp=new (buf) S4418C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4418C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4418C2)");
    check_base_class_offset(lv, (S4418C3*), 0, "S4418C2");
    check_field_offset(lv, s4418c2f0, ABISELECT(40,28), "S4418C2.s4418c2f0");
    check_field_offset(lv, s4418c2f1, ABISELECT(56,36), "S4418C2.s4418c2f1");
    check_field_offset(lv, s4418c2f2, ABISELECT(60,40), "S4418C2.s4418c2f2");
    test_class_info(&lv, &cd_S4418C2);
    dp->~S4418C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4418C2(Test_S4418C2, "S4418C2", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4418C2C1Ev();
extern void _ZN7S4418C2D1Ev();
Name_Map name_map_S4418C2[] = {
  NSPAIR(_ZN7S4418C2C1Ev),
  NSPAIR(_ZN7S4418C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4418C3;
extern VTBL_ENTRY _ZTI7S4418C3[];
extern  VTBL_ENTRY _ZTV7S4418C3[];
static Base_Class bases_S4418C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4418C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4418C2[];
extern void _ZN7S4418C2D1Ev();
extern void _ZN7S4418C2D0Ev();
extern void _ZN7S4418C32v2Ev();
extern void _ZN7S4418C32v3Ev();
extern void _ZN7S4418C32v4Ev();
extern void _ZN7S4418C22v5Ev();
static  VTBL_ENTRY vtc_S4418C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4418C2[0]),
  (VTBL_ENTRY)&_ZN7S4418C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4418C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4418C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4418C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4418C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4418C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4418C2[];
extern  VTBL_ENTRY _ZTV7S4418C2[];
Class_Descriptor cd_S4418C2 = {  "S4418C2", // class name
  bases_S4418C2, 1,
  &(vtc_S4418C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4418C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4418C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4418C1  : S4418C2 {
  int s4418c1f0[2];
  ::S4206C36_nt s4418c1f1;
  virtual  ~S4418C1(); // _ZN7S4418C1D1Ev
  virtual void  v1(); // _ZN7S4418C12v1Ev
  S4418C1(); // tgen
};
//SIG(1 S4418C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 Fp[2] Fi Fc} vd v1 Fi[2] FC6{ m Fp Fi[2] FC5}}


 S4418C1 ::~S4418C1(){ note_dtor("S4418C1", this);}
void  S4418C1 ::v1(){vfunc_called(this, "_ZN7S4418C12v1Ev");}
S4418C1 ::S4418C1(){ note_ctor("S4418C1", this);} // tgen

static void Test_S4418C1()
{
  extern Class_Descriptor cd_S4418C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,18)];
    init_test(&cd_S4418C1, buf);
    S4418C1 *dp, &lv = *(dp=new (buf) S4418C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S4418C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4418C1)");
    check_base_class_offset(lv, (S4418C3*)(S4418C2*), 0, "S4418C1");
    check_base_class_offset(lv, (S4418C2*), 0, "S4418C1");
    check_field_offset(lv, s4418c1f0, ABISELECT(64,44), "S4418C1.s4418c1f0");
    check_field_offset(lv, s4418c1f1, ABISELECT(72,52), "S4418C1.s4418c1f1");
    test_class_info(&lv, &cd_S4418C1);
    dp->~S4418C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4418C1(Test_S4418C1, "S4418C1", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN7S4418C1C1Ev();
extern void _ZN7S4418C1D1Ev();
Name_Map name_map_S4418C1[] = {
  NSPAIR(_ZN7S4418C1C1Ev),
  NSPAIR(_ZN7S4418C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4418C3;
extern VTBL_ENTRY _ZTI7S4418C3[];
extern  VTBL_ENTRY _ZTV7S4418C3[];
extern Class_Descriptor cd_S4418C2;
extern VTBL_ENTRY _ZTI7S4418C2[];
extern  VTBL_ENTRY _ZTV7S4418C2[];
static Base_Class bases_S4418C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4418C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4418C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4418C1[];
extern void _ZN7S4418C1D1Ev();
extern void _ZN7S4418C1D0Ev();
extern void _ZN7S4418C32v2Ev();
extern void _ZN7S4418C32v3Ev();
extern void _ZN7S4418C32v4Ev();
extern void _ZN7S4418C22v5Ev();
extern void _ZN7S4418C12v1Ev();
static  VTBL_ENTRY vtc_S4418C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4418C1[0]),
  (VTBL_ENTRY)&_ZN7S4418C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4418C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4418C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4418C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4418C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4418C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4418C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4418C1[];
extern  VTBL_ENTRY _ZTV7S4418C1[];
Class_Descriptor cd_S4418C1 = {  "S4418C1", // class name
  bases_S4418C1, 2,
  &(vtc_S4418C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI7S4418C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4418C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15969C2_nt  {
  int s15969c2f0[2];
  __tsi64 s15969c2f1;
  void  mf15969c2(); // _ZN11S15969C2_nt9mf15969c2Ev
};
//SIG(-1 S15969C2_nt) C1{ m Fi[2] FL}


void  S15969C2_nt ::mf15969c2(){}

//skip512 S15969C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15969C7_nt  {
  ::S4206C36_nt s15969c7f0;
  void  mf15969c7(); // _ZN11S15969C7_nt9mf15969c7Ev
};
//SIG(-1 S15969C7_nt) C1{ m FC2{ m Fp Fi[2] FC3{ m}}}


void  S15969C7_nt ::mf15969c7(){}

//skip512 S15969C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15969C1  {
  ::S15969C2_nt s15969c1f0;
  char s15969c1f1;
  ::S16113C5_nt s15969c1f2;
  ::S16113C9 s15969c1f3;
  ::S15969C7_nt s15969c1f4;
  void  mf15969c1(); // _ZN8S15969C19mf15969c1Ev
};
//SIG(1 S15969C1) C1{ m FC2{ m Fi[2] FL} Fc FC3{ m Fp Fi FC4{ m}} FC5{ m Fi FC6{ Fc[163] Fi FL}[5]} FC7{ m FC8{ m Fp Fi[2] FC4}}}


void  S15969C1 ::mf15969c1(){}

static void Test_S15969C1()
{
  {
    init_simple_test("S15969C1");
    S15969C1 lv;
    check2(sizeof(lv), ABISELECT(952,932), "sizeof(S15969C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15969C1)");
    check_field_offset(lv, s15969c1f0, 0, "S15969C1.s15969c1f0");
    check_field_offset(lv, s15969c1f1, 16, "S15969C1.s15969c1f1");
    check_field_offset(lv, s15969c1f2, ABISELECT(24,20), "S15969C1.s15969c1f2");
    check_field_offset(lv, s15969c1f3, ABISELECT(40,32), "S15969C1.s15969c1f3");
    check_field_offset(lv, s15969c1f4, ABISELECT(928,916), "S15969C1.s15969c1f4");
  }
}
static Arrange_To_Call_Me vS15969C1(Test_S15969C1, "S15969C1", ABISELECT(952,932));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9793C2  {
  void *s9793c2f0[3];
  ::S16113C5_nt s9793c2f1;
  ::S9901C5_nt s9793c2f2;
  int s9793c2f3;
  virtual  ~S9793C2(); // _ZN7S9793C2D1Ev
  virtual void  v4(); // _ZN7S9793C22v4Ev
  virtual void  v5(); // _ZN7S9793C22v5Ev
  virtual void  v6(); // _ZN7S9793C22v6Ev
  virtual void  v7(); // _ZN7S9793C22v7Ev
  virtual void  v8(); // _ZN7S9793C22v8Ev
  virtual void  v9(); // _ZN7S9793C22v9Ev
  virtual void  v10(); // _ZN7S9793C23v10Ev
  virtual void  v11(); // _ZN7S9793C23v11Ev
  S9793C2(); // tgen
};
//SIG(-1 S9793C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[3] FC2{ m Fp Fi FC3{ m}} FC4{ FC5{ Fc[20]} Fc[16]} Fi}


 S9793C2 ::~S9793C2(){ note_dtor("S9793C2", this);}
void  S9793C2 ::v4(){vfunc_called(this, "_ZN7S9793C22v4Ev");}
void  S9793C2 ::v5(){vfunc_called(this, "_ZN7S9793C22v5Ev");}
void  S9793C2 ::v6(){vfunc_called(this, "_ZN7S9793C22v6Ev");}
void  S9793C2 ::v7(){vfunc_called(this, "_ZN7S9793C22v7Ev");}
void  S9793C2 ::v8(){vfunc_called(this, "_ZN7S9793C22v8Ev");}
void  S9793C2 ::v9(){vfunc_called(this, "_ZN7S9793C22v9Ev");}
void  S9793C2 ::v10(){vfunc_called(this, "_ZN7S9793C23v10Ev");}
void  S9793C2 ::v11(){vfunc_called(this, "_ZN7S9793C23v11Ev");}
S9793C2 ::S9793C2(){ note_ctor("S9793C2", this);} // tgen

static void Test_S9793C2()
{
  extern Class_Descriptor cd_S9793C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,18)];
    init_test(&cd_S9793C2, buf);
    S9793C2 *dp, &lv = *(dp=new (buf) S9793C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,68), "sizeof(S9793C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9793C2)");
    check_field_offset(lv, s9793c2f0, ABISELECT(8,4), "S9793C2.s9793c2f0");
    check_field_offset(lv, s9793c2f1, ABISELECT(32,16), "S9793C2.s9793c2f1");
    check_field_offset(lv, s9793c2f2, ABISELECT(48,28), "S9793C2.s9793c2f2");
    check_field_offset(lv, s9793c2f3, ABISELECT(84,64), "S9793C2.s9793c2f3");
    test_class_info(&lv, &cd_S9793C2);
    dp->~S9793C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9793C2(Test_S9793C2, "S9793C2", ABISELECT(88,68));

#else // __cplusplus

extern void _ZN7S9793C2C1Ev();
extern void _ZN7S9793C2D1Ev();
Name_Map name_map_S9793C2[] = {
  NSPAIR(_ZN7S9793C2C1Ev),
  NSPAIR(_ZN7S9793C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9793C2[];
extern void _ZN7S9793C2D1Ev();
extern void _ZN7S9793C2D0Ev();
extern void _ZN7S9793C22v4Ev();
extern void _ZN7S9793C22v5Ev();
extern void _ZN7S9793C22v6Ev();
extern void _ZN7S9793C22v7Ev();
extern void _ZN7S9793C22v8Ev();
extern void _ZN7S9793C22v9Ev();
extern void _ZN7S9793C23v10Ev();
extern void _ZN7S9793C23v11Ev();
static  VTBL_ENTRY vtc_S9793C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9793C2[0]),
  (VTBL_ENTRY)&_ZN7S9793C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9793C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9793C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9793C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9793C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9793C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9793C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9793C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9793C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9793C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S9793C2[];
extern  VTBL_ENTRY _ZTV7S9793C2[];
Class_Descriptor cd_S9793C2 = {  "S9793C2", // class name
  0,0,//no base classes
  &(vtc_S9793C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,68), // object size
  NSPAIRA(_ZTI7S9793C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9793C2),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9793C1  : S9793C2 {
  int s9793c1f0;
  virtual  ~S9793C1(); // _ZN7S9793C1D1Ev
  virtual void  v1(); // _ZN7S9793C12v1Ev
  virtual void  v2(); // _ZN7S9793C12v2Ev
  virtual void  v3(); // _ZN7S9793C12v3Ev
  S9793C1(); // tgen
};
//SIG(1 S9793C1) C1{ BC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC3{ m Fp Fi FC4{ m}} FC5{ FC6{ Fc[20]} Fc[16]} Fi} vd v1 v2 v3 Fi}


 S9793C1 ::~S9793C1(){ note_dtor("S9793C1", this);}
void  S9793C1 ::v1(){vfunc_called(this, "_ZN7S9793C12v1Ev");}
void  S9793C1 ::v2(){vfunc_called(this, "_ZN7S9793C12v2Ev");}
void  S9793C1 ::v3(){vfunc_called(this, "_ZN7S9793C12v3Ev");}
S9793C1 ::S9793C1(){ note_ctor("S9793C1", this);} // tgen

static void Test_S9793C1()
{
  extern Class_Descriptor cd_S9793C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S9793C1, buf);
    S9793C1 *dp, &lv = *(dp=new (buf) S9793C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S9793C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9793C1)");
    check_base_class_offset(lv, (S9793C2*), 0, "S9793C1");
    check_field_offset(lv, s9793c1f0, ABISELECT(88,68), "S9793C1.s9793c1f0");
    test_class_info(&lv, &cd_S9793C1);
    dp->~S9793C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9793C1(Test_S9793C1, "S9793C1", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S9793C1C1Ev();
extern void _ZN7S9793C1D1Ev();
Name_Map name_map_S9793C1[] = {
  NSPAIR(_ZN7S9793C1C1Ev),
  NSPAIR(_ZN7S9793C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9793C2;
extern VTBL_ENTRY _ZTI7S9793C2[];
extern  VTBL_ENTRY _ZTV7S9793C2[];
static Base_Class bases_S9793C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9793C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9793C1[];
extern void _ZN7S9793C1D1Ev();
extern void _ZN7S9793C1D0Ev();
extern void _ZN7S9793C22v4Ev();
extern void _ZN7S9793C22v5Ev();
extern void _ZN7S9793C22v6Ev();
extern void _ZN7S9793C22v7Ev();
extern void _ZN7S9793C22v8Ev();
extern void _ZN7S9793C22v9Ev();
extern void _ZN7S9793C23v10Ev();
extern void _ZN7S9793C23v11Ev();
extern void _ZN7S9793C12v1Ev();
extern void _ZN7S9793C12v2Ev();
extern void _ZN7S9793C12v3Ev();
static  VTBL_ENTRY vtc_S9793C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9793C1[0]),
  (VTBL_ENTRY)&_ZN7S9793C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9793C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9793C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9793C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9793C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9793C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9793C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9793C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9793C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9793C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9793C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9793C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9793C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9793C1[];
extern  VTBL_ENTRY _ZTV7S9793C1[];
Class_Descriptor cd_S9793C1 = {  "S9793C1", // class name
  bases_S9793C1, 1,
  &(vtc_S9793C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S9793C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9793C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5426C3  {
  virtual  ~S5426C3(); // _ZN7S5426C3D1Ev
  virtual void  v8(); // _ZN7S5426C32v8Ev
  virtual void  v9(); // _ZN7S5426C32v9Ev
  S5426C3(); // tgen
};
//SIG(-1 S5426C3) C1{ vd v1 v2}


 S5426C3 ::~S5426C3(){ note_dtor("S5426C3", this);}
void  S5426C3 ::v8(){vfunc_called(this, "_ZN7S5426C32v8Ev");}
void  S5426C3 ::v9(){vfunc_called(this, "_ZN7S5426C32v9Ev");}
S5426C3 ::S5426C3(){ note_ctor("S5426C3", this);} // tgen

static void Test_S5426C3()
{
  extern Class_Descriptor cd_S5426C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5426C3, buf);
    S5426C3 *dp, &lv = *(dp=new (buf) S5426C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5426C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5426C3)");
    test_class_info(&lv, &cd_S5426C3);
    dp->~S5426C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5426C3(Test_S5426C3, "S5426C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5426C3C1Ev();
extern void _ZN7S5426C3D1Ev();
Name_Map name_map_S5426C3[] = {
  NSPAIR(_ZN7S5426C3C1Ev),
  NSPAIR(_ZN7S5426C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5426C3[];
extern void _ZN7S5426C3D1Ev();
extern void _ZN7S5426C3D0Ev();
extern void _ZN7S5426C32v8Ev();
extern void _ZN7S5426C32v9Ev();
static  VTBL_ENTRY vtc_S5426C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5426C3[0]),
  (VTBL_ENTRY)&_ZN7S5426C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5426C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5426C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5426C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S5426C3[];
extern  VTBL_ENTRY _ZTV7S5426C3[];
Class_Descriptor cd_S5426C3 = {  "S5426C3", // class name
  0,0,//no base classes
  &(vtc_S5426C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5426C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5426C3),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5426C2  : S5426C3 {
  virtual  ~S5426C2(); // _ZN7S5426C2D1Ev
  virtual void  v10(); // _ZN7S5426C23v10Ev
  virtual void  v11(); // _ZN7S5426C23v11Ev
  virtual void  v12(); // _ZN7S5426C23v12Ev
  virtual void  v13(); // _ZN7S5426C23v13Ev
  virtual void  v14(); // _ZN7S5426C23v14Ev
  virtual void  v15(); // _ZN7S5426C23v15Ev
  S5426C2(); // tgen
};
//SIG(-1 S5426C2) C1{ BC2{ vd v7 v8} vd v1 v2 v3 v4 v5 v6}


 S5426C2 ::~S5426C2(){ note_dtor("S5426C2", this);}
void  S5426C2 ::v10(){vfunc_called(this, "_ZN7S5426C23v10Ev");}
void  S5426C2 ::v11(){vfunc_called(this, "_ZN7S5426C23v11Ev");}
void  S5426C2 ::v12(){vfunc_called(this, "_ZN7S5426C23v12Ev");}
void  S5426C2 ::v13(){vfunc_called(this, "_ZN7S5426C23v13Ev");}
void  S5426C2 ::v14(){vfunc_called(this, "_ZN7S5426C23v14Ev");}
void  S5426C2 ::v15(){vfunc_called(this, "_ZN7S5426C23v15Ev");}
S5426C2 ::S5426C2(){ note_ctor("S5426C2", this);} // tgen

static void Test_S5426C2()
{
  extern Class_Descriptor cd_S5426C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5426C2, buf);
    S5426C2 *dp, &lv = *(dp=new (buf) S5426C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5426C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5426C2)");
    check_base_class_offset(lv, (S5426C3*), 0, "S5426C2");
    test_class_info(&lv, &cd_S5426C2);
    dp->~S5426C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5426C2(Test_S5426C2, "S5426C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5426C2C1Ev();
extern void _ZN7S5426C2D1Ev();
Name_Map name_map_S5426C2[] = {
  NSPAIR(_ZN7S5426C2C1Ev),
  NSPAIR(_ZN7S5426C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5426C3;
extern VTBL_ENTRY _ZTI7S5426C3[];
extern  VTBL_ENTRY _ZTV7S5426C3[];
static Base_Class bases_S5426C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5426C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5426C2[];
extern void _ZN7S5426C2D1Ev();
extern void _ZN7S5426C2D0Ev();
extern void _ZN7S5426C32v8Ev();
extern void _ZN7S5426C32v9Ev();
extern void _ZN7S5426C23v10Ev();
extern void _ZN7S5426C23v11Ev();
extern void _ZN7S5426C23v12Ev();
extern void _ZN7S5426C23v13Ev();
extern void _ZN7S5426C23v14Ev();
extern void _ZN7S5426C23v15Ev();
static  VTBL_ENTRY vtc_S5426C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5426C2[0]),
  (VTBL_ENTRY)&_ZN7S5426C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5426C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5426C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5426C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5426C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5426C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5426C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5426C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5426C23v14Ev,
  (VTBL_ENTRY)&_ZN7S5426C23v15Ev,
};
extern VTBL_ENTRY _ZTI7S5426C2[];
extern  VTBL_ENTRY _ZTV7S5426C2[];
Class_Descriptor cd_S5426C2 = {  "S5426C2", // class name
  bases_S5426C2, 1,
  &(vtc_S5426C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5426C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5426C2),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5426C1  : S5426C2 {
  void *s5426c1f0[2];
  ::S16113C5_nt s5426c1f1;
  __tsi64 s5426c1f2;
  int s5426c1f3;
  virtual void  v1(); // _ZN7S5426C12v1Ev
  virtual void  v2(); // _ZN7S5426C12v2Ev
  virtual void  v3(); // _ZN7S5426C12v3Ev
  virtual void  v4(); // _ZN7S5426C12v4Ev
  virtual void  v5(); // _ZN7S5426C12v5Ev
  virtual void  v6(); // _ZN7S5426C12v6Ev
  virtual void  v7(); // _ZN7S5426C12v7Ev
  ~S5426C1(); // tgen
  S5426C1(); // tgen
};
//SIG(1 S5426C1) C1{ BC2{ BC3{ vd v8 v9} vd v10 v11 v12 v13 v14 v15} v1 v2 v3 v4 v5 v6 v7 Fp[2] FC4{ m Fp Fi FC5{ m}} FL Fi}


void  S5426C1 ::v1(){vfunc_called(this, "_ZN7S5426C12v1Ev");}
void  S5426C1 ::v2(){vfunc_called(this, "_ZN7S5426C12v2Ev");}
void  S5426C1 ::v3(){vfunc_called(this, "_ZN7S5426C12v3Ev");}
void  S5426C1 ::v4(){vfunc_called(this, "_ZN7S5426C12v4Ev");}
void  S5426C1 ::v5(){vfunc_called(this, "_ZN7S5426C12v5Ev");}
void  S5426C1 ::v6(){vfunc_called(this, "_ZN7S5426C12v6Ev");}
void  S5426C1 ::v7(){vfunc_called(this, "_ZN7S5426C12v7Ev");}
S5426C1 ::~S5426C1(){ note_dtor("S5426C1", this);} // tgen
S5426C1 ::S5426C1(){ note_ctor("S5426C1", this);} // tgen

static void Test_S5426C1()
{
  extern Class_Descriptor cd_S5426C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S5426C1, buf);
    S5426C1 *dp, &lv = *(dp=new (buf) S5426C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S5426C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5426C1)");
    check_base_class_offset(lv, (S5426C3*)(S5426C2*), 0, "S5426C1");
    check_base_class_offset(lv, (S5426C2*), 0, "S5426C1");
    check_field_offset(lv, s5426c1f0, ABISELECT(8,4), "S5426C1.s5426c1f0");
    check_field_offset(lv, s5426c1f1, ABISELECT(24,12), "S5426C1.s5426c1f1");
    check_field_offset(lv, s5426c1f2, ABISELECT(40,24), "S5426C1.s5426c1f2");
    check_field_offset(lv, s5426c1f3, ABISELECT(48,32), "S5426C1.s5426c1f3");
    test_class_info(&lv, &cd_S5426C1);
    dp->~S5426C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5426C1(Test_S5426C1, "S5426C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S5426C1C1Ev();
extern void _ZN7S5426C1D1Ev();
Name_Map name_map_S5426C1[] = {
  NSPAIR(_ZN7S5426C1C1Ev),
  NSPAIR(_ZN7S5426C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5426C3;
extern VTBL_ENTRY _ZTI7S5426C3[];
extern  VTBL_ENTRY _ZTV7S5426C3[];
extern Class_Descriptor cd_S5426C2;
extern VTBL_ENTRY _ZTI7S5426C2[];
extern  VTBL_ENTRY _ZTV7S5426C2[];
static Base_Class bases_S5426C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5426C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5426C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5426C1[];
extern void _ZN7S5426C1D1Ev();
extern void _ZN7S5426C1D0Ev();
extern void _ZN7S5426C32v8Ev();
extern void _ZN7S5426C32v9Ev();
extern void _ZN7S5426C23v10Ev();
extern void _ZN7S5426C23v11Ev();
extern void _ZN7S5426C23v12Ev();
extern void _ZN7S5426C23v13Ev();
extern void _ZN7S5426C23v14Ev();
extern void _ZN7S5426C23v15Ev();
extern void _ZN7S5426C12v1Ev();
extern void _ZN7S5426C12v2Ev();
extern void _ZN7S5426C12v3Ev();
extern void _ZN7S5426C12v4Ev();
extern void _ZN7S5426C12v5Ev();
extern void _ZN7S5426C12v6Ev();
extern void _ZN7S5426C12v7Ev();
static  VTBL_ENTRY vtc_S5426C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5426C1[0]),
  (VTBL_ENTRY)&_ZN7S5426C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5426C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5426C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5426C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5426C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5426C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5426C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5426C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5426C23v14Ev,
  (VTBL_ENTRY)&_ZN7S5426C23v15Ev,
  (VTBL_ENTRY)&_ZN7S5426C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5426C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5426C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5426C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5426C12v5Ev,
  (VTBL_ENTRY)&_ZN7S5426C12v6Ev,
  (VTBL_ENTRY)&_ZN7S5426C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S5426C1[];
extern  VTBL_ENTRY _ZTV7S5426C1[];
Class_Descriptor cd_S5426C1 = {  "S5426C1", // class name
  bases_S5426C1, 2,
  &(vtc_S5426C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S5426C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5426C1),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6737C2  {
  virtual  ~S6737C2(); // _ZN7S6737C2D1Ev
  virtual void  v3(); // _ZN7S6737C22v3Ev
  virtual void  v4(); // _ZN7S6737C22v4Ev
  S6737C2(); // tgen
};
//SIG(-1 S6737C2) C1{ vd v1 v2}


 S6737C2 ::~S6737C2(){ note_dtor("S6737C2", this);}
void  S6737C2 ::v3(){vfunc_called(this, "_ZN7S6737C22v3Ev");}
void  S6737C2 ::v4(){vfunc_called(this, "_ZN7S6737C22v4Ev");}
S6737C2 ::S6737C2(){ note_ctor("S6737C2", this);} // tgen

static void Test_S6737C2()
{
  extern Class_Descriptor cd_S6737C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6737C2, buf);
    S6737C2 *dp, &lv = *(dp=new (buf) S6737C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6737C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6737C2)");
    test_class_info(&lv, &cd_S6737C2);
    dp->~S6737C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6737C2(Test_S6737C2, "S6737C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6737C2C1Ev();
extern void _ZN7S6737C2D1Ev();
Name_Map name_map_S6737C2[] = {
  NSPAIR(_ZN7S6737C2C1Ev),
  NSPAIR(_ZN7S6737C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6737C2[];
extern void _ZN7S6737C2D1Ev();
extern void _ZN7S6737C2D0Ev();
extern void _ZN7S6737C22v3Ev();
extern void _ZN7S6737C22v4Ev();
static  VTBL_ENTRY vtc_S6737C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6737C2[0]),
  (VTBL_ENTRY)&_ZN7S6737C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6737C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6737C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6737C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S6737C2[];
extern  VTBL_ENTRY _ZTV7S6737C2[];
Class_Descriptor cd_S6737C2 = {  "S6737C2", // class name
  0,0,//no base classes
  &(vtc_S6737C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6737C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6737C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6737C3  {
  void *s6737c3f0;
  ::S2440C19_nt s6737c3f1;
  ::S2440C19_nt s6737c3f2;
  ::S4206C14_nt s6737c3f3;
  int s6737c3f4;
  ::S16113C5_nt s6737c3f5;
  void *s6737c3f6[5];
  void  mf6737c3(); // _ZN7S6737C38mf6737c3Ev
};
//SIG(-1 S6737C3) C1{ m Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC2 FC5{ m FC6{ m FL[2]}} Fi FC7{ m Fp Fi FC8{ m}} Fp[5]}


void  S6737C3 ::mf6737c3(){}

static void Test_S6737C3()
{
  {
    init_simple_test("S6737C3");
    S6737C3 lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S6737C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6737C3)");
    check_field_offset(lv, s6737c3f0, 0, "S6737C3.s6737c3f0");
    check_field_offset(lv, s6737c3f1, ABISELECT(8,4), "S6737C3.s6737c3f1");
    check_field_offset(lv, s6737c3f2, ABISELECT(32,20), "S6737C3.s6737c3f2");
    check_field_offset(lv, s6737c3f3, ABISELECT(56,36), "S6737C3.s6737c3f3");
    check_field_offset(lv, s6737c3f4, ABISELECT(72,52), "S6737C3.s6737c3f4");
    check_field_offset(lv, s6737c3f5, ABISELECT(80,56), "S6737C3.s6737c3f5");
    check_field_offset(lv, s6737c3f6, ABISELECT(96,68), "S6737C3.s6737c3f6");
  }
}
static Arrange_To_Call_Me vS6737C3(Test_S6737C3, "S6737C3", ABISELECT(136,88));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6737C1  : S6737C2 {
  ::S6737C3 s6737c1f0;
  virtual void  v1(); // _ZN7S6737C12v1Ev
  virtual void  v2(); // _ZN7S6737C12v2Ev
  ~S6737C1(); // tgen
  S6737C1(); // tgen
};
//SIG(1 S6737C1) C1{ BC2{ vd v3 v4} v1 v2 FC3{ m Fp FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} FC4 FC7{ m FC8{ m FL[2]}} Fi FC9{ m Fp Fi FC10{ m}} Fp[5]}}


void  S6737C1 ::v1(){vfunc_called(this, "_ZN7S6737C12v1Ev");}
void  S6737C1 ::v2(){vfunc_called(this, "_ZN7S6737C12v2Ev");}
S6737C1 ::~S6737C1(){ note_dtor("S6737C1", this);} // tgen
S6737C1 ::S6737C1(){ note_ctor("S6737C1", this);} // tgen

static void Test_S6737C1()
{
  extern Class_Descriptor cd_S6737C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,24)];
    init_test(&cd_S6737C1, buf);
    S6737C1 *dp, &lv = *(dp=new (buf) S6737C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,92), "sizeof(S6737C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6737C1)");
    check_base_class_offset(lv, (S6737C2*), 0, "S6737C1");
    check_field_offset(lv, s6737c1f0, ABISELECT(8,4), "S6737C1.s6737c1f0");
    test_class_info(&lv, &cd_S6737C1);
    dp->~S6737C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6737C1(Test_S6737C1, "S6737C1", ABISELECT(144,92));

#else // __cplusplus

extern void _ZN7S6737C1C1Ev();
extern void _ZN7S6737C1D1Ev();
Name_Map name_map_S6737C1[] = {
  NSPAIR(_ZN7S6737C1C1Ev),
  NSPAIR(_ZN7S6737C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6737C2;
extern VTBL_ENTRY _ZTI7S6737C2[];
extern  VTBL_ENTRY _ZTV7S6737C2[];
static Base_Class bases_S6737C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6737C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6737C1[];
extern void _ZN7S6737C1D1Ev();
extern void _ZN7S6737C1D0Ev();
extern void _ZN7S6737C22v3Ev();
extern void _ZN7S6737C22v4Ev();
extern void _ZN7S6737C12v1Ev();
extern void _ZN7S6737C12v2Ev();
static  VTBL_ENTRY vtc_S6737C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6737C1[0]),
  (VTBL_ENTRY)&_ZN7S6737C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6737C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6737C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6737C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6737C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6737C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6737C1[];
extern  VTBL_ENTRY _ZTV7S6737C1[];
Class_Descriptor cd_S6737C1 = {  "S6737C1", // class name
  bases_S6737C1, 1,
  &(vtc_S6737C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,92), // object size
  NSPAIRA(_ZTI7S6737C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6737C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10124C2  {
  void *s10124c2f0[2];
  int s10124c2f1[7];
  virtual  ~S10124C2(); // _ZN8S10124C2D1Ev
  virtual void  v7(); // _ZN8S10124C22v7Ev
  virtual void  v8(); // _ZN8S10124C22v8Ev
  virtual void  v9(); // _ZN8S10124C22v9Ev
  virtual void  v10(); // _ZN8S10124C23v10Ev
  virtual void  v11(); // _ZN8S10124C23v11Ev
  virtual void  v12(); // _ZN8S10124C23v12Ev
  virtual void  v13(); // _ZN8S10124C23v13Ev
  S10124C2(); // tgen
};
//SIG(-1 S10124C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 Fp[2] Fi[7]}


 S10124C2 ::~S10124C2(){ note_dtor("S10124C2", this);}
void  S10124C2 ::v7(){vfunc_called(this, "_ZN8S10124C22v7Ev");}
void  S10124C2 ::v8(){vfunc_called(this, "_ZN8S10124C22v8Ev");}
void  S10124C2 ::v9(){vfunc_called(this, "_ZN8S10124C22v9Ev");}
void  S10124C2 ::v10(){vfunc_called(this, "_ZN8S10124C23v10Ev");}
void  S10124C2 ::v11(){vfunc_called(this, "_ZN8S10124C23v11Ev");}
void  S10124C2 ::v12(){vfunc_called(this, "_ZN8S10124C23v12Ev");}
void  S10124C2 ::v13(){vfunc_called(this, "_ZN8S10124C23v13Ev");}
S10124C2 ::S10124C2(){ note_ctor("S10124C2", this);} // tgen

static void Test_S10124C2()
{
  extern Class_Descriptor cd_S10124C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S10124C2, buf);
    S10124C2 *dp, &lv = *(dp=new (buf) S10124C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S10124C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10124C2)");
    check_field_offset(lv, s10124c2f0, ABISELECT(8,4), "S10124C2.s10124c2f0");
    check_field_offset(lv, s10124c2f1, ABISELECT(24,12), "S10124C2.s10124c2f1");
    test_class_info(&lv, &cd_S10124C2);
    dp->~S10124C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10124C2(Test_S10124C2, "S10124C2", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN8S10124C2C1Ev();
extern void _ZN8S10124C2D1Ev();
Name_Map name_map_S10124C2[] = {
  NSPAIR(_ZN8S10124C2C1Ev),
  NSPAIR(_ZN8S10124C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10124C2[];
extern void _ZN8S10124C2D1Ev();
extern void _ZN8S10124C2D0Ev();
extern void _ZN8S10124C22v7Ev();
extern void _ZN8S10124C22v8Ev();
extern void _ZN8S10124C22v9Ev();
extern void _ZN8S10124C23v10Ev();
extern void _ZN8S10124C23v11Ev();
extern void _ZN8S10124C23v12Ev();
extern void _ZN8S10124C23v13Ev();
static  VTBL_ENTRY vtc_S10124C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10124C2[0]),
  (VTBL_ENTRY)&_ZN8S10124C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10124C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10124C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10124C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10124C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10124C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10124C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10124C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10124C23v13Ev,
};
extern VTBL_ENTRY _ZTI8S10124C2[];
extern  VTBL_ENTRY _ZTV8S10124C2[];
Class_Descriptor cd_S10124C2 = {  "S10124C2", // class name
  0,0,//no base classes
  &(vtc_S10124C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI8S10124C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10124C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10124C1  : S10124C2 {
  int s10124c1f0;
  void *s10124c1f1;
  __tsi64 s10124c1f2;
  int s10124c1f3[2];
  void *s10124c1f4;
  int s10124c1f5[3];
  void *s10124c1f6;
  virtual  ~S10124C1(); // _ZN8S10124C1D1Ev
  virtual void  v1(); // _ZN8S10124C12v1Ev
  virtual void  v2(); // _ZN8S10124C12v2Ev
  virtual void  v3(); // _ZN8S10124C12v3Ev
  virtual void  v4(); // _ZN8S10124C12v4Ev
  virtual void  v5(); // _ZN8S10124C12v5Ev
  virtual void  v6(); // _ZN8S10124C12v6Ev
  S10124C1(); // tgen
};
//SIG(1 S10124C1) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 v13 Fp[2] Fi[7]} vd v1 v2 v3 v4 v5 v6 Fi Fp FL Fi[2] Fp Fi[3] Fp}


 S10124C1 ::~S10124C1(){ note_dtor("S10124C1", this);}
void  S10124C1 ::v1(){vfunc_called(this, "_ZN8S10124C12v1Ev");}
void  S10124C1 ::v2(){vfunc_called(this, "_ZN8S10124C12v2Ev");}
void  S10124C1 ::v3(){vfunc_called(this, "_ZN8S10124C12v3Ev");}
void  S10124C1 ::v4(){vfunc_called(this, "_ZN8S10124C12v4Ev");}
void  S10124C1 ::v5(){vfunc_called(this, "_ZN8S10124C12v5Ev");}
void  S10124C1 ::v6(){vfunc_called(this, "_ZN8S10124C12v6Ev");}
S10124C1 ::S10124C1(){ note_ctor("S10124C1", this);} // tgen

static void Test_S10124C1()
{
  extern Class_Descriptor cd_S10124C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,22)];
    init_test(&cd_S10124C1, buf);
    S10124C1 *dp, &lv = *(dp=new (buf) S10124C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,84), "sizeof(S10124C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10124C1)");
    check_base_class_offset(lv, (S10124C2*), 0, "S10124C1");
    check_field_offset(lv, s10124c1f0, ABISELECT(52,40), "S10124C1.s10124c1f0");
    check_field_offset(lv, s10124c1f1, ABISELECT(56,44), "S10124C1.s10124c1f1");
    check_field_offset(lv, s10124c1f2, ABISELECT(64,48), "S10124C1.s10124c1f2");
    check_field_offset(lv, s10124c1f3, ABISELECT(72,56), "S10124C1.s10124c1f3");
    check_field_offset(lv, s10124c1f4, ABISELECT(80,64), "S10124C1.s10124c1f4");
    check_field_offset(lv, s10124c1f5, ABISELECT(88,68), "S10124C1.s10124c1f5");
    check_field_offset(lv, s10124c1f6, ABISELECT(104,80), "S10124C1.s10124c1f6");
    test_class_info(&lv, &cd_S10124C1);
    dp->~S10124C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10124C1(Test_S10124C1, "S10124C1", ABISELECT(112,84));

#else // __cplusplus

extern void _ZN8S10124C1C1Ev();
extern void _ZN8S10124C1D1Ev();
Name_Map name_map_S10124C1[] = {
  NSPAIR(_ZN8S10124C1C1Ev),
  NSPAIR(_ZN8S10124C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10124C2;
extern VTBL_ENTRY _ZTI8S10124C2[];
extern  VTBL_ENTRY _ZTV8S10124C2[];
static Base_Class bases_S10124C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10124C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10124C1[];
extern void _ZN8S10124C1D1Ev();
extern void _ZN8S10124C1D0Ev();
extern void _ZN8S10124C22v7Ev();
extern void _ZN8S10124C22v8Ev();
extern void _ZN8S10124C22v9Ev();
extern void _ZN8S10124C23v10Ev();
extern void _ZN8S10124C23v11Ev();
extern void _ZN8S10124C23v12Ev();
extern void _ZN8S10124C23v13Ev();
extern void _ZN8S10124C12v1Ev();
extern void _ZN8S10124C12v2Ev();
extern void _ZN8S10124C12v3Ev();
extern void _ZN8S10124C12v4Ev();
extern void _ZN8S10124C12v5Ev();
extern void _ZN8S10124C12v6Ev();
static  VTBL_ENTRY vtc_S10124C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10124C1[0]),
  (VTBL_ENTRY)&_ZN8S10124C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10124C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10124C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10124C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10124C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10124C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10124C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10124C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10124C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10124C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10124C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10124C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10124C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10124C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10124C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10124C1[];
extern  VTBL_ENTRY _ZTV8S10124C1[];
Class_Descriptor cd_S10124C1 = {  "S10124C1", // class name
  bases_S10124C1, 1,
  &(vtc_S10124C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,84), // object size
  NSPAIRA(_ZTI8S10124C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10124C1),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9474C2  {
  void *s9474c2f0[3];
  ::S16113C5_nt s9474c2f1;
  ::S9901C5_nt s9474c2f2;
  int s9474c2f3;
  virtual  ~S9474C2(); // _ZN7S9474C2D1Ev
  virtual void  v3(); // _ZN7S9474C22v3Ev
  virtual void  v4(); // _ZN7S9474C22v4Ev
  virtual void  v5(); // _ZN7S9474C22v5Ev
  virtual void  v6(); // _ZN7S9474C22v6Ev
  virtual void  v7(); // _ZN7S9474C22v7Ev
  virtual void  v8(); // _ZN7S9474C22v8Ev
  virtual void  v9(); // _ZN7S9474C22v9Ev
  virtual void  v10(); // _ZN7S9474C23v10Ev
  S9474C2(); // tgen
};
//SIG(-1 S9474C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[3] FC2{ m Fp Fi FC3{ m}} FC4{ FC5{ Fc[20]} Fc[16]} Fi}


 S9474C2 ::~S9474C2(){ note_dtor("S9474C2", this);}
void  S9474C2 ::v3(){vfunc_called(this, "_ZN7S9474C22v3Ev");}
void  S9474C2 ::v4(){vfunc_called(this, "_ZN7S9474C22v4Ev");}
void  S9474C2 ::v5(){vfunc_called(this, "_ZN7S9474C22v5Ev");}
void  S9474C2 ::v6(){vfunc_called(this, "_ZN7S9474C22v6Ev");}
void  S9474C2 ::v7(){vfunc_called(this, "_ZN7S9474C22v7Ev");}
void  S9474C2 ::v8(){vfunc_called(this, "_ZN7S9474C22v8Ev");}
void  S9474C2 ::v9(){vfunc_called(this, "_ZN7S9474C22v9Ev");}
void  S9474C2 ::v10(){vfunc_called(this, "_ZN7S9474C23v10Ev");}
S9474C2 ::S9474C2(){ note_ctor("S9474C2", this);} // tgen

static void Test_S9474C2()
{
  extern Class_Descriptor cd_S9474C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,18)];
    init_test(&cd_S9474C2, buf);
    S9474C2 *dp, &lv = *(dp=new (buf) S9474C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,68), "sizeof(S9474C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9474C2)");
    check_field_offset(lv, s9474c2f0, ABISELECT(8,4), "S9474C2.s9474c2f0");
    check_field_offset(lv, s9474c2f1, ABISELECT(32,16), "S9474C2.s9474c2f1");
    check_field_offset(lv, s9474c2f2, ABISELECT(48,28), "S9474C2.s9474c2f2");
    check_field_offset(lv, s9474c2f3, ABISELECT(84,64), "S9474C2.s9474c2f3");
    test_class_info(&lv, &cd_S9474C2);
    dp->~S9474C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9474C2(Test_S9474C2, "S9474C2", ABISELECT(88,68));

#else // __cplusplus

extern void _ZN7S9474C2C1Ev();
extern void _ZN7S9474C2D1Ev();
Name_Map name_map_S9474C2[] = {
  NSPAIR(_ZN7S9474C2C1Ev),
  NSPAIR(_ZN7S9474C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9474C2[];
extern void _ZN7S9474C2D1Ev();
extern void _ZN7S9474C2D0Ev();
extern void _ZN7S9474C22v3Ev();
extern void _ZN7S9474C22v4Ev();
extern void _ZN7S9474C22v5Ev();
extern void _ZN7S9474C22v6Ev();
extern void _ZN7S9474C22v7Ev();
extern void _ZN7S9474C22v8Ev();
extern void _ZN7S9474C22v9Ev();
extern void _ZN7S9474C23v10Ev();
static  VTBL_ENTRY vtc_S9474C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9474C2[0]),
  (VTBL_ENTRY)&_ZN7S9474C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9474C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9474C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9474C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9474C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9474C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9474C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9474C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9474C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9474C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S9474C2[];
extern  VTBL_ENTRY _ZTV7S9474C2[];
Class_Descriptor cd_S9474C2 = {  "S9474C2", // class name
  0,0,//no base classes
  &(vtc_S9474C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,68), // object size
  NSPAIRA(_ZTI7S9474C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9474C2),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9474C1  : S9474C2 {
  virtual  ~S9474C1(); // _ZN7S9474C1D1Ev
  virtual void  v1(); // _ZN7S9474C12v1Ev
  virtual void  v2(); // _ZN7S9474C12v2Ev
  S9474C1(); // tgen
};
//SIG(1 S9474C1) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 v9 v10 Fp[3] FC3{ m Fp Fi FC4{ m}} FC5{ FC6{ Fc[20]} Fc[16]} Fi} vd v1 v2}


 S9474C1 ::~S9474C1(){ note_dtor("S9474C1", this);}
void  S9474C1 ::v1(){vfunc_called(this, "_ZN7S9474C12v1Ev");}
void  S9474C1 ::v2(){vfunc_called(this, "_ZN7S9474C12v2Ev");}
S9474C1 ::S9474C1(){ note_ctor("S9474C1", this);} // tgen

static void Test_S9474C1()
{
  extern Class_Descriptor cd_S9474C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,18)];
    init_test(&cd_S9474C1, buf);
    S9474C1 *dp, &lv = *(dp=new (buf) S9474C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,68), "sizeof(S9474C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9474C1)");
    check_base_class_offset(lv, (S9474C2*), 0, "S9474C1");
    test_class_info(&lv, &cd_S9474C1);
    dp->~S9474C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9474C1(Test_S9474C1, "S9474C1", ABISELECT(88,68));

#else // __cplusplus

extern void _ZN7S9474C1C1Ev();
extern void _ZN7S9474C1D1Ev();
Name_Map name_map_S9474C1[] = {
  NSPAIR(_ZN7S9474C1C1Ev),
  NSPAIR(_ZN7S9474C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9474C2;
extern VTBL_ENTRY _ZTI7S9474C2[];
extern  VTBL_ENTRY _ZTV7S9474C2[];
static Base_Class bases_S9474C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9474C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9474C1[];
extern void _ZN7S9474C1D1Ev();
extern void _ZN7S9474C1D0Ev();
extern void _ZN7S9474C22v3Ev();
extern void _ZN7S9474C22v4Ev();
extern void _ZN7S9474C22v5Ev();
extern void _ZN7S9474C22v6Ev();
extern void _ZN7S9474C22v7Ev();
extern void _ZN7S9474C22v8Ev();
extern void _ZN7S9474C22v9Ev();
extern void _ZN7S9474C23v10Ev();
extern void _ZN7S9474C12v1Ev();
extern void _ZN7S9474C12v2Ev();
static  VTBL_ENTRY vtc_S9474C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9474C1[0]),
  (VTBL_ENTRY)&_ZN7S9474C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9474C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9474C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9474C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9474C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9474C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9474C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9474C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9474C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9474C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9474C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9474C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9474C1[];
extern  VTBL_ENTRY _ZTV7S9474C1[];
Class_Descriptor cd_S9474C1 = {  "S9474C1", // class name
  bases_S9474C1, 1,
  &(vtc_S9474C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,68), // object size
  NSPAIRA(_ZTI7S9474C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9474C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4417C3  {
  ::S16113C5_nt s4417c3f0;
  int s4417c3f1[2];
  char s4417c3f2;
  virtual  ~S4417C3(); // _ZN7S4417C3D1Ev
  virtual void  v2(); // _ZN7S4417C32v2Ev
  virtual void  v3(); // _ZN7S4417C32v3Ev
  virtual void  v4(); // _ZN7S4417C32v4Ev
  S4417C3(); // tgen
};
//SIG(-1 S4417C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4417C3 ::~S4417C3(){ note_dtor("S4417C3", this);}
void  S4417C3 ::v2(){vfunc_called(this, "_ZN7S4417C32v2Ev");}
void  S4417C3 ::v3(){vfunc_called(this, "_ZN7S4417C32v3Ev");}
void  S4417C3 ::v4(){vfunc_called(this, "_ZN7S4417C32v4Ev");}
S4417C3 ::S4417C3(){ note_ctor("S4417C3", this);} // tgen

static void Test_S4417C3()
{
  extern Class_Descriptor cd_S4417C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4417C3, buf);
    S4417C3 *dp, &lv = *(dp=new (buf) S4417C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4417C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4417C3)");
    check_field_offset(lv, s4417c3f0, ABISELECT(8,4), "S4417C3.s4417c3f0");
    check_field_offset(lv, s4417c3f1, ABISELECT(24,16), "S4417C3.s4417c3f1");
    check_field_offset(lv, s4417c3f2, ABISELECT(32,24), "S4417C3.s4417c3f2");
    test_class_info(&lv, &cd_S4417C3);
    dp->~S4417C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4417C3(Test_S4417C3, "S4417C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4417C3C1Ev();
extern void _ZN7S4417C3D1Ev();
Name_Map name_map_S4417C3[] = {
  NSPAIR(_ZN7S4417C3C1Ev),
  NSPAIR(_ZN7S4417C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4417C3[];
extern void _ZN7S4417C3D1Ev();
extern void _ZN7S4417C3D0Ev();
extern void _ZN7S4417C32v2Ev();
extern void _ZN7S4417C32v3Ev();
extern void _ZN7S4417C32v4Ev();
static  VTBL_ENTRY vtc_S4417C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4417C3[0]),
  (VTBL_ENTRY)&_ZN7S4417C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4417C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4417C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4417C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4417C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4417C3[];
extern  VTBL_ENTRY _ZTV7S4417C3[];
Class_Descriptor cd_S4417C3 = {  "S4417C3", // class name
  0,0,//no base classes
  &(vtc_S4417C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4417C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4417C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4417C2  : S4417C3 {
  void *s4417c2f0[2];
  int s4417c2f1;
  char s4417c2f2;
  virtual  ~S4417C2(); // _ZN7S4417C2D1Ev
  virtual void  v5(); // _ZN7S4417C22v5Ev
  S4417C2(); // tgen
};
//SIG(-1 S4417C2) C1{ BC2{ vd v2 v3 v4 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 Fp[2] Fi Fc}


 S4417C2 ::~S4417C2(){ note_dtor("S4417C2", this);}
void  S4417C2 ::v5(){vfunc_called(this, "_ZN7S4417C22v5Ev");}
S4417C2 ::S4417C2(){ note_ctor("S4417C2", this);} // tgen

static void Test_S4417C2()
{
  extern Class_Descriptor cd_S4417C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4417C2, buf);
    S4417C2 *dp, &lv = *(dp=new (buf) S4417C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4417C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4417C2)");
    check_base_class_offset(lv, (S4417C3*), 0, "S4417C2");
    check_field_offset(lv, s4417c2f0, ABISELECT(40,28), "S4417C2.s4417c2f0");
    check_field_offset(lv, s4417c2f1, ABISELECT(56,36), "S4417C2.s4417c2f1");
    check_field_offset(lv, s4417c2f2, ABISELECT(60,40), "S4417C2.s4417c2f2");
    test_class_info(&lv, &cd_S4417C2);
    dp->~S4417C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4417C2(Test_S4417C2, "S4417C2", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4417C2C1Ev();
extern void _ZN7S4417C2D1Ev();
Name_Map name_map_S4417C2[] = {
  NSPAIR(_ZN7S4417C2C1Ev),
  NSPAIR(_ZN7S4417C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4417C3;
extern VTBL_ENTRY _ZTI7S4417C3[];
extern  VTBL_ENTRY _ZTV7S4417C3[];
static Base_Class bases_S4417C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4417C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4417C2[];
extern void _ZN7S4417C2D1Ev();
extern void _ZN7S4417C2D0Ev();
extern void _ZN7S4417C32v2Ev();
extern void _ZN7S4417C32v3Ev();
extern void _ZN7S4417C32v4Ev();
extern void _ZN7S4417C22v5Ev();
static  VTBL_ENTRY vtc_S4417C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4417C2[0]),
  (VTBL_ENTRY)&_ZN7S4417C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4417C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4417C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4417C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4417C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4417C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4417C2[];
extern  VTBL_ENTRY _ZTV7S4417C2[];
Class_Descriptor cd_S4417C2 = {  "S4417C2", // class name
  bases_S4417C2, 1,
  &(vtc_S4417C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4417C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4417C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4417C1  : S4417C2 {
  int s4417c1f0;
  ::S10275C6_nt s4417c1f1;
  int s4417c1f2;
  virtual  ~S4417C1(); // _ZN7S4417C1D1Ev
  virtual void  v1(); // _ZN7S4417C12v1Ev
  S4417C1(); // tgen
};
//SIG(1 S4417C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 Fp[2] Fi Fc} vd v1 Fi FC6{ m Fp[2]} Fi}


 S4417C1 ::~S4417C1(){ note_dtor("S4417C1", this);}
void  S4417C1 ::v1(){vfunc_called(this, "_ZN7S4417C12v1Ev");}
S4417C1 ::S4417C1(){ note_ctor("S4417C1", this);} // tgen

static void Test_S4417C1()
{
  extern Class_Descriptor cd_S4417C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S4417C1, buf);
    S4417C1 *dp, &lv = *(dp=new (buf) S4417C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S4417C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4417C1)");
    check_base_class_offset(lv, (S4417C3*)(S4417C2*), 0, "S4417C1");
    check_base_class_offset(lv, (S4417C2*), 0, "S4417C1");
    check_field_offset(lv, s4417c1f0, ABISELECT(64,44), "S4417C1.s4417c1f0");
    check_field_offset(lv, s4417c1f1, ABISELECT(72,48), "S4417C1.s4417c1f1");
    check_field_offset(lv, s4417c1f2, ABISELECT(88,56), "S4417C1.s4417c1f2");
    test_class_info(&lv, &cd_S4417C1);
    dp->~S4417C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4417C1(Test_S4417C1, "S4417C1", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S4417C1C1Ev();
extern void _ZN7S4417C1D1Ev();
Name_Map name_map_S4417C1[] = {
  NSPAIR(_ZN7S4417C1C1Ev),
  NSPAIR(_ZN7S4417C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4417C3;
extern VTBL_ENTRY _ZTI7S4417C3[];
extern  VTBL_ENTRY _ZTV7S4417C3[];
extern Class_Descriptor cd_S4417C2;
extern VTBL_ENTRY _ZTI7S4417C2[];
extern  VTBL_ENTRY _ZTV7S4417C2[];
static Base_Class bases_S4417C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4417C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4417C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4417C1[];
extern void _ZN7S4417C1D1Ev();
extern void _ZN7S4417C1D0Ev();
extern void _ZN7S4417C32v2Ev();
extern void _ZN7S4417C32v3Ev();
extern void _ZN7S4417C32v4Ev();
extern void _ZN7S4417C22v5Ev();
extern void _ZN7S4417C12v1Ev();
static  VTBL_ENTRY vtc_S4417C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4417C1[0]),
  (VTBL_ENTRY)&_ZN7S4417C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4417C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4417C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4417C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4417C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4417C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4417C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4417C1[];
extern  VTBL_ENTRY _ZTV7S4417C1[];
Class_Descriptor cd_S4417C1 = {  "S4417C1", // class name
  bases_S4417C1, 2,
  &(vtc_S4417C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S4417C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4417C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4408C3  {
  ::S16113C5_nt s4408c3f0;
  int s4408c3f1[2];
  char s4408c3f2;
  virtual  ~S4408C3(); // _ZN7S4408C3D1Ev
  virtual void  v2(); // _ZN7S4408C32v2Ev
  virtual void  v3(); // _ZN7S4408C32v3Ev
  virtual void  v4(); // _ZN7S4408C32v4Ev
  S4408C3(); // tgen
};
//SIG(-1 S4408C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4408C3 ::~S4408C3(){ note_dtor("S4408C3", this);}
void  S4408C3 ::v2(){vfunc_called(this, "_ZN7S4408C32v2Ev");}
void  S4408C3 ::v3(){vfunc_called(this, "_ZN7S4408C32v3Ev");}
void  S4408C3 ::v4(){vfunc_called(this, "_ZN7S4408C32v4Ev");}
S4408C3 ::S4408C3(){ note_ctor("S4408C3", this);} // tgen

static void Test_S4408C3()
{
  extern Class_Descriptor cd_S4408C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4408C3, buf);
    S4408C3 *dp, &lv = *(dp=new (buf) S4408C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4408C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4408C3)");
    check_field_offset(lv, s4408c3f0, ABISELECT(8,4), "S4408C3.s4408c3f0");
    check_field_offset(lv, s4408c3f1, ABISELECT(24,16), "S4408C3.s4408c3f1");
    check_field_offset(lv, s4408c3f2, ABISELECT(32,24), "S4408C3.s4408c3f2");
    test_class_info(&lv, &cd_S4408C3);
    dp->~S4408C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4408C3(Test_S4408C3, "S4408C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4408C3C1Ev();
extern void _ZN7S4408C3D1Ev();
Name_Map name_map_S4408C3[] = {
  NSPAIR(_ZN7S4408C3C1Ev),
  NSPAIR(_ZN7S4408C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4408C3[];
extern void _ZN7S4408C3D1Ev();
extern void _ZN7S4408C3D0Ev();
extern void _ZN7S4408C32v2Ev();
extern void _ZN7S4408C32v3Ev();
extern void _ZN7S4408C32v4Ev();
static  VTBL_ENTRY vtc_S4408C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4408C3[0]),
  (VTBL_ENTRY)&_ZN7S4408C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4408C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4408C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4408C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4408C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4408C3[];
extern  VTBL_ENTRY _ZTV7S4408C3[];
Class_Descriptor cd_S4408C3 = {  "S4408C3", // class name
  0,0,//no base classes
  &(vtc_S4408C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4408C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4408C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4408C2  : S4408C3 {
  void *s4408c2f0[2];
  int s4408c2f1;
  char s4408c2f2;
  virtual  ~S4408C2(); // _ZN7S4408C2D1Ev
  virtual void  v5(); // _ZN7S4408C22v5Ev
  S4408C2(); // tgen
};
//SIG(-1 S4408C2) C1{ BC2{ vd v2 v3 v4 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 Fp[2] Fi Fc}


 S4408C2 ::~S4408C2(){ note_dtor("S4408C2", this);}
void  S4408C2 ::v5(){vfunc_called(this, "_ZN7S4408C22v5Ev");}
S4408C2 ::S4408C2(){ note_ctor("S4408C2", this);} // tgen

static void Test_S4408C2()
{
  extern Class_Descriptor cd_S4408C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4408C2, buf);
    S4408C2 *dp, &lv = *(dp=new (buf) S4408C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4408C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4408C2)");
    check_base_class_offset(lv, (S4408C3*), 0, "S4408C2");
    check_field_offset(lv, s4408c2f0, ABISELECT(40,28), "S4408C2.s4408c2f0");
    check_field_offset(lv, s4408c2f1, ABISELECT(56,36), "S4408C2.s4408c2f1");
    check_field_offset(lv, s4408c2f2, ABISELECT(60,40), "S4408C2.s4408c2f2");
    test_class_info(&lv, &cd_S4408C2);
    dp->~S4408C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4408C2(Test_S4408C2, "S4408C2", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4408C2C1Ev();
extern void _ZN7S4408C2D1Ev();
Name_Map name_map_S4408C2[] = {
  NSPAIR(_ZN7S4408C2C1Ev),
  NSPAIR(_ZN7S4408C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4408C3;
extern VTBL_ENTRY _ZTI7S4408C3[];
extern  VTBL_ENTRY _ZTV7S4408C3[];
static Base_Class bases_S4408C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4408C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4408C2[];
extern void _ZN7S4408C2D1Ev();
extern void _ZN7S4408C2D0Ev();
extern void _ZN7S4408C32v2Ev();
extern void _ZN7S4408C32v3Ev();
extern void _ZN7S4408C32v4Ev();
extern void _ZN7S4408C22v5Ev();
static  VTBL_ENTRY vtc_S4408C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4408C2[0]),
  (VTBL_ENTRY)&_ZN7S4408C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4408C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4408C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4408C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4408C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4408C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4408C2[];
extern  VTBL_ENTRY _ZTV7S4408C2[];
Class_Descriptor cd_S4408C2 = {  "S4408C2", // class name
  bases_S4408C2, 1,
  &(vtc_S4408C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4408C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4408C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4408C1  : S4408C2 {
  ::S16113C5_nt s4408c1f0;
  ::S10275C6_nt s4408c1f1;
  virtual  ~S4408C1(); // _ZN7S4408C1D1Ev
  virtual void  v1(); // _ZN7S4408C12v1Ev
  S4408C1(); // tgen
};
//SIG(1 S4408C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 Fp[2] Fi Fc} vd v1 FC4 FC6{ m Fp[2]}}


 S4408C1 ::~S4408C1(){ note_dtor("S4408C1", this);}
void  S4408C1 ::v1(){vfunc_called(this, "_ZN7S4408C12v1Ev");}
S4408C1 ::S4408C1(){ note_ctor("S4408C1", this);} // tgen

static void Test_S4408C1()
{
  extern Class_Descriptor cd_S4408C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S4408C1, buf);
    S4408C1 *dp, &lv = *(dp=new (buf) S4408C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S4408C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4408C1)");
    check_base_class_offset(lv, (S4408C3*)(S4408C2*), 0, "S4408C1");
    check_base_class_offset(lv, (S4408C2*), 0, "S4408C1");
    check_field_offset(lv, s4408c1f0, ABISELECT(64,44), "S4408C1.s4408c1f0");
    check_field_offset(lv, s4408c1f1, ABISELECT(80,56), "S4408C1.s4408c1f1");
    test_class_info(&lv, &cd_S4408C1);
    dp->~S4408C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4408C1(Test_S4408C1, "S4408C1", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN7S4408C1C1Ev();
extern void _ZN7S4408C1D1Ev();
Name_Map name_map_S4408C1[] = {
  NSPAIR(_ZN7S4408C1C1Ev),
  NSPAIR(_ZN7S4408C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4408C3;
extern VTBL_ENTRY _ZTI7S4408C3[];
extern  VTBL_ENTRY _ZTV7S4408C3[];
extern Class_Descriptor cd_S4408C2;
extern VTBL_ENTRY _ZTI7S4408C2[];
extern  VTBL_ENTRY _ZTV7S4408C2[];
static Base_Class bases_S4408C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4408C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4408C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4408C1[];
extern void _ZN7S4408C1D1Ev();
extern void _ZN7S4408C1D0Ev();
extern void _ZN7S4408C32v2Ev();
extern void _ZN7S4408C32v3Ev();
extern void _ZN7S4408C32v4Ev();
extern void _ZN7S4408C22v5Ev();
extern void _ZN7S4408C12v1Ev();
static  VTBL_ENTRY vtc_S4408C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4408C1[0]),
  (VTBL_ENTRY)&_ZN7S4408C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4408C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4408C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4408C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4408C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4408C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4408C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4408C1[];
extern  VTBL_ENTRY _ZTV7S4408C1[];
Class_Descriptor cd_S4408C1 = {  "S4408C1", // class name
  bases_S4408C1, 2,
  &(vtc_S4408C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI7S4408C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4408C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15150C2_nt  {
  ::S3593C21_nt s15150c2f0;
  void  mf15150c2(); // _ZN11S15150C2_nt9mf15150c2Ev
};
//SIG(-1 S15150C2_nt) C1{ m FC2{ m Fp}}


void  S15150C2_nt ::mf15150c2(){}

//skip512 S15150C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15150C7_nt  {
  void *s15150c7f0;
  int s15150c7f1;
  void  mf15150c7(); // _ZN11S15150C7_nt9mf15150c7Ev
};
//SIG(-1 S15150C7_nt) C1{ m Fp Fi}


void  S15150C7_nt ::mf15150c7(){}

//skip512 S15150C7_nt

#else // __cplusplus

Class_Descriptor cd_S15150C7_nt = {  "S15150C7_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15150C6_nt  : S15150C7_nt {
};
//SIG(-1 S15150C6_nt) C1{ BC2{ m Fp Fi}}



//skip512 S15150C6_nt

#else // __cplusplus

extern Class_Descriptor cd_S15150C7_nt;
static Base_Class bases_S15150C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15150C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15150C5_nt  {
  int s15150c5f0;
  ::S15150C6_nt s15150c5f1;
  void  mf15150c5(); // _ZN11S15150C5_nt9mf15150c5Ev
};
//SIG(-1 S15150C5_nt) C1{ m Fi FC2{ BC3{ m Fp Fi}}}


void  S15150C5_nt ::mf15150c5(){}

//skip512 S15150C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15150C1  {
  unsigned char s15150c1f0:1;
  int s15150c1f1:2;
  int s15150c1f2:3;
  int s15150c1f3;
  short s15150c1f4;
  int s15150c1f5;
  ::S15150C2_nt s15150c1f6;
  int s15150c1f7[4];
  ::S1865C15 s15150c1f8;
  ::S15150C5_nt s15150c1f9;
  void  mf15150c1(); // _ZN8S15150C19mf15150c1Ev
};
//SIG(1 S15150C1) C1{ m Fc:1 Fi:2 Fi:3 Fi Fs Fi FC2{ m FC3{ m Fp}} Fi[4] FC4{ m Fp} FC5{ m Fi FC6{ BC7{ m Fp Fi}}}}


void  S15150C1 ::mf15150c1(){}

static void Test_S15150C1()
{
  {
    init_simple_test("S15150C1");
    static S15150C1 lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S15150C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15150C1)");
    set_bf_and_test(lv, s15150c1f0, 0, 0, 1, 1, "S15150C1");
    set_bf_and_test(lv, s15150c1f1, 0, 1, 2, 1, "S15150C1");
    set_bf_and_test(lv, s15150c1f1, 0, 1, 2, hide_sll(1LL<<1), "S15150C1");
    set_bf_and_test(lv, s15150c1f2, 0, 3, 3, 1, "S15150C1");
    set_bf_and_test(lv, s15150c1f2, 0, 3, 3, hide_sll(1LL<<2), "S15150C1");
    check_field_offset(lv, s15150c1f3, 4, "S15150C1.s15150c1f3");
    check_field_offset(lv, s15150c1f4, 8, "S15150C1.s15150c1f4");
    check_field_offset(lv, s15150c1f5, 12, "S15150C1.s15150c1f5");
    check_field_offset(lv, s15150c1f6, 16, "S15150C1.s15150c1f6");
    check_field_offset(lv, s15150c1f7, ABISELECT(24,20), "S15150C1.s15150c1f7");
    check_field_offset(lv, s15150c1f8, ABISELECT(40,36), "S15150C1.s15150c1f8");
    check_field_offset(lv, s15150c1f9, ABISELECT(48,40), "S15150C1.s15150c1f9");
  }
}
static Arrange_To_Call_Me vS15150C1(Test_S15150C1, "S15150C1", ABISELECT(72,52));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7039C2_nt  {
  virtual  ~S7039C2_nt(); // _ZN10S7039C2_ntD1Ev
  virtual void  v6(); // _ZN10S7039C2_nt2v6Ev
  virtual void  v7(); // _ZN10S7039C2_nt2v7Ev
  virtual void  v8(); // _ZN10S7039C2_nt2v8Ev
  virtual void  v9(); // _ZN10S7039C2_nt2v9Ev
  virtual void  v10(); // _ZN10S7039C2_nt3v10Ev
  S7039C2_nt(); // tgen
};
//SIG(-1 S7039C2_nt) C1{ vd v1 v2 v3 v4 v5}


 S7039C2_nt ::~S7039C2_nt(){ note_dtor("S7039C2_nt", this);}
void  S7039C2_nt ::v6(){vfunc_called(this, "_ZN10S7039C2_nt2v6Ev");}
void  S7039C2_nt ::v7(){vfunc_called(this, "_ZN10S7039C2_nt2v7Ev");}
void  S7039C2_nt ::v8(){vfunc_called(this, "_ZN10S7039C2_nt2v8Ev");}
void  S7039C2_nt ::v9(){vfunc_called(this, "_ZN10S7039C2_nt2v9Ev");}
void  S7039C2_nt ::v10(){vfunc_called(this, "_ZN10S7039C2_nt3v10Ev");}
S7039C2_nt ::S7039C2_nt(){ note_ctor("S7039C2_nt", this);} // tgen

//skip512 S7039C2_nt

#else // __cplusplus

extern void _ZN10S7039C2_ntC1Ev();
extern void _ZN10S7039C2_ntD1Ev();
Name_Map name_map_S7039C2_nt[] = {
  NSPAIR(_ZN10S7039C2_ntC1Ev),
  NSPAIR(_ZN10S7039C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7039C2_nt[];
extern void _ZN10S7039C2_ntD1Ev();
extern void _ZN10S7039C2_ntD0Ev();
extern void _ZN10S7039C2_nt2v6Ev();
extern void _ZN10S7039C2_nt2v7Ev();
extern void _ZN10S7039C2_nt2v8Ev();
extern void _ZN10S7039C2_nt2v9Ev();
extern void _ZN10S7039C2_nt3v10Ev();
static  VTBL_ENTRY vtc_S7039C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7039C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7039C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7039C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7039C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7039C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7039C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7039C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7039C2_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI10S7039C2_nt[];
VTBL_ENTRY *P__ZTI10S7039C2_nt = _ZTI10S7039C2_nt; 
extern  VTBL_ENTRY _ZTV10S7039C2_nt[];
Class_Descriptor cd_S7039C2_nt = {  "S7039C2_nt", // class name
  0,0,//no base classes
  &(vtc_S7039C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7039C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7039C2_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7039C1  : S7039C2_nt {
  void *s7039c1f0;
  int s7039c1f1[2];
  char s7039c1f2[35];
  int s7039c1f3[2];
  void *s7039c1f4;
  ::S7913C7_nt s7039c1f5;
  int s7039c1f6[3];
  virtual  ~S7039C1(); // _ZN7S7039C1D1Ev
  virtual void  v1(); // _ZN7S7039C12v1Ev
  virtual void  v2(); // _ZN7S7039C12v2Ev
  virtual void  v3(); // _ZN7S7039C12v3Ev
  virtual void  v4(); // _ZN7S7039C12v4Ev
  virtual void  v5(); // _ZN7S7039C12v5Ev
  S7039C1(); // tgen
};
//SIG(1 S7039C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp Fi[2] Fc[35] Fi[2] Fp FC3{ m FL[4]} Fi[3]}


 S7039C1 ::~S7039C1(){ note_dtor("S7039C1", this);}
void  S7039C1 ::v1(){vfunc_called(this, "_ZN7S7039C12v1Ev");}
void  S7039C1 ::v2(){vfunc_called(this, "_ZN7S7039C12v2Ev");}
void  S7039C1 ::v3(){vfunc_called(this, "_ZN7S7039C12v3Ev");}
void  S7039C1 ::v4(){vfunc_called(this, "_ZN7S7039C12v4Ev");}
void  S7039C1 ::v5(){vfunc_called(this, "_ZN7S7039C12v5Ev");}
S7039C1 ::S7039C1(){ note_ctor("S7039C1", this);} // tgen

static void Test_S7039C1()
{
  extern Class_Descriptor cd_S7039C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,28)];
    init_test(&cd_S7039C1, buf);
    S7039C1 *dp, &lv = *(dp=new (buf) S7039C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,108), "sizeof(S7039C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7039C1)");
    check_base_class_offset(lv, (S7039C2_nt*), 0, "S7039C1");
    check_field_offset(lv, s7039c1f0, ABISELECT(8,4), "S7039C1.s7039c1f0");
    check_field_offset(lv, s7039c1f1, ABISELECT(16,8), "S7039C1.s7039c1f1");
    check_field_offset(lv, s7039c1f2, ABISELECT(24,16), "S7039C1.s7039c1f2");
    check_field_offset(lv, s7039c1f3, ABISELECT(60,52), "S7039C1.s7039c1f3");
    check_field_offset(lv, s7039c1f4, ABISELECT(72,60), "S7039C1.s7039c1f4");
    check_field_offset(lv, s7039c1f5, ABISELECT(80,64), "S7039C1.s7039c1f5");
    check_field_offset(lv, s7039c1f6, ABISELECT(112,96), "S7039C1.s7039c1f6");
    test_class_info(&lv, &cd_S7039C1);
    dp->~S7039C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7039C1(Test_S7039C1, "S7039C1", ABISELECT(128,108));

#else // __cplusplus

extern void _ZN7S7039C1C1Ev();
extern void _ZN7S7039C1D1Ev();
Name_Map name_map_S7039C1[] = {
  NSPAIR(_ZN7S7039C1C1Ev),
  NSPAIR(_ZN7S7039C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7039C2_nt;
extern VTBL_ENTRY _ZTI10S7039C2_nt[];
extern  VTBL_ENTRY _ZTV10S7039C2_nt[];
static Base_Class bases_S7039C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7039C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7039C1[];
extern void _ZN7S7039C1D1Ev();
extern void _ZN7S7039C1D0Ev();
extern void _ZN10S7039C2_nt2v6Ev();
extern void _ZN10S7039C2_nt2v7Ev();
extern void _ZN10S7039C2_nt2v8Ev();
extern void _ZN10S7039C2_nt2v9Ev();
extern void _ZN10S7039C2_nt3v10Ev();
extern void _ZN7S7039C12v1Ev();
extern void _ZN7S7039C12v2Ev();
extern void _ZN7S7039C12v3Ev();
extern void _ZN7S7039C12v4Ev();
extern void _ZN7S7039C12v5Ev();
static  VTBL_ENTRY vtc_S7039C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7039C1[0]),
  (VTBL_ENTRY)&_ZN7S7039C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7039C1D0Ev,
  (VTBL_ENTRY)&_ZN10S7039C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7039C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7039C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7039C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7039C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN7S7039C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7039C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7039C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7039C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7039C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7039C1[];
extern  VTBL_ENTRY _ZTV7S7039C1[];
Class_Descriptor cd_S7039C1 = {  "S7039C1", // class name
  bases_S7039C1, 1,
  &(vtc_S7039C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,108), // object size
  NSPAIRA(_ZTI7S7039C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7039C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4409C3  {
  ::S16113C5_nt s4409c3f0;
  int s4409c3f1[2];
  char s4409c3f2;
  virtual  ~S4409C3(); // _ZN7S4409C3D1Ev
  virtual void  v2(); // _ZN7S4409C32v2Ev
  virtual void  v3(); // _ZN7S4409C32v3Ev
  virtual void  v4(); // _ZN7S4409C32v4Ev
  S4409C3(); // tgen
};
//SIG(-1 S4409C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4409C3 ::~S4409C3(){ note_dtor("S4409C3", this);}
void  S4409C3 ::v2(){vfunc_called(this, "_ZN7S4409C32v2Ev");}
void  S4409C3 ::v3(){vfunc_called(this, "_ZN7S4409C32v3Ev");}
void  S4409C3 ::v4(){vfunc_called(this, "_ZN7S4409C32v4Ev");}
S4409C3 ::S4409C3(){ note_ctor("S4409C3", this);} // tgen

static void Test_S4409C3()
{
  extern Class_Descriptor cd_S4409C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4409C3, buf);
    S4409C3 *dp, &lv = *(dp=new (buf) S4409C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4409C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4409C3)");
    check_field_offset(lv, s4409c3f0, ABISELECT(8,4), "S4409C3.s4409c3f0");
    check_field_offset(lv, s4409c3f1, ABISELECT(24,16), "S4409C3.s4409c3f1");
    check_field_offset(lv, s4409c3f2, ABISELECT(32,24), "S4409C3.s4409c3f2");
    test_class_info(&lv, &cd_S4409C3);
    dp->~S4409C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4409C3(Test_S4409C3, "S4409C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4409C3C1Ev();
extern void _ZN7S4409C3D1Ev();
Name_Map name_map_S4409C3[] = {
  NSPAIR(_ZN7S4409C3C1Ev),
  NSPAIR(_ZN7S4409C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4409C3[];
extern void _ZN7S4409C3D1Ev();
extern void _ZN7S4409C3D0Ev();
extern void _ZN7S4409C32v2Ev();
extern void _ZN7S4409C32v3Ev();
extern void _ZN7S4409C32v4Ev();
static  VTBL_ENTRY vtc_S4409C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4409C3[0]),
  (VTBL_ENTRY)&_ZN7S4409C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4409C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4409C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4409C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4409C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4409C3[];
extern  VTBL_ENTRY _ZTV7S4409C3[];
Class_Descriptor cd_S4409C3 = {  "S4409C3", // class name
  0,0,//no base classes
  &(vtc_S4409C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4409C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4409C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4409C2  : S4409C3 {
  void *s4409c2f0[2];
  int s4409c2f1;
  char s4409c2f2;
  virtual  ~S4409C2(); // _ZN7S4409C2D1Ev
  virtual void  v5(); // _ZN7S4409C22v5Ev
  S4409C2(); // tgen
};
//SIG(-1 S4409C2) C1{ BC2{ vd v2 v3 v4 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 Fp[2] Fi Fc}


 S4409C2 ::~S4409C2(){ note_dtor("S4409C2", this);}
void  S4409C2 ::v5(){vfunc_called(this, "_ZN7S4409C22v5Ev");}
S4409C2 ::S4409C2(){ note_ctor("S4409C2", this);} // tgen

static void Test_S4409C2()
{
  extern Class_Descriptor cd_S4409C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4409C2, buf);
    S4409C2 *dp, &lv = *(dp=new (buf) S4409C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4409C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4409C2)");
    check_base_class_offset(lv, (S4409C3*), 0, "S4409C2");
    check_field_offset(lv, s4409c2f0, ABISELECT(40,28), "S4409C2.s4409c2f0");
    check_field_offset(lv, s4409c2f1, ABISELECT(56,36), "S4409C2.s4409c2f1");
    check_field_offset(lv, s4409c2f2, ABISELECT(60,40), "S4409C2.s4409c2f2");
    test_class_info(&lv, &cd_S4409C2);
    dp->~S4409C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4409C2(Test_S4409C2, "S4409C2", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4409C2C1Ev();
extern void _ZN7S4409C2D1Ev();
Name_Map name_map_S4409C2[] = {
  NSPAIR(_ZN7S4409C2C1Ev),
  NSPAIR(_ZN7S4409C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4409C3;
extern VTBL_ENTRY _ZTI7S4409C3[];
extern  VTBL_ENTRY _ZTV7S4409C3[];
static Base_Class bases_S4409C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4409C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4409C2[];
extern void _ZN7S4409C2D1Ev();
extern void _ZN7S4409C2D0Ev();
extern void _ZN7S4409C32v2Ev();
extern void _ZN7S4409C32v3Ev();
extern void _ZN7S4409C32v4Ev();
extern void _ZN7S4409C22v5Ev();
static  VTBL_ENTRY vtc_S4409C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4409C2[0]),
  (VTBL_ENTRY)&_ZN7S4409C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4409C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4409C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4409C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4409C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4409C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4409C2[];
extern  VTBL_ENTRY _ZTV7S4409C2[];
Class_Descriptor cd_S4409C2 = {  "S4409C2", // class name
  bases_S4409C2, 1,
  &(vtc_S4409C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4409C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4409C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4409C1  : S4409C2 {
  ::S16113C5_nt s4409c1f0;
  int s4409c1f1[2];
  virtual  ~S4409C1(); // _ZN7S4409C1D1Ev
  virtual void  v1(); // _ZN7S4409C12v1Ev
  S4409C1(); // tgen
};
//SIG(1 S4409C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 Fp[2] Fi Fc} vd v1 FC4 Fi[2]}


 S4409C1 ::~S4409C1(){ note_dtor("S4409C1", this);}
void  S4409C1 ::v1(){vfunc_called(this, "_ZN7S4409C12v1Ev");}
S4409C1 ::S4409C1(){ note_ctor("S4409C1", this);} // tgen

static void Test_S4409C1()
{
  extern Class_Descriptor cd_S4409C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,17)];
    init_test(&cd_S4409C1, buf);
    S4409C1 *dp, &lv = *(dp=new (buf) S4409C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,64), "sizeof(S4409C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4409C1)");
    check_base_class_offset(lv, (S4409C3*)(S4409C2*), 0, "S4409C1");
    check_base_class_offset(lv, (S4409C2*), 0, "S4409C1");
    check_field_offset(lv, s4409c1f0, ABISELECT(64,44), "S4409C1.s4409c1f0");
    check_field_offset(lv, s4409c1f1, ABISELECT(80,56), "S4409C1.s4409c1f1");
    test_class_info(&lv, &cd_S4409C1);
    dp->~S4409C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4409C1(Test_S4409C1, "S4409C1", ABISELECT(88,64));

#else // __cplusplus

extern void _ZN7S4409C1C1Ev();
extern void _ZN7S4409C1D1Ev();
Name_Map name_map_S4409C1[] = {
  NSPAIR(_ZN7S4409C1C1Ev),
  NSPAIR(_ZN7S4409C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4409C3;
extern VTBL_ENTRY _ZTI7S4409C3[];
extern  VTBL_ENTRY _ZTV7S4409C3[];
extern Class_Descriptor cd_S4409C2;
extern VTBL_ENTRY _ZTI7S4409C2[];
extern  VTBL_ENTRY _ZTV7S4409C2[];
static Base_Class bases_S4409C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4409C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4409C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4409C1[];
extern void _ZN7S4409C1D1Ev();
extern void _ZN7S4409C1D0Ev();
extern void _ZN7S4409C32v2Ev();
extern void _ZN7S4409C32v3Ev();
extern void _ZN7S4409C32v4Ev();
extern void _ZN7S4409C22v5Ev();
extern void _ZN7S4409C12v1Ev();
static  VTBL_ENTRY vtc_S4409C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4409C1[0]),
  (VTBL_ENTRY)&_ZN7S4409C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4409C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4409C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4409C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4409C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4409C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4409C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4409C1[];
extern  VTBL_ENTRY _ZTV7S4409C1[];
Class_Descriptor cd_S4409C1 = {  "S4409C1", // class name
  bases_S4409C1, 2,
  &(vtc_S4409C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,64), // object size
  NSPAIRA(_ZTI7S4409C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4409C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17985C2  {
  int s17985c2f0;
  ::S4206C14_nt s17985c2f1;
  ::S4206C14_nt s17985c2f2;
  ::S8511C10_nt s17985c2f3;
  ::S8511C10_nt s17985c2f4;
  void *s17985c2f5;
  int s17985c2f6;
  ::S10275C6_nt s17985c2f7;
  void  mf17985c2(); // _ZN8S17985C29mf17985c2Ev
};
//SIG(-1 S17985C2) C1{ m Fi FC2{ m FC3{ m FL[2]}} FC2 FC4{ m FC5{ m FL}} FC4 Fp Fi FC6{ m Fp[2]}}


void  S17985C2 ::mf17985c2(){}

static void Test_S17985C2()
{
  {
    init_simple_test("S17985C2");
    S17985C2 lv;
    check2(sizeof(lv), ABISELECT(88,68), "sizeof(S17985C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17985C2)");
    check_field_offset(lv, s17985c2f0, 0, "S17985C2.s17985c2f0");
    check_field_offset(lv, s17985c2f1, ABISELECT(8,4), "S17985C2.s17985c2f1");
    check_field_offset(lv, s17985c2f2, ABISELECT(24,20), "S17985C2.s17985c2f2");
    check_field_offset(lv, s17985c2f3, ABISELECT(40,36), "S17985C2.s17985c2f3");
    check_field_offset(lv, s17985c2f4, ABISELECT(48,44), "S17985C2.s17985c2f4");
    check_field_offset(lv, s17985c2f5, ABISELECT(56,52), "S17985C2.s17985c2f5");
    check_field_offset(lv, s17985c2f6, ABISELECT(64,56), "S17985C2.s17985c2f6");
    check_field_offset(lv, s17985c2f7, ABISELECT(72,60), "S17985C2.s17985c2f7");
  }
}
static Arrange_To_Call_Me vS17985C2(Test_S17985C2, "S17985C2", ABISELECT(88,68));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17985C1  {
  void *s17985c1f0[2];
  ::S17985C2 s17985c1f1;
  void  mf17985c1(); // _ZN8S17985C19mf17985c1Ev
};
//SIG(1 S17985C1) C1{ m Fp[2] FC2{ m Fi FC3{ m FC4{ m FL[2]}} FC3 FC5{ m FC6{ m FL}} FC5 Fp Fi FC7{ m Fp[2]}}}


void  S17985C1 ::mf17985c1(){}

static void Test_S17985C1()
{
  {
    init_simple_test("S17985C1");
    S17985C1 lv;
    check2(sizeof(lv), ABISELECT(104,76), "sizeof(S17985C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17985C1)");
    check_field_offset(lv, s17985c1f0, 0, "S17985C1.s17985c1f0");
    check_field_offset(lv, s17985c1f1, ABISELECT(16,8), "S17985C1.s17985c1f1");
  }
}
static Arrange_To_Call_Me vS17985C1(Test_S17985C1, "S17985C1", ABISELECT(104,76));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12029C6_nt  {
  void *s12029c6f0;
  int s12029c6f1[4];
  void  mf12029c6(); // _ZN11S12029C6_nt9mf12029c6Ev
};
//SIG(-1 S12029C6_nt) C1{ m Fp Fi[4]}


void  S12029C6_nt ::mf12029c6(){}

//skip512 S12029C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12029C5_nt  {
  ::S12029C6_nt s12029c5f0;
  void  mf12029c5(); // _ZN11S12029C5_nt9mf12029c5Ev
};
//SIG(-1 S12029C5_nt) C1{ m FC2{ m Fp Fi[4]}}


void  S12029C5_nt ::mf12029c5(){}

//skip512 S12029C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12029C7_nt  {
  int s12029c7f0;
  ::S15150C6_nt s12029c7f1;
  void  mf12029c7(); // _ZN11S12029C7_nt9mf12029c7Ev
};
//SIG(-1 S12029C7_nt) C1{ m Fi FC2{ BC3{ m Fp Fi}}}


void  S12029C7_nt ::mf12029c7(){}

//skip512 S12029C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12029C1  {
  ::S15150C5_nt s12029c1f0;
  ::S12029C5_nt s12029c1f1;
  ::S12029C7_nt s12029c1f2;
  char s12029c1f3;
};
//SIG(1 S12029C1) C1{ FC2{ m Fi FC3{ BC4{ m Fp Fi}}} FC5{ m FC6{ m Fp Fi[4]}} FC7{ m Fi FC3} Fc}



static void Test_S12029C1()
{
  {
    init_simple_test("S12029C1");
    S12029C1 lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S12029C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12029C1)");
    check_field_offset(lv, s12029c1f0, 0, "S12029C1.s12029c1f0");
    check_field_offset(lv, s12029c1f1, ABISELECT(24,12), "S12029C1.s12029c1f1");
    check_field_offset(lv, s12029c1f2, ABISELECT(48,32), "S12029C1.s12029c1f2");
    check_field_offset(lv, s12029c1f3, ABISELECT(72,44), "S12029C1.s12029c1f3");
  }
}
static Arrange_To_Call_Me vS12029C1(Test_S12029C1, "S12029C1", ABISELECT(80,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4419C3  {
  ::S16113C5_nt s4419c3f0;
  int s4419c3f1[2];
  char s4419c3f2;
  virtual  ~S4419C3(); // _ZN7S4419C3D1Ev
  virtual void  v2(); // _ZN7S4419C32v2Ev
  virtual void  v3(); // _ZN7S4419C32v3Ev
  virtual void  v4(); // _ZN7S4419C32v4Ev
  S4419C3(); // tgen
};
//SIG(-1 S4419C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4419C3 ::~S4419C3(){ note_dtor("S4419C3", this);}
void  S4419C3 ::v2(){vfunc_called(this, "_ZN7S4419C32v2Ev");}
void  S4419C3 ::v3(){vfunc_called(this, "_ZN7S4419C32v3Ev");}
void  S4419C3 ::v4(){vfunc_called(this, "_ZN7S4419C32v4Ev");}
S4419C3 ::S4419C3(){ note_ctor("S4419C3", this);} // tgen

static void Test_S4419C3()
{
  extern Class_Descriptor cd_S4419C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4419C3, buf);
    S4419C3 *dp, &lv = *(dp=new (buf) S4419C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4419C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4419C3)");
    check_field_offset(lv, s4419c3f0, ABISELECT(8,4), "S4419C3.s4419c3f0");
    check_field_offset(lv, s4419c3f1, ABISELECT(24,16), "S4419C3.s4419c3f1");
    check_field_offset(lv, s4419c3f2, ABISELECT(32,24), "S4419C3.s4419c3f2");
    test_class_info(&lv, &cd_S4419C3);
    dp->~S4419C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4419C3(Test_S4419C3, "S4419C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4419C3C1Ev();
extern void _ZN7S4419C3D1Ev();
Name_Map name_map_S4419C3[] = {
  NSPAIR(_ZN7S4419C3C1Ev),
  NSPAIR(_ZN7S4419C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4419C3[];
extern void _ZN7S4419C3D1Ev();
extern void _ZN7S4419C3D0Ev();
extern void _ZN7S4419C32v2Ev();
extern void _ZN7S4419C32v3Ev();
extern void _ZN7S4419C32v4Ev();
static  VTBL_ENTRY vtc_S4419C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4419C3[0]),
  (VTBL_ENTRY)&_ZN7S4419C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4419C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4419C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4419C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4419C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4419C3[];
extern  VTBL_ENTRY _ZTV7S4419C3[];
Class_Descriptor cd_S4419C3 = {  "S4419C3", // class name
  0,0,//no base classes
  &(vtc_S4419C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4419C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4419C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4419C2  : S4419C3 {
  void *s4419c2f0[2];
  int s4419c2f1;
  char s4419c2f2;
  virtual  ~S4419C2(); // _ZN7S4419C2D1Ev
  virtual void  v5(); // _ZN7S4419C22v5Ev
  S4419C2(); // tgen
};
//SIG(-1 S4419C2) C1{ BC2{ vd v2 v3 v4 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 Fp[2] Fi Fc}


 S4419C2 ::~S4419C2(){ note_dtor("S4419C2", this);}
void  S4419C2 ::v5(){vfunc_called(this, "_ZN7S4419C22v5Ev");}
S4419C2 ::S4419C2(){ note_ctor("S4419C2", this);} // tgen

static void Test_S4419C2()
{
  extern Class_Descriptor cd_S4419C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4419C2, buf);
    S4419C2 *dp, &lv = *(dp=new (buf) S4419C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4419C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4419C2)");
    check_base_class_offset(lv, (S4419C3*), 0, "S4419C2");
    check_field_offset(lv, s4419c2f0, ABISELECT(40,28), "S4419C2.s4419c2f0");
    check_field_offset(lv, s4419c2f1, ABISELECT(56,36), "S4419C2.s4419c2f1");
    check_field_offset(lv, s4419c2f2, ABISELECT(60,40), "S4419C2.s4419c2f2");
    test_class_info(&lv, &cd_S4419C2);
    dp->~S4419C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4419C2(Test_S4419C2, "S4419C2", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4419C2C1Ev();
extern void _ZN7S4419C2D1Ev();
Name_Map name_map_S4419C2[] = {
  NSPAIR(_ZN7S4419C2C1Ev),
  NSPAIR(_ZN7S4419C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4419C3;
extern VTBL_ENTRY _ZTI7S4419C3[];
extern  VTBL_ENTRY _ZTV7S4419C3[];
static Base_Class bases_S4419C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4419C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4419C2[];
extern void _ZN7S4419C2D1Ev();
extern void _ZN7S4419C2D0Ev();
extern void _ZN7S4419C32v2Ev();
extern void _ZN7S4419C32v3Ev();
extern void _ZN7S4419C32v4Ev();
extern void _ZN7S4419C22v5Ev();
static  VTBL_ENTRY vtc_S4419C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4419C2[0]),
  (VTBL_ENTRY)&_ZN7S4419C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4419C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4419C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4419C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4419C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4419C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4419C2[];
extern  VTBL_ENTRY _ZTV7S4419C2[];
Class_Descriptor cd_S4419C2 = {  "S4419C2", // class name
  bases_S4419C2, 1,
  &(vtc_S4419C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4419C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4419C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4419C1  : S4419C2 {
  int s4419c1f0[2];
  virtual  ~S4419C1(); // _ZN7S4419C1D1Ev
  virtual void  v1(); // _ZN7S4419C12v1Ev
  S4419C1(); // tgen
};
//SIG(1 S4419C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 Fp[2] Fi Fc} vd v1 Fi[2]}


 S4419C1 ::~S4419C1(){ note_dtor("S4419C1", this);}
void  S4419C1 ::v1(){vfunc_called(this, "_ZN7S4419C12v1Ev");}
S4419C1 ::S4419C1(){ note_ctor("S4419C1", this);} // tgen

static void Test_S4419C1()
{
  extern Class_Descriptor cd_S4419C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4419C1, buf);
    S4419C1 *dp, &lv = *(dp=new (buf) S4419C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4419C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4419C1)");
    check_base_class_offset(lv, (S4419C3*)(S4419C2*), 0, "S4419C1");
    check_base_class_offset(lv, (S4419C2*), 0, "S4419C1");
    check_field_offset(lv, s4419c1f0, ABISELECT(64,44), "S4419C1.s4419c1f0");
    test_class_info(&lv, &cd_S4419C1);
    dp->~S4419C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4419C1(Test_S4419C1, "S4419C1", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4419C1C1Ev();
extern void _ZN7S4419C1D1Ev();
Name_Map name_map_S4419C1[] = {
  NSPAIR(_ZN7S4419C1C1Ev),
  NSPAIR(_ZN7S4419C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4419C3;
extern VTBL_ENTRY _ZTI7S4419C3[];
extern  VTBL_ENTRY _ZTV7S4419C3[];
extern Class_Descriptor cd_S4419C2;
extern VTBL_ENTRY _ZTI7S4419C2[];
extern  VTBL_ENTRY _ZTV7S4419C2[];
static Base_Class bases_S4419C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4419C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4419C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4419C1[];
extern void _ZN7S4419C1D1Ev();
extern void _ZN7S4419C1D0Ev();
extern void _ZN7S4419C32v2Ev();
extern void _ZN7S4419C32v3Ev();
extern void _ZN7S4419C32v4Ev();
extern void _ZN7S4419C22v5Ev();
extern void _ZN7S4419C12v1Ev();
static  VTBL_ENTRY vtc_S4419C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4419C1[0]),
  (VTBL_ENTRY)&_ZN7S4419C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4419C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4419C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4419C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4419C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4419C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4419C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4419C1[];
extern  VTBL_ENTRY _ZTV7S4419C1[];
Class_Descriptor cd_S4419C1 = {  "S4419C1", // class name
  bases_S4419C1, 2,
  &(vtc_S4419C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4419C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4419C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10116C2_nt  {
  int s10116c2f0;
  virtual  ~S10116C2_nt(); // _ZN11S10116C2_ntD1Ev
  virtual void  v7(); // _ZN11S10116C2_nt2v7Ev
  virtual void  v8(); // _ZN11S10116C2_nt2v8Ev
  virtual void  v9(); // _ZN11S10116C2_nt2v9Ev
  virtual void  v10(); // _ZN11S10116C2_nt3v10Ev
  virtual void  v11(); // _ZN11S10116C2_nt3v11Ev
  virtual void  v12(); // _ZN11S10116C2_nt3v12Ev
  S10116C2_nt(); // tgen
};
//SIG(-1 S10116C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 Fi}


 S10116C2_nt ::~S10116C2_nt(){ note_dtor("S10116C2_nt", this);}
void  S10116C2_nt ::v7(){vfunc_called(this, "_ZN11S10116C2_nt2v7Ev");}
void  S10116C2_nt ::v8(){vfunc_called(this, "_ZN11S10116C2_nt2v8Ev");}
void  S10116C2_nt ::v9(){vfunc_called(this, "_ZN11S10116C2_nt2v9Ev");}
void  S10116C2_nt ::v10(){vfunc_called(this, "_ZN11S10116C2_nt3v10Ev");}
void  S10116C2_nt ::v11(){vfunc_called(this, "_ZN11S10116C2_nt3v11Ev");}
void  S10116C2_nt ::v12(){vfunc_called(this, "_ZN11S10116C2_nt3v12Ev");}
S10116C2_nt ::S10116C2_nt(){ note_ctor("S10116C2_nt", this);} // tgen

//skip512 S10116C2_nt

#else // __cplusplus

extern void _ZN11S10116C2_ntC1Ev();
extern void _ZN11S10116C2_ntD1Ev();
Name_Map name_map_S10116C2_nt[] = {
  NSPAIR(_ZN11S10116C2_ntC1Ev),
  NSPAIR(_ZN11S10116C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10116C2_nt[];
extern void _ZN11S10116C2_ntD1Ev();
extern void _ZN11S10116C2_ntD0Ev();
extern void _ZN11S10116C2_nt2v7Ev();
extern void _ZN11S10116C2_nt2v8Ev();
extern void _ZN11S10116C2_nt2v9Ev();
extern void _ZN11S10116C2_nt3v10Ev();
extern void _ZN11S10116C2_nt3v11Ev();
extern void _ZN11S10116C2_nt3v12Ev();
static  VTBL_ENTRY vtc_S10116C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10116C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S10116C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10116C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S10116C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S10116C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S10116C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10116C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10116C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10116C2_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI11S10116C2_nt[];
VTBL_ENTRY *P__ZTI11S10116C2_nt = _ZTI11S10116C2_nt; 
extern  VTBL_ENTRY _ZTV11S10116C2_nt[];
Class_Descriptor cd_S10116C2_nt = {  "S10116C2_nt", // class name
  0,0,//no base classes
  &(vtc_S10116C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S10116C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10116C2_nt),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10116C3  {
  char s10116c3f0[16];
  long s10116c3f1;
  void  mf10116c3(); // _ZN8S10116C39mf10116c3Ev
};
//SIG(1 S10116C3) C1{ m Fc[16] Fl}


void  S10116C3 ::mf10116c3(){}

static void Test_S10116C3()
{
  {
    init_simple_test("S10116C3");
    S10116C3 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S10116C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10116C3)");
    check_field_offset(lv, s10116c3f0, 0, "S10116C3.s10116c3f0");
    check_field_offset(lv, s10116c3f1, 16, "S10116C3.s10116c3f1");
  }
}
static Arrange_To_Call_Me vS10116C3(Test_S10116C3, "S10116C3", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10116C1  : S10116C2_nt {
  int s10116c1f0;
  ::S10116C3 s10116c1f1[16];
  virtual  ~S10116C1(); // _ZN8S10116C1D1Ev
  virtual void  v1(); // _ZN8S10116C12v1Ev
  virtual void  v2(); // _ZN8S10116C12v2Ev
  virtual void  v3(); // _ZN8S10116C12v3Ev
  virtual void  v4(); // _ZN8S10116C12v4Ev
  virtual void  v5(); // _ZN8S10116C12v5Ev
  virtual void  v6(); // _ZN8S10116C12v6Ev
  S10116C1(); // tgen
};
//SIG(1 S10116C1) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 Fi} vd v1 v2 v3 v4 v5 v6 Fi FC3{ m Fc[16] Fl}[16]}


 S10116C1 ::~S10116C1(){ note_dtor("S10116C1", this);}
void  S10116C1 ::v1(){vfunc_called(this, "_ZN8S10116C12v1Ev");}
void  S10116C1 ::v2(){vfunc_called(this, "_ZN8S10116C12v2Ev");}
void  S10116C1 ::v3(){vfunc_called(this, "_ZN8S10116C12v3Ev");}
void  S10116C1 ::v4(){vfunc_called(this, "_ZN8S10116C12v4Ev");}
void  S10116C1 ::v5(){vfunc_called(this, "_ZN8S10116C12v5Ev");}
void  S10116C1 ::v6(){vfunc_called(this, "_ZN8S10116C12v6Ev");}
S10116C1 ::S10116C1(){ note_ctor("S10116C1", this);} // tgen

static void Test_S10116C1()
{
  extern Class_Descriptor cd_S10116C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,84)];
    init_test(&cd_S10116C1, buf);
    S10116C1 *dp, &lv = *(dp=new (buf) S10116C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,332), "sizeof(S10116C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10116C1)");
    check_base_class_offset(lv, (S10116C2_nt*), 0, "S10116C1");
    check_field_offset(lv, s10116c1f0, ABISELECT(12,8), "S10116C1.s10116c1f0");
    check_field_offset(lv, s10116c1f1, ABISELECT(16,12), "S10116C1.s10116c1f1");
    test_class_info(&lv, &cd_S10116C1);
    dp->~S10116C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10116C1(Test_S10116C1, "S10116C1", ABISELECT(400,332));

#else // __cplusplus

extern void _ZN8S10116C1C1Ev();
extern void _ZN8S10116C1D1Ev();
Name_Map name_map_S10116C1[] = {
  NSPAIR(_ZN8S10116C1C1Ev),
  NSPAIR(_ZN8S10116C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10116C2_nt;
extern VTBL_ENTRY _ZTI11S10116C2_nt[];
extern  VTBL_ENTRY _ZTV11S10116C2_nt[];
static Base_Class bases_S10116C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10116C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10116C1[];
extern void _ZN8S10116C1D1Ev();
extern void _ZN8S10116C1D0Ev();
extern void _ZN11S10116C2_nt2v7Ev();
extern void _ZN11S10116C2_nt2v8Ev();
extern void _ZN11S10116C2_nt2v9Ev();
extern void _ZN11S10116C2_nt3v10Ev();
extern void _ZN11S10116C2_nt3v11Ev();
extern void _ZN11S10116C2_nt3v12Ev();
extern void _ZN8S10116C12v1Ev();
extern void _ZN8S10116C12v2Ev();
extern void _ZN8S10116C12v3Ev();
extern void _ZN8S10116C12v4Ev();
extern void _ZN8S10116C12v5Ev();
extern void _ZN8S10116C12v6Ev();
static  VTBL_ENTRY vtc_S10116C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10116C1[0]),
  (VTBL_ENTRY)&_ZN8S10116C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10116C1D0Ev,
  (VTBL_ENTRY)&_ZN11S10116C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S10116C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S10116C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10116C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10116C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10116C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S10116C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10116C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10116C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10116C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10116C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10116C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10116C1[];
extern  VTBL_ENTRY _ZTV8S10116C1[];
Class_Descriptor cd_S10116C1 = {  "S10116C1", // class name
  bases_S10116C1, 1,
  &(vtc_S10116C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,332), // object size
  NSPAIRA(_ZTI8S10116C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10116C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4420C3  {
  ::S16113C5_nt s4420c3f0;
  int s4420c3f1[2];
  char s4420c3f2;
  virtual  ~S4420C3(); // _ZN7S4420C3D1Ev
  virtual void  v2(); // _ZN7S4420C32v2Ev
  virtual void  v3(); // _ZN7S4420C32v3Ev
  virtual void  v4(); // _ZN7S4420C32v4Ev
  S4420C3(); // tgen
};
//SIG(-1 S4420C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4420C3 ::~S4420C3(){ note_dtor("S4420C3", this);}
void  S4420C3 ::v2(){vfunc_called(this, "_ZN7S4420C32v2Ev");}
void  S4420C3 ::v3(){vfunc_called(this, "_ZN7S4420C32v3Ev");}
void  S4420C3 ::v4(){vfunc_called(this, "_ZN7S4420C32v4Ev");}
S4420C3 ::S4420C3(){ note_ctor("S4420C3", this);} // tgen

static void Test_S4420C3()
{
  extern Class_Descriptor cd_S4420C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4420C3, buf);
    S4420C3 *dp, &lv = *(dp=new (buf) S4420C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4420C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4420C3)");
    check_field_offset(lv, s4420c3f0, ABISELECT(8,4), "S4420C3.s4420c3f0");
    check_field_offset(lv, s4420c3f1, ABISELECT(24,16), "S4420C3.s4420c3f1");
    check_field_offset(lv, s4420c3f2, ABISELECT(32,24), "S4420C3.s4420c3f2");
    test_class_info(&lv, &cd_S4420C3);
    dp->~S4420C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4420C3(Test_S4420C3, "S4420C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4420C3C1Ev();
extern void _ZN7S4420C3D1Ev();
Name_Map name_map_S4420C3[] = {
  NSPAIR(_ZN7S4420C3C1Ev),
  NSPAIR(_ZN7S4420C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4420C3[];
extern void _ZN7S4420C3D1Ev();
extern void _ZN7S4420C3D0Ev();
extern void _ZN7S4420C32v2Ev();
extern void _ZN7S4420C32v3Ev();
extern void _ZN7S4420C32v4Ev();
static  VTBL_ENTRY vtc_S4420C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4420C3[0]),
  (VTBL_ENTRY)&_ZN7S4420C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4420C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4420C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4420C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4420C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4420C3[];
extern  VTBL_ENTRY _ZTV7S4420C3[];
Class_Descriptor cd_S4420C3 = {  "S4420C3", // class name
  0,0,//no base classes
  &(vtc_S4420C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4420C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4420C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4420C2  : S4420C3 {
  void *s4420c2f0[2];
  int s4420c2f1;
  char s4420c2f2;
  virtual  ~S4420C2(); // _ZN7S4420C2D1Ev
  virtual void  v5(); // _ZN7S4420C22v5Ev
  S4420C2(); // tgen
};
//SIG(-1 S4420C2) C1{ BC2{ vd v2 v3 v4 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 Fp[2] Fi Fc}


 S4420C2 ::~S4420C2(){ note_dtor("S4420C2", this);}
void  S4420C2 ::v5(){vfunc_called(this, "_ZN7S4420C22v5Ev");}
S4420C2 ::S4420C2(){ note_ctor("S4420C2", this);} // tgen

static void Test_S4420C2()
{
  extern Class_Descriptor cd_S4420C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4420C2, buf);
    S4420C2 *dp, &lv = *(dp=new (buf) S4420C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4420C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4420C2)");
    check_base_class_offset(lv, (S4420C3*), 0, "S4420C2");
    check_field_offset(lv, s4420c2f0, ABISELECT(40,28), "S4420C2.s4420c2f0");
    check_field_offset(lv, s4420c2f1, ABISELECT(56,36), "S4420C2.s4420c2f1");
    check_field_offset(lv, s4420c2f2, ABISELECT(60,40), "S4420C2.s4420c2f2");
    test_class_info(&lv, &cd_S4420C2);
    dp->~S4420C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4420C2(Test_S4420C2, "S4420C2", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4420C2C1Ev();
extern void _ZN7S4420C2D1Ev();
Name_Map name_map_S4420C2[] = {
  NSPAIR(_ZN7S4420C2C1Ev),
  NSPAIR(_ZN7S4420C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4420C3;
extern VTBL_ENTRY _ZTI7S4420C3[];
extern  VTBL_ENTRY _ZTV7S4420C3[];
static Base_Class bases_S4420C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4420C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4420C2[];
extern void _ZN7S4420C2D1Ev();
extern void _ZN7S4420C2D0Ev();
extern void _ZN7S4420C32v2Ev();
extern void _ZN7S4420C32v3Ev();
extern void _ZN7S4420C32v4Ev();
extern void _ZN7S4420C22v5Ev();
static  VTBL_ENTRY vtc_S4420C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4420C2[0]),
  (VTBL_ENTRY)&_ZN7S4420C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4420C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4420C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4420C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4420C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4420C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4420C2[];
extern  VTBL_ENTRY _ZTV7S4420C2[];
Class_Descriptor cd_S4420C2 = {  "S4420C2", // class name
  bases_S4420C2, 1,
  &(vtc_S4420C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4420C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4420C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4420C1  : S4420C2 {
  int s4420c1f0;
  virtual  ~S4420C1(); // _ZN7S4420C1D1Ev
  virtual void  v1(); // _ZN7S4420C12v1Ev
  S4420C1(); // tgen
};
//SIG(1 S4420C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 Fp[2] Fi Fc} vd v1 Fi}


 S4420C1 ::~S4420C1(){ note_dtor("S4420C1", this);}
void  S4420C1 ::v1(){vfunc_called(this, "_ZN7S4420C12v1Ev");}
S4420C1 ::S4420C1(){ note_ctor("S4420C1", this);} // tgen

static void Test_S4420C1()
{
  extern Class_Descriptor cd_S4420C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4420C1, buf);
    S4420C1 *dp, &lv = *(dp=new (buf) S4420C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4420C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4420C1)");
    check_base_class_offset(lv, (S4420C3*)(S4420C2*), 0, "S4420C1");
    check_base_class_offset(lv, (S4420C2*), 0, "S4420C1");
    check_field_offset(lv, s4420c1f0, ABISELECT(64,44), "S4420C1.s4420c1f0");
    test_class_info(&lv, &cd_S4420C1);
    dp->~S4420C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4420C1(Test_S4420C1, "S4420C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4420C1C1Ev();
extern void _ZN7S4420C1D1Ev();
Name_Map name_map_S4420C1[] = {
  NSPAIR(_ZN7S4420C1C1Ev),
  NSPAIR(_ZN7S4420C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4420C3;
extern VTBL_ENTRY _ZTI7S4420C3[];
extern  VTBL_ENTRY _ZTV7S4420C3[];
extern Class_Descriptor cd_S4420C2;
extern VTBL_ENTRY _ZTI7S4420C2[];
extern  VTBL_ENTRY _ZTV7S4420C2[];
static Base_Class bases_S4420C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4420C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4420C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4420C1[];
extern void _ZN7S4420C1D1Ev();
extern void _ZN7S4420C1D0Ev();
extern void _ZN7S4420C32v2Ev();
extern void _ZN7S4420C32v3Ev();
extern void _ZN7S4420C32v4Ev();
extern void _ZN7S4420C22v5Ev();
extern void _ZN7S4420C12v1Ev();
static  VTBL_ENTRY vtc_S4420C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4420C1[0]),
  (VTBL_ENTRY)&_ZN7S4420C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4420C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4420C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4420C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4420C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4420C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4420C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4420C1[];
extern  VTBL_ENTRY _ZTV7S4420C1[];
Class_Descriptor cd_S4420C1 = {  "S4420C1", // class name
  bases_S4420C1, 2,
  &(vtc_S4420C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4420C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4420C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9247C2  {
  ::S16113C5_nt s9247c2f0;
  int s9247c2f1[2];
  char s9247c2f2;
  virtual  ~S9247C2(); // _ZN7S9247C2D1Ev
  virtual void  v3(); // _ZN7S9247C22v3Ev
  virtual void  v4(); // _ZN7S9247C22v4Ev
  virtual void  v5(); // _ZN7S9247C22v5Ev
  S9247C2(); // tgen
};
//SIG(-1 S9247C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9247C2 ::~S9247C2(){ note_dtor("S9247C2", this);}
void  S9247C2 ::v3(){vfunc_called(this, "_ZN7S9247C22v3Ev");}
void  S9247C2 ::v4(){vfunc_called(this, "_ZN7S9247C22v4Ev");}
void  S9247C2 ::v5(){vfunc_called(this, "_ZN7S9247C22v5Ev");}
S9247C2 ::S9247C2(){ note_ctor("S9247C2", this);} // tgen

static void Test_S9247C2()
{
  extern Class_Descriptor cd_S9247C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9247C2, buf);
    S9247C2 *dp, &lv = *(dp=new (buf) S9247C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9247C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9247C2)");
    check_field_offset(lv, s9247c2f0, ABISELECT(8,4), "S9247C2.s9247c2f0");
    check_field_offset(lv, s9247c2f1, ABISELECT(24,16), "S9247C2.s9247c2f1");
    check_field_offset(lv, s9247c2f2, ABISELECT(32,24), "S9247C2.s9247c2f2");
    test_class_info(&lv, &cd_S9247C2);
    dp->~S9247C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9247C2(Test_S9247C2, "S9247C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9247C2C1Ev();
extern void _ZN7S9247C2D1Ev();
Name_Map name_map_S9247C2[] = {
  NSPAIR(_ZN7S9247C2C1Ev),
  NSPAIR(_ZN7S9247C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9247C2[];
extern void _ZN7S9247C2D1Ev();
extern void _ZN7S9247C2D0Ev();
extern void _ZN7S9247C22v3Ev();
extern void _ZN7S9247C22v4Ev();
extern void _ZN7S9247C22v5Ev();
static  VTBL_ENTRY vtc_S9247C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9247C2[0]),
  (VTBL_ENTRY)&_ZN7S9247C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9247C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9247C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9247C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9247C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9247C2[];
extern  VTBL_ENTRY _ZTV7S9247C2[];
Class_Descriptor cd_S9247C2 = {  "S9247C2", // class name
  0,0,//no base classes
  &(vtc_S9247C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9247C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9247C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9247C1  : S9247C2 {
  char s9247c1f0[2];
  int s9247c1f1;
  ::S3593C21_nt s9247c1f2;
  __tsi64 s9247c1f3;
  virtual  ~S9247C1(); // _ZN7S9247C1D1Ev
  virtual void  v1(); // _ZN7S9247C12v1Ev
  virtual void  v2(); // _ZN7S9247C12v2Ev
  S9247C1(); // tgen
};
//SIG(1 S9247C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fc[2] Fi FC5{ m Fp} FL}


 S9247C1 ::~S9247C1(){ note_dtor("S9247C1", this);}
void  S9247C1 ::v1(){vfunc_called(this, "_ZN7S9247C12v1Ev");}
void  S9247C1 ::v2(){vfunc_called(this, "_ZN7S9247C12v2Ev");}
S9247C1 ::S9247C1(){ note_ctor("S9247C1", this);} // tgen

static void Test_S9247C1()
{
  extern Class_Descriptor cd_S9247C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S9247C1, buf);
    S9247C1 *dp, &lv = *(dp=new (buf) S9247C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S9247C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9247C1)");
    check_base_class_offset(lv, (S9247C2*), 0, "S9247C1");
    check_field_offset(lv, s9247c1f0, ABISELECT(33,25), "S9247C1.s9247c1f0");
    check_field_offset(lv, s9247c1f1, ABISELECT(36,28), "S9247C1.s9247c1f1");
    check_field_offset(lv, s9247c1f2, ABISELECT(40,32), "S9247C1.s9247c1f2");
    check_field_offset(lv, s9247c1f3, ABISELECT(48,36), "S9247C1.s9247c1f3");
    test_class_info(&lv, &cd_S9247C1);
    dp->~S9247C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9247C1(Test_S9247C1, "S9247C1", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN7S9247C1C1Ev();
extern void _ZN7S9247C1D1Ev();
Name_Map name_map_S9247C1[] = {
  NSPAIR(_ZN7S9247C1C1Ev),
  NSPAIR(_ZN7S9247C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9247C2;
extern VTBL_ENTRY _ZTI7S9247C2[];
extern  VTBL_ENTRY _ZTV7S9247C2[];
static Base_Class bases_S9247C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9247C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9247C1[];
extern void _ZN7S9247C1D1Ev();
extern void _ZN7S9247C1D0Ev();
extern void _ZN7S9247C22v3Ev();
extern void _ZN7S9247C22v4Ev();
extern void _ZN7S9247C22v5Ev();
extern void _ZN7S9247C12v1Ev();
extern void _ZN7S9247C12v2Ev();
static  VTBL_ENTRY vtc_S9247C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9247C1[0]),
  (VTBL_ENTRY)&_ZN7S9247C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9247C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9247C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9247C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9247C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9247C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9247C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9247C1[];
extern  VTBL_ENTRY _ZTV7S9247C1[];
Class_Descriptor cd_S9247C1 = {  "S9247C1", // class name
  bases_S9247C1, 1,
  &(vtc_S9247C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI7S9247C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9247C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10159C2_nt  {
  virtual  ~S10159C2_nt(); // _ZN11S10159C2_ntD1Ev
  virtual void  v7(); // _ZN11S10159C2_nt2v7Ev
  virtual void  v8(); // _ZN11S10159C2_nt2v8Ev
  virtual void  v9(); // _ZN11S10159C2_nt2v9Ev
  virtual void  v10(); // _ZN11S10159C2_nt3v10Ev
  virtual void  v11(); // _ZN11S10159C2_nt3v11Ev
  virtual void  v12(); // _ZN11S10159C2_nt3v12Ev
  S10159C2_nt(); // tgen
};
//SIG(-1 S10159C2_nt) C1{ vd v1 v2 v3 v4 v5 v6}


 S10159C2_nt ::~S10159C2_nt(){ note_dtor("S10159C2_nt", this);}
void  S10159C2_nt ::v7(){vfunc_called(this, "_ZN11S10159C2_nt2v7Ev");}
void  S10159C2_nt ::v8(){vfunc_called(this, "_ZN11S10159C2_nt2v8Ev");}
void  S10159C2_nt ::v9(){vfunc_called(this, "_ZN11S10159C2_nt2v9Ev");}
void  S10159C2_nt ::v10(){vfunc_called(this, "_ZN11S10159C2_nt3v10Ev");}
void  S10159C2_nt ::v11(){vfunc_called(this, "_ZN11S10159C2_nt3v11Ev");}
void  S10159C2_nt ::v12(){vfunc_called(this, "_ZN11S10159C2_nt3v12Ev");}
S10159C2_nt ::S10159C2_nt(){ note_ctor("S10159C2_nt", this);} // tgen

//skip512 S10159C2_nt

#else // __cplusplus

extern void _ZN11S10159C2_ntC1Ev();
extern void _ZN11S10159C2_ntD1Ev();
Name_Map name_map_S10159C2_nt[] = {
  NSPAIR(_ZN11S10159C2_ntC1Ev),
  NSPAIR(_ZN11S10159C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10159C2_nt[];
extern void _ZN11S10159C2_ntD1Ev();
extern void _ZN11S10159C2_ntD0Ev();
extern void _ZN11S10159C2_nt2v7Ev();
extern void _ZN11S10159C2_nt2v8Ev();
extern void _ZN11S10159C2_nt2v9Ev();
extern void _ZN11S10159C2_nt3v10Ev();
extern void _ZN11S10159C2_nt3v11Ev();
extern void _ZN11S10159C2_nt3v12Ev();
static  VTBL_ENTRY vtc_S10159C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10159C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S10159C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10159C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S10159C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S10159C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S10159C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10159C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10159C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10159C2_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI11S10159C2_nt[];
VTBL_ENTRY *P__ZTI11S10159C2_nt = _ZTI11S10159C2_nt; 
extern  VTBL_ENTRY _ZTV11S10159C2_nt[];
Class_Descriptor cd_S10159C2_nt = {  "S10159C2_nt", // class name
  0,0,//no base classes
  &(vtc_S10159C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S10159C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10159C2_nt),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10159C1  : S10159C2_nt {
  ::S4206C36_nt s10159c1f0;
  virtual  ~S10159C1(); // _ZN8S10159C1D1Ev
  virtual void  v1(); // _ZN8S10159C12v1Ev
  virtual void  v2(); // _ZN8S10159C12v2Ev
  virtual void  v3(); // _ZN8S10159C12v3Ev
  virtual void  v4(); // _ZN8S10159C12v4Ev
  virtual void  v5(); // _ZN8S10159C12v5Ev
  virtual void  v6(); // _ZN8S10159C12v6Ev
  S10159C1(); // tgen
};
//SIG(1 S10159C1) C1{ BC2{ vd v7 v8 v9 v10 v11 v12} vd v1 v2 v3 v4 v5 v6 FC3{ m Fp Fi[2] FC4{ m}}}


 S10159C1 ::~S10159C1(){ note_dtor("S10159C1", this);}
void  S10159C1 ::v1(){vfunc_called(this, "_ZN8S10159C12v1Ev");}
void  S10159C1 ::v2(){vfunc_called(this, "_ZN8S10159C12v2Ev");}
void  S10159C1 ::v3(){vfunc_called(this, "_ZN8S10159C12v3Ev");}
void  S10159C1 ::v4(){vfunc_called(this, "_ZN8S10159C12v4Ev");}
void  S10159C1 ::v5(){vfunc_called(this, "_ZN8S10159C12v5Ev");}
void  S10159C1 ::v6(){vfunc_called(this, "_ZN8S10159C12v6Ev");}
S10159C1 ::S10159C1(){ note_ctor("S10159C1", this);} // tgen

static void Test_S10159C1()
{
  extern Class_Descriptor cd_S10159C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S10159C1, buf);
    S10159C1 *dp, &lv = *(dp=new (buf) S10159C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S10159C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10159C1)");
    check_base_class_offset(lv, (S10159C2_nt*), 0, "S10159C1");
    check_field_offset(lv, s10159c1f0, ABISELECT(8,4), "S10159C1.s10159c1f0");
    test_class_info(&lv, &cd_S10159C1);
    dp->~S10159C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10159C1(Test_S10159C1, "S10159C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S10159C1C1Ev();
extern void _ZN8S10159C1D1Ev();
Name_Map name_map_S10159C1[] = {
  NSPAIR(_ZN8S10159C1C1Ev),
  NSPAIR(_ZN8S10159C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10159C2_nt;
extern VTBL_ENTRY _ZTI11S10159C2_nt[];
extern  VTBL_ENTRY _ZTV11S10159C2_nt[];
static Base_Class bases_S10159C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10159C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10159C1[];
extern void _ZN8S10159C1D1Ev();
extern void _ZN8S10159C1D0Ev();
extern void _ZN11S10159C2_nt2v7Ev();
extern void _ZN11S10159C2_nt2v8Ev();
extern void _ZN11S10159C2_nt2v9Ev();
extern void _ZN11S10159C2_nt3v10Ev();
extern void _ZN11S10159C2_nt3v11Ev();
extern void _ZN11S10159C2_nt3v12Ev();
extern void _ZN8S10159C12v1Ev();
extern void _ZN8S10159C12v2Ev();
extern void _ZN8S10159C12v3Ev();
extern void _ZN8S10159C12v4Ev();
extern void _ZN8S10159C12v5Ev();
extern void _ZN8S10159C12v6Ev();
static  VTBL_ENTRY vtc_S10159C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10159C1[0]),
  (VTBL_ENTRY)&_ZN8S10159C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10159C1D0Ev,
  (VTBL_ENTRY)&_ZN11S10159C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S10159C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S10159C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10159C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10159C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10159C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S10159C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10159C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10159C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10159C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10159C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10159C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10159C1[];
extern  VTBL_ENTRY _ZTV8S10159C1[];
Class_Descriptor cd_S10159C1 = {  "S10159C1", // class name
  bases_S10159C1, 1,
  &(vtc_S10159C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S10159C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10159C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15373C3_nt  {
  char s15373c3f0;
  char s15373c3f1[15];
  void  mf15373c3(); // _ZN11S15373C3_nt9mf15373c3Ev
};
//SIG(-1 S15373C3_nt) C1{ m Fc[16]}


void  S15373C3_nt ::mf15373c3(){}

//skip512 S15373C3_nt

#else // __cplusplus

Class_Descriptor cd_S15373C3_nt = {  "S15373C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  16, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15373C2_nt  : S15373C3_nt {
};
//SIG(-1 S15373C2_nt) C1{ BC2{ m Fc[16]}}



//skip512 S15373C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S15373C3_nt;
static Base_Class bases_S15373C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15373C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15373C1  {
  ::S15373C2_nt s15373c1f0;
  ::S15373C2_nt s15373c1f1;
  char s15373c1f2;
  int s15373c1f3[3];
  void *s15373c1f4;
  int s15373c1f5[4];
  char s15373c1f6;
  int s15373c1f7;
  void *s15373c1f8[2];
  int s15373c1f9;
  void *s15373c1f10;
  int s15373c1f11;
  void *s15373c1f12;
  void  mf15373c1(); // _ZN8S15373C19mf15373c1Ev
};
//SIG(1 S15373C1) C1{ m FC2{ BC3{ m Fc[16]}} FC2 Fc Fi[3] Fp Fi[4] Fc Fi Fp[2] Fi Fp Fi Fp}


void  S15373C1 ::mf15373c1(){}

static void Test_S15373C1()
{
  {
    init_simple_test("S15373C1");
    S15373C1 lv;
    check2(sizeof(lv), ABISELECT(128,100), "sizeof(S15373C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15373C1)");
    check_field_offset(lv, s15373c1f0, 0, "S15373C1.s15373c1f0");
    check_field_offset(lv, s15373c1f1, 16, "S15373C1.s15373c1f1");
    check_field_offset(lv, s15373c1f2, 32, "S15373C1.s15373c1f2");
    check_field_offset(lv, s15373c1f3, 36, "S15373C1.s15373c1f3");
    check_field_offset(lv, s15373c1f4, 48, "S15373C1.s15373c1f4");
    check_field_offset(lv, s15373c1f5, ABISELECT(56,52), "S15373C1.s15373c1f5");
    check_field_offset(lv, s15373c1f6, ABISELECT(72,68), "S15373C1.s15373c1f6");
    check_field_offset(lv, s15373c1f7, ABISELECT(76,72), "S15373C1.s15373c1f7");
    check_field_offset(lv, s15373c1f8, ABISELECT(80,76), "S15373C1.s15373c1f8");
    check_field_offset(lv, s15373c1f9, ABISELECT(96,84), "S15373C1.s15373c1f9");
    check_field_offset(lv, s15373c1f10, ABISELECT(104,88), "S15373C1.s15373c1f10");
    check_field_offset(lv, s15373c1f11, ABISELECT(112,92), "S15373C1.s15373c1f11");
    check_field_offset(lv, s15373c1f12, ABISELECT(120,96), "S15373C1.s15373c1f12");
  }
}
static Arrange_To_Call_Me vS15373C1(Test_S15373C1, "S15373C1", ABISELECT(128,100));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14338C2  {
  int s14338c2f0[103];
};
//SIG(-1 S14338C2) C1{ Fi[103]}



static void Test_S14338C2()
{
  {
    init_simple_test("S14338C2");
    S14338C2 lv;
    check2(sizeof(lv), 412, "sizeof(S14338C2)");
    check2(__alignof__(lv), 4, "__alignof__(S14338C2)");
    check_field_offset(lv, s14338c2f0, 0, "S14338C2.s14338c2f0");
  }
}
static Arrange_To_Call_Me vS14338C2(Test_S14338C2, "S14338C2", 412);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14338C1  {
  void *s14338c1f0;
  int s14338c1f1[3];
  void *s14338c1f2;
  int s14338c1f3[3];
  void *s14338c1f4;
  char s14338c1f5[20];
  int s14338c1f6[200];
  char s14338c1f7[20];
  ::S14338C2 s14338c1f8;
  char s14338c1f9[1024];
  void *s14338c1f10[4];
};
//SIG(1 S14338C1) C1{ Fp Fi[3] Fp Fi[3] Fp Fc[20] Fi[200] Fc[20] FC2{ Fi[103]} Fc[1024] Fp[4]}



static void Test_S14338C1()
{
  {
    init_simple_test("S14338C1");
    S14338C1 lv;
    check2(sizeof(lv), ABISELECT(2368,2328), "sizeof(S14338C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14338C1)");
    check_field_offset(lv, s14338c1f0, 0, "S14338C1.s14338c1f0");
    check_field_offset(lv, s14338c1f1, ABISELECT(8,4), "S14338C1.s14338c1f1");
    check_field_offset(lv, s14338c1f2, ABISELECT(24,16), "S14338C1.s14338c1f2");
    check_field_offset(lv, s14338c1f3, ABISELECT(32,20), "S14338C1.s14338c1f3");
    check_field_offset(lv, s14338c1f4, ABISELECT(48,32), "S14338C1.s14338c1f4");
    check_field_offset(lv, s14338c1f5, ABISELECT(56,36), "S14338C1.s14338c1f5");
    check_field_offset(lv, s14338c1f6, ABISELECT(76,56), "S14338C1.s14338c1f6");
    check_field_offset(lv, s14338c1f7, ABISELECT(876,856), "S14338C1.s14338c1f7");
    check_field_offset(lv, s14338c1f8, ABISELECT(896,876), "S14338C1.s14338c1f8");
    check_field_offset(lv, s14338c1f9, ABISELECT(1308,1288), "S14338C1.s14338c1f9");
    check_field_offset(lv, s14338c1f10, ABISELECT(2336,2312), "S14338C1.s14338c1f10");
  }
}
static Arrange_To_Call_Me vS14338C1(Test_S14338C1, "S14338C1", ABISELECT(2368,2328));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6675C2  {
  void *s6675c2f0[10];
  __tsi64  :0;
  int s6675c2f2[3];
  void *s6675c2f3;
  virtual void  v3(); // _ZN7S6675C22v3Ev
  virtual void  v4(); // _ZN7S6675C22v4Ev
  ~S6675C2(); // tgen
  S6675C2(); // tgen
};
//SIG(-1 S6675C2) C1{ v1 v2 Fp[10] FL:0 Fi[3] Fp}


void  S6675C2 ::v3(){vfunc_called(this, "_ZN7S6675C22v3Ev");}
void  S6675C2 ::v4(){vfunc_called(this, "_ZN7S6675C22v4Ev");}
S6675C2 ::~S6675C2(){ note_dtor("S6675C2", this);} // tgen
S6675C2 ::S6675C2(){ note_ctor("S6675C2", this);} // tgen

static void Test_S6675C2()
{
  extern Class_Descriptor cd_S6675C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,16)];
    init_test(&cd_S6675C2, buf);
    S6675C2 *dp, &lv = *(dp=new (buf) S6675C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,60), "sizeof(S6675C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6675C2)");
    check_field_offset(lv, s6675c2f0, ABISELECT(8,4), "S6675C2.s6675c2f0");
    check_field_offset(lv, s6675c2f2, ABISELECT(88,44), "S6675C2.s6675c2f2");
    check_field_offset(lv, s6675c2f3, ABISELECT(104,56), "S6675C2.s6675c2f3");
    test_class_info(&lv, &cd_S6675C2);
    dp->~S6675C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6675C2(Test_S6675C2, "S6675C2", ABISELECT(112,60));

#else // __cplusplus

extern void _ZN7S6675C2C1Ev();
extern void _ZN7S6675C2D1Ev();
Name_Map name_map_S6675C2[] = {
  NSPAIR(_ZN7S6675C2C1Ev),
  NSPAIR(_ZN7S6675C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6675C2[];
extern void _ZN7S6675C22v3Ev();
extern void _ZN7S6675C22v4Ev();
static  VTBL_ENTRY vtc_S6675C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6675C2[0]),
  (VTBL_ENTRY)&_ZN7S6675C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6675C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S6675C2[];
extern  VTBL_ENTRY _ZTV7S6675C2[];
Class_Descriptor cd_S6675C2 = {  "S6675C2", // class name
  0,0,//no base classes
  &(vtc_S6675C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,60), // object size
  NSPAIRA(_ZTI7S6675C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6675C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6675C3  : S6675C2 {
  void *s6675c3f0;
  virtual  ~S6675C3(); // _ZN7S6675C3D1Ev
  virtual void  v5(); // _ZN7S6675C32v5Ev
  virtual void  v6(); // _ZN7S6675C32v6Ev
  virtual void  v7(); // _ZN7S6675C32v7Ev
  S6675C3(); // tgen
};
//SIG(-1 S6675C3) C1{ BC2{ v4 v5 Fp[10] FL:0 Fi[3] Fp} vd v1 v2 v3 Fp}


 S6675C3 ::~S6675C3(){ note_dtor("S6675C3", this);}
void  S6675C3 ::v5(){vfunc_called(this, "_ZN7S6675C32v5Ev");}
void  S6675C3 ::v6(){vfunc_called(this, "_ZN7S6675C32v6Ev");}
void  S6675C3 ::v7(){vfunc_called(this, "_ZN7S6675C32v7Ev");}
S6675C3 ::S6675C3(){ note_ctor("S6675C3", this);} // tgen

static void Test_S6675C3()
{
  extern Class_Descriptor cd_S6675C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,17)];
    init_test(&cd_S6675C3, buf);
    S6675C3 *dp, &lv = *(dp=new (buf) S6675C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,64), "sizeof(S6675C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6675C3)");
    check_base_class_offset(lv, (S6675C2*), 0, "S6675C3");
    check_field_offset(lv, s6675c3f0, ABISELECT(112,60), "S6675C3.s6675c3f0");
    test_class_info(&lv, &cd_S6675C3);
    dp->~S6675C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6675C3(Test_S6675C3, "S6675C3", ABISELECT(120,64));

#else // __cplusplus

extern void _ZN7S6675C3C1Ev();
extern void _ZN7S6675C3D1Ev();
Name_Map name_map_S6675C3[] = {
  NSPAIR(_ZN7S6675C3C1Ev),
  NSPAIR(_ZN7S6675C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6675C2;
extern VTBL_ENTRY _ZTI7S6675C2[];
extern  VTBL_ENTRY _ZTV7S6675C2[];
static Base_Class bases_S6675C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6675C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6675C3[];
extern void _ZN7S6675C22v3Ev();
extern void _ZN7S6675C22v4Ev();
extern void _ZN7S6675C3D1Ev();
extern void _ZN7S6675C3D0Ev();
extern void _ZN7S6675C32v5Ev();
extern void _ZN7S6675C32v6Ev();
extern void _ZN7S6675C32v7Ev();
static  VTBL_ENTRY vtc_S6675C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6675C3[0]),
  (VTBL_ENTRY)&_ZN7S6675C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6675C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6675C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6675C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6675C32v5Ev,
  (VTBL_ENTRY)&_ZN7S6675C32v6Ev,
  (VTBL_ENTRY)&_ZN7S6675C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S6675C3[];
extern  VTBL_ENTRY _ZTV7S6675C3[];
Class_Descriptor cd_S6675C3 = {  "S6675C3", // class name
  bases_S6675C3, 1,
  &(vtc_S6675C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,64), // object size
  NSPAIRA(_ZTI7S6675C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6675C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6675C1  : S6675C2 , S6675C3 {
  void *s6675c1f0[2];
  virtual  ~S6675C1(); // _ZN7S6675C1D1Ev
  virtual void  v1(); // _ZN7S6675C12v1Ev
  virtual void  v2(); // _ZN7S6675C12v2Ev
  S6675C1(); // tgen
};
//SIG(1 S6675C1) C1{ BC2{ v3 v4 Fp[10] FL:0 Fi[3] Fp} BC3{ BC2 vd v5 v6 v7 Fp} vd v1 v2 Fp[2]}


 S6675C1 ::~S6675C1(){ note_dtor("S6675C1", this);}
void  S6675C1 ::v1(){vfunc_called(this, "_ZN7S6675C12v1Ev");}
void  S6675C1 ::v2(){vfunc_called(this, "_ZN7S6675C12v2Ev");}
S6675C1 ::S6675C1(){ note_ctor("S6675C1", this);} // tgen

static void Test_S6675C1()
{
  extern Class_Descriptor cd_S6675C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,34)];
    init_test(&cd_S6675C1, buf);
    S6675C1 *dp, &lv = *(dp=new (buf) S6675C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,132), "sizeof(S6675C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6675C1)");
    /*is_ambiguous_... S6675C1::S6675C2 */ AMB_check_base_class_offset(lv, (S6675C2*), 0, "S6675C1");
    check_base_class_offset(lv, (S6675C2*)(S6675C3*), ABISELECT(112,60), "S6675C1");
    check_base_class_offset(lv, (S6675C3*), ABISELECT(112,60), "S6675C1");
    check_field_offset(lv, s6675c1f0, ABISELECT(232,124), "S6675C1.s6675c1f0");
    test_class_info(&lv, &cd_S6675C1);
    dp->~S6675C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6675C1(Test_S6675C1, "S6675C1", ABISELECT(248,132));

#else // __cplusplus

extern void _ZN7S6675C1C1Ev();
extern void _ZN7S6675C1D1Ev();
Name_Map name_map_S6675C1[] = {
  NSPAIR(_ZN7S6675C1C1Ev),
  NSPAIR(_ZN7S6675C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6675C2;
extern VTBL_ENTRY _ZTI7S6675C2[];
extern  VTBL_ENTRY _ZTV7S6675C2[];
extern Class_Descriptor cd_S6675C2;
extern VTBL_ENTRY _ZTI7S6675C2[];
extern  VTBL_ENTRY _ZTV7S6675C2[];
extern Class_Descriptor cd_S6675C3;
extern VTBL_ENTRY _ZTI7S6675C3[];
extern  VTBL_ENTRY _ZTV7S6675C3[];
static Base_Class bases_S6675C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6675C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6675C2,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6675C3,    ABISELECT(112,60), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6675C1[];
extern void _ZN7S6675C22v3Ev();
extern void _ZN7S6675C22v4Ev();
extern void _ZN7S6675C1D1Ev();
extern void _ZN7S6675C1D0Ev();
extern void _ZN7S6675C12v1Ev();
extern void _ZN7S6675C12v2Ev();
extern void _ZN7S6675C22v3Ev();
extern void _ZN7S6675C22v4Ev();
extern void ABISELECT(_ZThn112_N7S6675C1D1Ev,_ZThn60_N7S6675C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S6675C1D0Ev,_ZThn60_N7S6675C1D0Ev)();
extern void _ZN7S6675C32v5Ev();
extern void _ZN7S6675C32v6Ev();
extern void _ZN7S6675C32v7Ev();
static  VTBL_ENTRY vtc_S6675C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6675C1[0]),
  (VTBL_ENTRY)&_ZN7S6675C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6675C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6675C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6675C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6675C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6675C12v2Ev,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S6675C1[0]),
  (VTBL_ENTRY)&_ZN7S6675C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6675C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S6675C1D1Ev,_ZThn60_N7S6675C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S6675C1D0Ev,_ZThn60_N7S6675C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6675C32v5Ev,
  (VTBL_ENTRY)&_ZN7S6675C32v6Ev,
  (VTBL_ENTRY)&_ZN7S6675C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S6675C1[];
extern  VTBL_ENTRY _ZTV7S6675C1[];
Class_Descriptor cd_S6675C1 = {  "S6675C1", // class name
  bases_S6675C1, 3,
  &(vtc_S6675C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,132), // object size
  NSPAIRA(_ZTI7S6675C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6675C1),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16856C1  {
  int s16856c1f0;
  __tsi64 s16856c1f1;
  ::S5795C3 s16856c1f2;
  void  mf16856c1(); // _ZN8S16856C19mf16856c1Ev
};
//SIG(1 S16856C1) C1{ m Fi FL FC2{ m Fi Fc Fl FL Fl[4] FD[4] Fs[4] Fp[2] FC3{ m Fi[2]} Fi[2]}}


void  S16856C1 ::mf16856c1(){}

static void Test_S16856C1()
{
  {
    init_simple_test("S16856C1");
    S16856C1 lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S16856C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16856C1)");
    check_field_offset(lv, s16856c1f0, 0, "S16856C1.s16856c1f0");
    check_field_offset(lv, s16856c1f1, ABISELECT(8,4), "S16856C1.s16856c1f1");
    check_field_offset(lv, s16856c1f2, ABISELECT(16,12), "S16856C1.s16856c1f2");
  }
}
static Arrange_To_Call_Me vS16856C1(Test_S16856C1, "S16856C1", ABISELECT(192,128));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16531C1  {
  int s16531c1f0;
  char s16531c1f1;
  ::S5795C3 s16531c1f2;
  void  mf16531c1(); // _ZN8S16531C19mf16531c1Ev
};
//SIG(1 S16531C1) C1{ m Fi Fc FC2{ m Fi Fc Fl FL Fl[4] FD[4] Fs[4] Fp[2] FC3{ m Fi[2]} Fi[2]}}


void  S16531C1 ::mf16531c1(){}

static void Test_S16531C1()
{
  {
    init_simple_test("S16531C1");
    S16531C1 lv;
    check2(sizeof(lv), ABISELECT(192,124), "sizeof(S16531C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16531C1)");
    check_field_offset(lv, s16531c1f0, 0, "S16531C1.s16531c1f0");
    check_field_offset(lv, s16531c1f1, 4, "S16531C1.s16531c1f1");
    check_field_offset(lv, s16531c1f2, ABISELECT(16,8), "S16531C1.s16531c1f2");
  }
}
static Arrange_To_Call_Me vS16531C1(Test_S16531C1, "S16531C1", ABISELECT(192,124));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12377C4_nt  {
  char s12377c4f0[12];
};
//SIG(-1 S12377C4_nt) C1{ Fc[12]}



//skip512 S12377C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12377C5_nt  {
  __tsi64 s12377c5f0;
};
//SIG(-1 S12377C5_nt) C1{ FL}



//skip512 S12377C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12377C1  {
  int s12377c1f0;
  ::S9901C5_nt s12377c1f1;
  ::S9901C5_nt s12377c1f2;
  int s12377c1f3;
  ::S12377C4_nt s12377c1f4;
  int s12377c1f5;
  __tsi64 s12377c1f6;
  ::S9901C5_nt s12377c1f7;
  ::S12377C5_nt s12377c1f8;
  int s12377c1f9[2];
};
//SIG(1 S12377C1) C1{ Fi FC2{ FC3{ Fc[20]} Fc[16]} FC2 Fi FC4{ Fc[12]} Fi FL FC2 FC5{ FL} Fi[2]}



static void Test_S12377C1()
{
  {
    init_simple_test("S12377C1");
    S12377C1 lv;
    check2(sizeof(lv), ABISELECT(160,156), "sizeof(S12377C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12377C1)");
    check_field_offset(lv, s12377c1f0, 0, "S12377C1.s12377c1f0");
    check_field_offset(lv, s12377c1f1, 4, "S12377C1.s12377c1f1");
    check_field_offset(lv, s12377c1f2, 40, "S12377C1.s12377c1f2");
    check_field_offset(lv, s12377c1f3, 76, "S12377C1.s12377c1f3");
    check_field_offset(lv, s12377c1f4, 80, "S12377C1.s12377c1f4");
    check_field_offset(lv, s12377c1f5, 92, "S12377C1.s12377c1f5");
    check_field_offset(lv, s12377c1f6, 96, "S12377C1.s12377c1f6");
    check_field_offset(lv, s12377c1f7, 104, "S12377C1.s12377c1f7");
    check_field_offset(lv, s12377c1f8, ABISELECT(144,140), "S12377C1.s12377c1f8");
    check_field_offset(lv, s12377c1f9, ABISELECT(152,148), "S12377C1.s12377c1f9");
  }
}
static Arrange_To_Call_Me vS12377C1(Test_S12377C1, "S12377C1", ABISELECT(160,156));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18041C5_nt  {
  void *s18041c5f0;
  int s18041c5f1[2];
  void  mf18041c5(); // _ZN11S18041C5_nt9mf18041c5Ev
};
//SIG(-1 S18041C5_nt) C1{ m Fp Fi[2]}


void  S18041C5_nt ::mf18041c5(){}

//skip512 S18041C5_nt

#else // __cplusplus

Class_Descriptor cd_S18041C5_nt = {  "S18041C5_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18041C1  {
  void *s18041c1f0[2];
  ::S3593C21_nt s18041c1f1;
  ::S1865C15 s18041c1f2;
  ::S1856C13_nt s18041c1f3;
  ::S18041C5_nt s18041c1f4;
  ::S1850C10_nt s18041c1f5;
  void *s18041c1f6;
  char s18041c1f7;
  void  mf18041c1(); // _ZN8S18041C19mf18041c1Ev
};
//SIG(1 S18041C1) C1{ m Fp[2] FC2{ m Fp} FC3{ m Fp} FC4{ m Fp} FC5{ m Fp Fi[2]} FC6{ m Fp} Fp Fc}


void  S18041C1 ::mf18041c1(){}

static void Test_S18041C1()
{
  {
    init_simple_test("S18041C1");
    S18041C1 lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S18041C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18041C1)");
    check_field_offset(lv, s18041c1f0, 0, "S18041C1.s18041c1f0");
    check_field_offset(lv, s18041c1f1, ABISELECT(16,8), "S18041C1.s18041c1f1");
    check_field_offset(lv, s18041c1f2, ABISELECT(24,12), "S18041C1.s18041c1f2");
    check_field_offset(lv, s18041c1f3, ABISELECT(32,16), "S18041C1.s18041c1f3");
    check_field_offset(lv, s18041c1f4, ABISELECT(40,20), "S18041C1.s18041c1f4");
    check_field_offset(lv, s18041c1f5, ABISELECT(56,32), "S18041C1.s18041c1f5");
    check_field_offset(lv, s18041c1f6, ABISELECT(64,36), "S18041C1.s18041c1f6");
    check_field_offset(lv, s18041c1f7, ABISELECT(72,40), "S18041C1.s18041c1f7");
  }
}
static Arrange_To_Call_Me vS18041C1(Test_S18041C1, "S18041C1", ABISELECT(80,44));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21252C1  {
  char s21252c1f0;
  int s21252c1f1;
  ::S4206C36_nt s21252c1f2;
  __tsi64 s21252c1f3[2];
  void *s21252c1f4;
  char s21252c1f5;
  void *s21252c1f6[5];
  int s21252c1f7[2];
  void *s21252c1f8;
  char s21252c1f9;
  void  mf21252c1(); // _ZN8S21252C19mf21252c1Ev
  virtual  ~S21252C1(); // _ZN8S21252C1D1Ev
  S21252C1(); // tgen
};
//SIG(1 S21252C1) C1{ vd m Fc Fi FC2{ m Fp Fi[2] FC3{ m}} FL[2] Fp Fc Fp[5] Fi[2] Fp Fc}


void  S21252C1 ::mf21252c1(){}
 S21252C1 ::~S21252C1(){ note_dtor("S21252C1", this);}
S21252C1 ::S21252C1(){ note_ctor("S21252C1", this);} // tgen

static void Test_S21252C1()
{
  extern Class_Descriptor cd_S21252C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S21252C1, buf);
    S21252C1 *dp, &lv = *(dp=new (buf) S21252C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S21252C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21252C1)");
    check_field_offset(lv, s21252c1f0, ABISELECT(8,4), "S21252C1.s21252c1f0");
    check_field_offset(lv, s21252c1f1, ABISELECT(12,8), "S21252C1.s21252c1f1");
    check_field_offset(lv, s21252c1f2, ABISELECT(16,12), "S21252C1.s21252c1f2");
    check_field_offset(lv, s21252c1f3, ABISELECT(40,28), "S21252C1.s21252c1f3");
    check_field_offset(lv, s21252c1f4, ABISELECT(56,44), "S21252C1.s21252c1f4");
    check_field_offset(lv, s21252c1f5, ABISELECT(64,48), "S21252C1.s21252c1f5");
    check_field_offset(lv, s21252c1f6, ABISELECT(72,52), "S21252C1.s21252c1f6");
    check_field_offset(lv, s21252c1f7, ABISELECT(112,72), "S21252C1.s21252c1f7");
    check_field_offset(lv, s21252c1f8, ABISELECT(120,80), "S21252C1.s21252c1f8");
    check_field_offset(lv, s21252c1f9, ABISELECT(128,84), "S21252C1.s21252c1f9");
    test_class_info(&lv, &cd_S21252C1);
    dp->~S21252C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21252C1(Test_S21252C1, "S21252C1", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN8S21252C1C1Ev();
extern void _ZN8S21252C1D1Ev();
Name_Map name_map_S21252C1[] = {
  NSPAIR(_ZN8S21252C1C1Ev),
  NSPAIR(_ZN8S21252C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21252C1[];
extern void _ZN8S21252C1D1Ev();
extern void _ZN8S21252C1D0Ev();
static  VTBL_ENTRY vtc_S21252C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21252C1[0]),
  (VTBL_ENTRY)&_ZN8S21252C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21252C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21252C1[];
extern  VTBL_ENTRY _ZTV8S21252C1[];
Class_Descriptor cd_S21252C1 = {  "S21252C1", // class name
  0,0,//no base classes
  &(vtc_S21252C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI8S21252C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21252C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16174C5_nt  : S3593C21_nt {
};
//SIG(-1 S16174C5_nt) C1{ BC2{ m Fp}}



//skip512 S16174C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S3593C21_nt;
static Base_Class bases_S16174C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3593C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16174C1  {
  ::S2440C26 s16174c1f0;
  ::S16174C5_nt s16174c1f1;
  char s16174c1f2;
  ::S7909C7_nt s16174c1f3;
  void  mf16174c1(); // _ZN8S16174C19mf16174c1Ev
};
//SIG(1 S16174C1) C1{ m FC2{ m Fp Fi FC3{ m} FC4{ m}} FC5{ BC6{ m Fp}} Fc FC7{ m FC8{ Fl[4]}}}


void  S16174C1 ::mf16174c1(){}

static void Test_S16174C1()
{
  {
    init_simple_test("S16174C1");
    S16174C1 lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S16174C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16174C1)");
    check_field_offset(lv, s16174c1f0, 0, "S16174C1.s16174c1f0");
    check_field_offset(lv, s16174c1f1, ABISELECT(16,12), "S16174C1.s16174c1f1");
    check_field_offset(lv, s16174c1f2, ABISELECT(24,16), "S16174C1.s16174c1f2");
    check_field_offset(lv, s16174c1f3, ABISELECT(32,20), "S16174C1.s16174c1f3");
  }
}
static Arrange_To_Call_Me vS16174C1(Test_S16174C1, "S16174C1", ABISELECT(64,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16750C6_nt  : S18041C5_nt {
};
//SIG(-1 S16750C6_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S16750C6_nt

#else // __cplusplus

extern Class_Descriptor cd_S18041C5_nt;
static Base_Class bases_S16750C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18041C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S16750C6_nt = {  "S16750C6_nt", // class name
  bases_S16750C6_nt, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16750C5_nt  : S16750C6_nt {
};
//SIG(-1 S16750C5_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S16750C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S18041C5_nt;
extern Class_Descriptor cd_S16750C6_nt;
static Base_Class bases_S16750C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18041C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S16750C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S16750C5_nt = {  "S16750C5_nt", // class name
  bases_S16750C5_nt, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16750C4_nt  : S16750C5_nt {
};
//SIG(-1 S16750C4_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S16750C4_nt

#else // __cplusplus

extern Class_Descriptor cd_S18041C5_nt;
extern Class_Descriptor cd_S16750C6_nt;
extern Class_Descriptor cd_S16750C5_nt;
static Base_Class bases_S16750C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18041C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S16750C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S16750C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16750C3  {
  ::S6469C3_nt s16750c3f0;
  ::S16750C4_nt s16750c3f1;
  int s16750c3f2;
  void  mf16750c3(); // _ZN8S16750C39mf16750c3Ev
};
//SIG(-1 S16750C3) C1{ m FC2{ m Fi[2]} FC3{ BC4{ BC5{ BC6{ m Fp Fi[2]}}}} Fi}


void  S16750C3 ::mf16750c3(){}

static void Test_S16750C3()
{
  {
    init_simple_test("S16750C3");
    S16750C3 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S16750C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16750C3)");
    check_field_offset(lv, s16750c3f0, 0, "S16750C3.s16750c3f0");
    check_field_offset(lv, s16750c3f1, 8, "S16750C3.s16750c3f1");
    check_field_offset(lv, s16750c3f2, ABISELECT(24,20), "S16750C3.s16750c3f2");
  }
}
static Arrange_To_Call_Me vS16750C3(Test_S16750C3, "S16750C3", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16750C1  {
  int s16750c1f0;
  ::S6469C3_nt s16750c1f1;
  ::S16750C3 s16750c1f2;
  void  mf16750c1(); // _ZN8S16750C19mf16750c1Ev
};
//SIG(1 S16750C1) C1{ m Fi FC2{ m Fi[2]} FC3{ m FC2 FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} Fi}}


void  S16750C1 ::mf16750c1(){}

static void Test_S16750C1()
{
  {
    init_simple_test("S16750C1");
    S16750C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S16750C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16750C1)");
    check_field_offset(lv, s16750c1f0, 0, "S16750C1.s16750c1f0");
    check_field_offset(lv, s16750c1f1, 4, "S16750C1.s16750c1f1");
    check_field_offset(lv, s16750c1f2, ABISELECT(16,12), "S16750C1.s16750c1f2");
  }
}
static Arrange_To_Call_Me vS16750C1(Test_S16750C1, "S16750C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5730C1  : S5795C3 {
};
//SIG(1 S5730C1) C1{ BC2{ m Fi Fc Fl FL Fl[4] FD[4] Fs[4] Fp[2] FC3{ m Fi[2]} Fi[2]}}



static void Test_S5730C1()
{
  extern Class_Descriptor cd_S5730C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,30)];
    init_test(&cd_S5730C1, buf);
    S5730C1 &lv = *(new (buf) S5730C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,116), "sizeof(S5730C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5730C1)");
    check_base_class_offset(lv, (S5795C3*), 0, "S5730C1");
    test_class_info(&lv, &cd_S5730C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5730C1(Test_S5730C1, "S5730C1", ABISELECT(176,116));

#else // __cplusplus

extern Class_Descriptor cd_S5795C3;
static Base_Class bases_S5730C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5795C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5730C1 = {  "S5730C1", // class name
  bases_S5730C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(176,116), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7912C1  : S8511C5_nt {
  ::S6462C12_nt s7912c1f0;
  virtual  ~S7912C1(); // _ZN7S7912C1D1Ev
  S7912C1(); // tgen
};
//SIG(1 S7912C1) C1{ BC2{ vd m FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}}} vd FC7{ m FC8{ FL[4]}}}


 S7912C1 ::~S7912C1(){ note_dtor("S7912C1", this);}
S7912C1 ::S7912C1(){ note_ctor("S7912C1", this);} // tgen

static void Test_S7912C1()
{
  extern Class_Descriptor cd_S7912C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S7912C1, buf);
    S7912C1 *dp, &lv = *(dp=new (buf) S7912C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S7912C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7912C1)");
    check_base_class_offset(lv, (S8511C5_nt*), 0, "S7912C1");
    check_field_offset(lv, s7912c1f0, ABISELECT(24,16), "S7912C1.s7912c1f0");
    test_class_info(&lv, &cd_S7912C1);
    dp->~S7912C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7912C1(Test_S7912C1, "S7912C1", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN7S7912C1C1Ev();
extern void _ZN7S7912C1D1Ev();
Name_Map name_map_S7912C1[] = {
  NSPAIR(_ZN7S7912C1C1Ev),
  NSPAIR(_ZN7S7912C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8511C5_nt;
extern VTBL_ENTRY _ZTI10S8511C5_nt[];
extern  VTBL_ENTRY _ZTV10S8511C5_nt[];
static Base_Class bases_S7912C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8511C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7912C1[];
extern void _ZN7S7912C1D1Ev();
extern void _ZN7S7912C1D0Ev();
static  VTBL_ENTRY vtc_S7912C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7912C1[0]),
  (VTBL_ENTRY)&_ZN7S7912C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7912C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S7912C1[];
extern  VTBL_ENTRY _ZTV7S7912C1[];
Class_Descriptor cd_S7912C1 = {  "S7912C1", // class name
  bases_S7912C1, 1,
  &(vtc_S7912C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI7S7912C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7912C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7911C1  : S8511C5_nt {
  ::S7909C7_nt s7911c1f0;
  virtual  ~S7911C1(); // _ZN7S7911C1D1Ev
  S7911C1(); // tgen
};
//SIG(1 S7911C1) C1{ BC2{ vd m FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}}} vd FC7{ m FC8{ Fl[4]}}}


 S7911C1 ::~S7911C1(){ note_dtor("S7911C1", this);}
S7911C1 ::S7911C1(){ note_ctor("S7911C1", this);} // tgen

static void Test_S7911C1()
{
  extern Class_Descriptor cd_S7911C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S7911C1, buf);
    S7911C1 *dp, &lv = *(dp=new (buf) S7911C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S7911C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7911C1)");
    check_base_class_offset(lv, (S8511C5_nt*), 0, "S7911C1");
    check_field_offset(lv, s7911c1f0, ABISELECT(24,16), "S7911C1.s7911c1f0");
    test_class_info(&lv, &cd_S7911C1);
    dp->~S7911C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7911C1(Test_S7911C1, "S7911C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S7911C1C1Ev();
extern void _ZN7S7911C1D1Ev();
Name_Map name_map_S7911C1[] = {
  NSPAIR(_ZN7S7911C1C1Ev),
  NSPAIR(_ZN7S7911C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8511C5_nt;
extern VTBL_ENTRY _ZTI10S8511C5_nt[];
extern  VTBL_ENTRY _ZTV10S8511C5_nt[];
static Base_Class bases_S7911C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8511C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7911C1[];
extern void _ZN7S7911C1D1Ev();
extern void _ZN7S7911C1D0Ev();
static  VTBL_ENTRY vtc_S7911C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7911C1[0]),
  (VTBL_ENTRY)&_ZN7S7911C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7911C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S7911C1[];
extern  VTBL_ENTRY _ZTV7S7911C1[];
Class_Descriptor cd_S7911C1 = {  "S7911C1", // class name
  bases_S7911C1, 1,
  &(vtc_S7911C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S7911C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7911C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16963C3  : S2440C38 {
  void *s16963c3f0[2];
};
//SIG(-1 S16963C3) C1{ BC2{ m} Fp[2]}



static void Test_S16963C3()
{
  extern Class_Descriptor cd_S16963C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S16963C3, buf);
    S16963C3 &lv = *(new (buf) S16963C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S16963C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16963C3)");
    check_base_class_offset(lv, (S2440C38*), 0, "S16963C3");
    check_field_offset(lv, s16963c3f0, 0, "S16963C3.s16963c3f0");
    test_class_info(&lv, &cd_S16963C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16963C3(Test_S16963C3, "S16963C3", ABISELECT(16,8));

#else // __cplusplus

extern Class_Descriptor cd_S2440C38;
static Base_Class bases_S16963C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2440C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S16963C3 = {  "S16963C3", // class name
  bases_S16963C3, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16963C1  {
  int s16963c1f0;
  void *s16963c1f1[2];
  ::S3593C21_nt s16963c1f2;
  int s16963c1f3;
  ::S16963C3 s16963c1f4;
  int s16963c1f5;
  ::S1865C15 s16963c1f6;
  int s16963c1f7;
  char s16963c1f8;
  void  mf16963c1(); // _ZN8S16963C19mf16963c1Ev
};
//SIG(1 S16963C1) C1{ m Fi Fp[2] FC2{ m Fp} Fi FC3{ BC4{ m} Fp[2]} Fi FC5{ m Fp} Fi Fc}


void  S16963C1 ::mf16963c1(){}

static void Test_S16963C1()
{
  {
    init_simple_test("S16963C1");
    S16963C1 lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S16963C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16963C1)");
    check_field_offset(lv, s16963c1f0, 0, "S16963C1.s16963c1f0");
    check_field_offset(lv, s16963c1f1, ABISELECT(8,4), "S16963C1.s16963c1f1");
    check_field_offset(lv, s16963c1f2, ABISELECT(24,12), "S16963C1.s16963c1f2");
    check_field_offset(lv, s16963c1f3, ABISELECT(32,16), "S16963C1.s16963c1f3");
    check_field_offset(lv, s16963c1f4, ABISELECT(40,20), "S16963C1.s16963c1f4");
    check_field_offset(lv, s16963c1f5, ABISELECT(56,28), "S16963C1.s16963c1f5");
    check_field_offset(lv, s16963c1f6, ABISELECT(64,32), "S16963C1.s16963c1f6");
    check_field_offset(lv, s16963c1f7, ABISELECT(72,36), "S16963C1.s16963c1f7");
    check_field_offset(lv, s16963c1f8, ABISELECT(76,40), "S16963C1.s16963c1f8");
  }
}
static Arrange_To_Call_Me vS16963C1(Test_S16963C1, "S16963C1", ABISELECT(80,44));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18320C2  {
  ::S16963C3 s18320c2f0;
  int s18320c2f1;
  void  mf18320c2(); // _ZN8S18320C29mf18320c2Ev
};
//SIG(-1 S18320C2) C1{ m FC2{ BC3{ m} Fp[2]} Fi}


void  S18320C2 ::mf18320c2(){}

static void Test_S18320C2()
{
  {
    init_simple_test("S18320C2");
    S18320C2 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18320C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18320C2)");
    check_field_offset(lv, s18320c2f0, 0, "S18320C2.s18320c2f0");
    check_field_offset(lv, s18320c2f1, ABISELECT(16,8), "S18320C2.s18320c2f1");
  }
}
static Arrange_To_Call_Me vS18320C2(Test_S18320C2, "S18320C2", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18320C1  {
  void *s18320c1f0[3];
  int s18320c1f1[2];
  char s18320c1f2;
  int s18320c1f3;
  void *s18320c1f4[17];
  ::S18320C2 s18320c1f5;
  ::S18320C2 s18320c1f6;
  void  mf18320c1(); // _ZN8S18320C19mf18320c1Ev
};
//SIG(1 S18320C1) C1{ m Fp[3] Fi[2] Fc Fi Fp[17] FC2{ m FC3{ BC4{ m} Fp[2]} Fi} FC2}


void  S18320C1 ::mf18320c1(){}

static void Test_S18320C1()
{
  {
    init_simple_test("S18320C1");
    S18320C1 lv;
    check2(sizeof(lv), ABISELECT(224,120), "sizeof(S18320C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18320C1)");
    check_field_offset(lv, s18320c1f0, 0, "S18320C1.s18320c1f0");
    check_field_offset(lv, s18320c1f1, ABISELECT(24,12), "S18320C1.s18320c1f1");
    check_field_offset(lv, s18320c1f2, ABISELECT(32,20), "S18320C1.s18320c1f2");
    check_field_offset(lv, s18320c1f3, ABISELECT(36,24), "S18320C1.s18320c1f3");
    check_field_offset(lv, s18320c1f4, ABISELECT(40,28), "S18320C1.s18320c1f4");
    check_field_offset(lv, s18320c1f5, ABISELECT(176,96), "S18320C1.s18320c1f5");
    check_field_offset(lv, s18320c1f6, ABISELECT(200,108), "S18320C1.s18320c1f6");
  }
}
static Arrange_To_Call_Me vS18320C1(Test_S18320C1, "S18320C1", ABISELECT(224,120));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7914C1  : S8511C5_nt {
  ::S7913C7_nt s7914c1f0;
  virtual  ~S7914C1(); // _ZN7S7914C1D1Ev
  S7914C1(); // tgen
};
//SIG(1 S7914C1) C1{ BC2{ vd m FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}}} vd FC7{ m FL[4]}}


 S7914C1 ::~S7914C1(){ note_dtor("S7914C1", this);}
S7914C1 ::S7914C1(){ note_ctor("S7914C1", this);} // tgen

static void Test_S7914C1()
{
  extern Class_Descriptor cd_S7914C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S7914C1, buf);
    S7914C1 *dp, &lv = *(dp=new (buf) S7914C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S7914C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7914C1)");
    check_base_class_offset(lv, (S8511C5_nt*), 0, "S7914C1");
    check_field_offset(lv, s7914c1f0, ABISELECT(24,16), "S7914C1.s7914c1f0");
    test_class_info(&lv, &cd_S7914C1);
    dp->~S7914C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7914C1(Test_S7914C1, "S7914C1", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN7S7914C1C1Ev();
extern void _ZN7S7914C1D1Ev();
Name_Map name_map_S7914C1[] = {
  NSPAIR(_ZN7S7914C1C1Ev),
  NSPAIR(_ZN7S7914C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8511C5_nt;
extern VTBL_ENTRY _ZTI10S8511C5_nt[];
extern  VTBL_ENTRY _ZTV10S8511C5_nt[];
static Base_Class bases_S7914C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8511C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7914C1[];
extern void _ZN7S7914C1D1Ev();
extern void _ZN7S7914C1D0Ev();
static  VTBL_ENTRY vtc_S7914C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7914C1[0]),
  (VTBL_ENTRY)&_ZN7S7914C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7914C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S7914C1[];
extern  VTBL_ENTRY _ZTV7S7914C1[];
Class_Descriptor cd_S7914C1 = {  "S7914C1", // class name
  bases_S7914C1, 1,
  &(vtc_S7914C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI7S7914C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7914C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11277C4_nt  {
  int s11277c4f0;
};
//SIG(-1 S11277C4_nt) C1{ Fi}



//skip512 S11277C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11277C3_nt  {
  ::S11277C4_nt s11277c3f0;
  int s11277c3f1;
};
//SIG(-1 S11277C3_nt) C1{ FC2{ Fi} Fi}



//skip512 S11277C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11277C2  {
  ::S11277C3_nt s11277c2f0;
  int s11277c2f1;
};
//SIG(-1 S11277C2) C1{ FC2{ FC3{ Fi} Fi} Fi}



static void Test_S11277C2()
{
  {
    init_simple_test("S11277C2");
    S11277C2 lv;
    check2(sizeof(lv), 12, "sizeof(S11277C2)");
    check2(__alignof__(lv), 4, "__alignof__(S11277C2)");
    check_field_offset(lv, s11277c2f0, 0, "S11277C2.s11277c2f0");
    check_field_offset(lv, s11277c2f1, 8, "S11277C2.s11277c2f1");
  }
}
static Arrange_To_Call_Me vS11277C2(Test_S11277C2, "S11277C2", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11277C5  {
  char s11277c5f0[5];
  ::S11277C4_nt s11277c5f1;
  ::S12377C5_nt s11277c5f2;
  char s11277c5f3[817];
  int s11277c5f4;
};
//SIG(-1 S11277C5) C1{ Fc[5] FC2{ Fi} FC3{ FL} Fc[817] Fi}



static void Test_S11277C5()
{
  {
    init_simple_test("S11277C5");
    S11277C5 lv;
    check2(sizeof(lv), ABISELECT(848,844), "sizeof(S11277C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11277C5)");
    check_field_offset(lv, s11277c5f0, 0, "S11277C5.s11277c5f0");
    check_field_offset(lv, s11277c5f1, 8, "S11277C5.s11277c5f1");
    check_field_offset(lv, s11277c5f2, ABISELECT(16,12), "S11277C5.s11277c5f2");
    check_field_offset(lv, s11277c5f3, ABISELECT(24,20), "S11277C5.s11277c5f3");
    check_field_offset(lv, s11277c5f4, ABISELECT(844,840), "S11277C5.s11277c5f4");
  }
}
static Arrange_To_Call_Me vS11277C5(Test_S11277C5, "S11277C5", ABISELECT(848,844));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11277C1  {
  ::S11277C2 s11277c1f0;
  ::S11277C5 s11277c1f1;
};
//SIG(1 S11277C1) C1{ FC2{ FC3{ FC4{ Fi} Fi} Fi} FC5{ Fc[5] FC4 FC6{ FL} Fc[817] Fi}}



static void Test_S11277C1()
{
  {
    init_simple_test("S11277C1");
    S11277C1 lv;
    check2(sizeof(lv), ABISELECT(864,856), "sizeof(S11277C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11277C1)");
    check_field_offset(lv, s11277c1f0, 0, "S11277C1.s11277c1f0");
    check_field_offset(lv, s11277c1f1, ABISELECT(16,12), "S11277C1.s11277c1f1");
  }
}
static Arrange_To_Call_Me vS11277C1(Test_S11277C1, "S11277C1", ABISELECT(864,856));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11276C6_nt  {
  long s11276c6f0;
};
//SIG(-1 S11276C6_nt) C1{ Fl}



//skip512 S11276C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11276C5  {
  char s11276c5f0[5];
  ::S11277C4_nt s11276c5f1;
  ::S11276C6_nt s11276c5f2;
  char s11276c5f3[817];
  int s11276c5f4;
};
//SIG(-1 S11276C5) C1{ Fc[5] FC2{ Fi} FC3{ Fl} Fc[817] Fi}



static void Test_S11276C5()
{
  {
    init_simple_test("S11276C5");
    S11276C5 lv;
    check2(sizeof(lv), ABISELECT(848,840), "sizeof(S11276C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11276C5)");
    check_field_offset(lv, s11276c5f0, 0, "S11276C5.s11276c5f0");
    check_field_offset(lv, s11276c5f1, 8, "S11276C5.s11276c5f1");
    check_field_offset(lv, s11276c5f2, ABISELECT(16,12), "S11276C5.s11276c5f2");
    check_field_offset(lv, s11276c5f3, ABISELECT(24,16), "S11276C5.s11276c5f3");
    check_field_offset(lv, s11276c5f4, ABISELECT(844,836), "S11276C5.s11276c5f4");
  }
}
static Arrange_To_Call_Me vS11276C5(Test_S11276C5, "S11276C5", ABISELECT(848,840));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11276C1  {
  ::S11277C2 s11276c1f0;
  ::S11276C5 s11276c1f1;
};
//SIG(1 S11276C1) C1{ FC2{ FC3{ FC4{ Fi} Fi} Fi} FC5{ Fc[5] FC4 FC6{ Fl} Fc[817] Fi}}



static void Test_S11276C1()
{
  {
    init_simple_test("S11276C1");
    S11276C1 lv;
    check2(sizeof(lv), ABISELECT(864,852), "sizeof(S11276C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11276C1)");
    check_field_offset(lv, s11276c1f0, 0, "S11276C1.s11276c1f0");
    check_field_offset(lv, s11276c1f1, ABISELECT(16,12), "S11276C1.s11276c1f1");
  }
}
static Arrange_To_Call_Me vS11276C1(Test_S11276C1, "S11276C1", ABISELECT(864,852));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9588C2  {
  virtual  ~S9588C2(); // _ZN7S9588C2D1Ev
  virtual void  v3(); // _ZN7S9588C22v3Ev
  virtual void  v4(); // _ZN7S9588C22v4Ev
  S9588C2(); // tgen
};
//SIG(-1 S9588C2) C1{ vd v1 v2}


 S9588C2 ::~S9588C2(){ note_dtor("S9588C2", this);}
void  S9588C2 ::v3(){vfunc_called(this, "_ZN7S9588C22v3Ev");}
void  S9588C2 ::v4(){vfunc_called(this, "_ZN7S9588C22v4Ev");}
S9588C2 ::S9588C2(){ note_ctor("S9588C2", this);} // tgen

static void Test_S9588C2()
{
  extern Class_Descriptor cd_S9588C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9588C2, buf);
    S9588C2 *dp, &lv = *(dp=new (buf) S9588C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9588C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9588C2)");
    test_class_info(&lv, &cd_S9588C2);
    dp->~S9588C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9588C2(Test_S9588C2, "S9588C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9588C2C1Ev();
extern void _ZN7S9588C2D1Ev();
Name_Map name_map_S9588C2[] = {
  NSPAIR(_ZN7S9588C2C1Ev),
  NSPAIR(_ZN7S9588C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9588C2[];
extern void _ZN7S9588C2D1Ev();
extern void _ZN7S9588C2D0Ev();
extern void _ZN7S9588C22v3Ev();
extern void _ZN7S9588C22v4Ev();
static  VTBL_ENTRY vtc_S9588C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9588C2[0]),
  (VTBL_ENTRY)&_ZN7S9588C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9588C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9588C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9588C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9588C2[];
extern  VTBL_ENTRY _ZTV7S9588C2[];
Class_Descriptor cd_S9588C2 = {  "S9588C2", // class name
  0,0,//no base classes
  &(vtc_S9588C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9588C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9588C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9588C4_nt  {
  int s9588c4f0[2];
  void  mf9588c4(); // _ZN10S9588C4_nt8mf9588c4Ev
};
//SIG(-1 S9588C4_nt) C1{ m Fi[2]}


void  S9588C4_nt ::mf9588c4(){}

//skip512 S9588C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9588C1  : S9588C2 {
  ::S6469C3_nt s9588c1f0;
  ::S9588C4_nt s9588c1f1;
  int s9588c1f2[8];
  virtual  ~S9588C1(); // _ZN7S9588C1D1Ev
  virtual void  v1(); // _ZN7S9588C12v1Ev
  virtual void  v2(); // _ZN7S9588C12v2Ev
  S9588C1(); // tgen
};
//SIG(1 S9588C1) C1{ BC2{ vd v3 v4} vd v1 v2 FC3{ m Fi[2]} FC4{ m Fi[2]} Fi[8]}


 S9588C1 ::~S9588C1(){ note_dtor("S9588C1", this);}
void  S9588C1 ::v1(){vfunc_called(this, "_ZN7S9588C12v1Ev");}
void  S9588C1 ::v2(){vfunc_called(this, "_ZN7S9588C12v2Ev");}
S9588C1 ::S9588C1(){ note_ctor("S9588C1", this);} // tgen

static void Test_S9588C1()
{
  extern Class_Descriptor cd_S9588C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,14)];
    init_test(&cd_S9588C1, buf);
    S9588C1 *dp, &lv = *(dp=new (buf) S9588C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,52), "sizeof(S9588C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9588C1)");
    check_base_class_offset(lv, (S9588C2*), 0, "S9588C1");
    check_field_offset(lv, s9588c1f0, ABISELECT(8,4), "S9588C1.s9588c1f0");
    check_field_offset(lv, s9588c1f1, ABISELECT(16,12), "S9588C1.s9588c1f1");
    check_field_offset(lv, s9588c1f2, ABISELECT(24,20), "S9588C1.s9588c1f2");
    test_class_info(&lv, &cd_S9588C1);
    dp->~S9588C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9588C1(Test_S9588C1, "S9588C1", ABISELECT(56,52));

#else // __cplusplus

extern void _ZN7S9588C1C1Ev();
extern void _ZN7S9588C1D1Ev();
Name_Map name_map_S9588C1[] = {
  NSPAIR(_ZN7S9588C1C1Ev),
  NSPAIR(_ZN7S9588C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9588C2;
extern VTBL_ENTRY _ZTI7S9588C2[];
extern  VTBL_ENTRY _ZTV7S9588C2[];
static Base_Class bases_S9588C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9588C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9588C1[];
extern void _ZN7S9588C1D1Ev();
extern void _ZN7S9588C1D0Ev();
extern void _ZN7S9588C22v3Ev();
extern void _ZN7S9588C22v4Ev();
extern void _ZN7S9588C12v1Ev();
extern void _ZN7S9588C12v2Ev();
static  VTBL_ENTRY vtc_S9588C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9588C1[0]),
  (VTBL_ENTRY)&_ZN7S9588C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9588C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9588C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9588C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9588C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9588C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9588C1[];
extern  VTBL_ENTRY _ZTV7S9588C1[];
Class_Descriptor cd_S9588C1 = {  "S9588C1", // class name
  bases_S9588C1, 1,
  &(vtc_S9588C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,52), // object size
  NSPAIRA(_ZTI7S9588C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9588C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13572C2  {
  int s13572c2f0[2];
  char s13572c2f1[20];
  int s13572c2f2;
  void *s13572c2f3;
  int s13572c2f4;
};
//SIG(-1 S13572C2) C1{ Fi[2] Fc[20] Fi Fp Fi}



static void Test_S13572C2()
{
  {
    init_simple_test("S13572C2");
    S13572C2 lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S13572C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13572C2)");
    check_field_offset(lv, s13572c2f0, 0, "S13572C2.s13572c2f0");
    check_field_offset(lv, s13572c2f1, 8, "S13572C2.s13572c2f1");
    check_field_offset(lv, s13572c2f2, 28, "S13572C2.s13572c2f2");
    check_field_offset(lv, s13572c2f3, 32, "S13572C2.s13572c2f3");
    check_field_offset(lv, s13572c2f4, ABISELECT(40,36), "S13572C2.s13572c2f4");
  }
}
static Arrange_To_Call_Me vS13572C2(Test_S13572C2, "S13572C2", ABISELECT(48,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13572C1  {
  int s13572c1f0[6];
  char s13572c1f1[64];
  short s13572c1f2;
  ::S13572C2 s13572c1f3;
  void *s13572c1f4[3];
  int s13572c1f5;
};
//SIG(1 S13572C1) C1{ Fi[6] Fc[64] Fs FC2{ Fi[2] Fc[20] Fi Fp Fi} Fp[3] Fi}



static void Test_S13572C1()
{
  {
    init_simple_test("S13572C1");
    S13572C1 lv;
    check2(sizeof(lv), ABISELECT(176,148), "sizeof(S13572C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13572C1)");
    check_field_offset(lv, s13572c1f0, 0, "S13572C1.s13572c1f0");
    check_field_offset(lv, s13572c1f1, 24, "S13572C1.s13572c1f1");
    check_field_offset(lv, s13572c1f2, 88, "S13572C1.s13572c1f2");
    check_field_offset(lv, s13572c1f3, ABISELECT(96,92), "S13572C1.s13572c1f3");
    check_field_offset(lv, s13572c1f4, ABISELECT(144,132), "S13572C1.s13572c1f4");
    check_field_offset(lv, s13572c1f5, ABISELECT(168,144), "S13572C1.s13572c1f5");
  }
}
static Arrange_To_Call_Me vS13572C1(Test_S13572C1, "S13572C1", ABISELECT(176,148));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8105C1  : S8122C2_nt {
  ::S15373C2_nt s8105c1f0;
  int s8105c1f1[7];
  short s8105c1f2[6];
  virtual  ~S8105C1(); // _ZN7S8105C1D1Ev
  S8105C1(); // tgen
};
//SIG(1 S8105C1) C1{ BC2{ vd m Fi} vd FC3{ BC4{ m Fc[16]}} Fi[7] Fs[6]}


 S8105C1 ::~S8105C1(){ note_dtor("S8105C1", this);}
S8105C1 ::S8105C1(){ note_ctor("S8105C1", this);} // tgen

static void Test_S8105C1()
{
  extern Class_Descriptor cd_S8105C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,17)];
    init_test(&cd_S8105C1, buf);
    S8105C1 *dp, &lv = *(dp=new (buf) S8105C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,64), "sizeof(S8105C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8105C1)");
    check_base_class_offset(lv, (S8122C2_nt*), 0, "S8105C1");
    check_field_offset(lv, s8105c1f0, ABISELECT(12,8), "S8105C1.s8105c1f0");
    check_field_offset(lv, s8105c1f1, ABISELECT(28,24), "S8105C1.s8105c1f1");
    check_field_offset(lv, s8105c1f2, ABISELECT(56,52), "S8105C1.s8105c1f2");
    test_class_info(&lv, &cd_S8105C1);
    dp->~S8105C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8105C1(Test_S8105C1, "S8105C1", ABISELECT(72,64));

#else // __cplusplus

extern void _ZN7S8105C1C1Ev();
extern void _ZN7S8105C1D1Ev();
Name_Map name_map_S8105C1[] = {
  NSPAIR(_ZN7S8105C1C1Ev),
  NSPAIR(_ZN7S8105C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8122C2_nt;
extern VTBL_ENTRY _ZTI10S8122C2_nt[];
extern  VTBL_ENTRY _ZTV10S8122C2_nt[];
static Base_Class bases_S8105C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8122C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8105C1[];
extern void _ZN7S8105C1D1Ev();
extern void _ZN7S8105C1D0Ev();
static  VTBL_ENTRY vtc_S8105C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8105C1[0]),
  (VTBL_ENTRY)&_ZN7S8105C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8105C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8105C1[];
extern  VTBL_ENTRY _ZTV7S8105C1[];
Class_Descriptor cd_S8105C1 = {  "S8105C1", // class name
  bases_S8105C1, 1,
  &(vtc_S8105C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,64), // object size
  NSPAIRA(_ZTI7S8105C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8105C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12381C1  {
  int s12381c1f0;
  ::S9901C5_nt s12381c1f1;
  ::S9901C5_nt s12381c1f2;
  int s12381c1f3;
  ::S12377C4_nt s12381c1f4;
  void *s12381c1f5;
  int s12381c1f6;
};
//SIG(1 S12381C1) C1{ Fi FC2{ FC3{ Fc[20]} Fc[16]} FC2 Fi FC4{ Fc[12]} Fp Fi}



static void Test_S12381C1()
{
  {
    init_simple_test("S12381C1");
    S12381C1 lv;
    check2(sizeof(lv), ABISELECT(112,100), "sizeof(S12381C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12381C1)");
    check_field_offset(lv, s12381c1f0, 0, "S12381C1.s12381c1f0");
    check_field_offset(lv, s12381c1f1, 4, "S12381C1.s12381c1f1");
    check_field_offset(lv, s12381c1f2, 40, "S12381C1.s12381c1f2");
    check_field_offset(lv, s12381c1f3, 76, "S12381C1.s12381c1f3");
    check_field_offset(lv, s12381c1f4, 80, "S12381C1.s12381c1f4");
    check_field_offset(lv, s12381c1f5, ABISELECT(96,92), "S12381C1.s12381c1f5");
    check_field_offset(lv, s12381c1f6, ABISELECT(104,96), "S12381C1.s12381c1f6");
  }
}
static Arrange_To_Call_Me vS12381C1(Test_S12381C1, "S12381C1", ABISELECT(112,100));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8183C2  {
  void *s8183c2f0;
  int s8183c2f1;
  void *s8183c2f2;
  char s8183c2f3;
  int s8183c2f4;
  char s8183c2f5;
  int s8183c2f6;
  void  mf8183c2(); // _ZN7S8183C28mf8183c2Ev
  virtual  ~S8183C2(); // _ZN7S8183C2D1Ev
  S8183C2(); // tgen
};
//SIG(-1 S8183C2) C1{ vd m Fp Fi Fp Fc Fi Fc Fi}


void  S8183C2 ::mf8183c2(){}
 S8183C2 ::~S8183C2(){ note_dtor("S8183C2", this);}
S8183C2 ::S8183C2(){ note_ctor("S8183C2", this);} // tgen

static void Test_S8183C2()
{
  extern Class_Descriptor cd_S8183C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S8183C2, buf);
    S8183C2 *dp, &lv = *(dp=new (buf) S8183C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S8183C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8183C2)");
    check_field_offset(lv, s8183c2f0, ABISELECT(8,4), "S8183C2.s8183c2f0");
    check_field_offset(lv, s8183c2f1, ABISELECT(16,8), "S8183C2.s8183c2f1");
    check_field_offset(lv, s8183c2f2, ABISELECT(24,12), "S8183C2.s8183c2f2");
    check_field_offset(lv, s8183c2f3, ABISELECT(32,16), "S8183C2.s8183c2f3");
    check_field_offset(lv, s8183c2f4, ABISELECT(36,20), "S8183C2.s8183c2f4");
    check_field_offset(lv, s8183c2f5, ABISELECT(40,24), "S8183C2.s8183c2f5");
    check_field_offset(lv, s8183c2f6, ABISELECT(44,28), "S8183C2.s8183c2f6");
    test_class_info(&lv, &cd_S8183C2);
    dp->~S8183C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8183C2(Test_S8183C2, "S8183C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S8183C2C1Ev();
extern void _ZN7S8183C2D1Ev();
Name_Map name_map_S8183C2[] = {
  NSPAIR(_ZN7S8183C2C1Ev),
  NSPAIR(_ZN7S8183C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8183C2[];
extern void _ZN7S8183C2D1Ev();
extern void _ZN7S8183C2D0Ev();
static  VTBL_ENTRY vtc_S8183C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8183C2[0]),
  (VTBL_ENTRY)&_ZN7S8183C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8183C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S8183C2[];
extern  VTBL_ENTRY _ZTV7S8183C2[];
Class_Descriptor cd_S8183C2 = {  "S8183C2", // class name
  0,0,//no base classes
  &(vtc_S8183C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S8183C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8183C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8183C1  : S8183C2 {
  int s8183c1f0[3];
  char s8183c1f1;
  int s8183c1f2[5];
  virtual  ~S8183C1(); // _ZN7S8183C1D1Ev
  S8183C1(); // tgen
};
//SIG(1 S8183C1) C1{ BC2{ vd m Fp Fi Fp Fc Fi Fc Fi} vd Fi[3] Fc Fi[5]}


 S8183C1 ::~S8183C1(){ note_dtor("S8183C1", this);}
S8183C1 ::S8183C1(){ note_ctor("S8183C1", this);} // tgen

static void Test_S8183C1()
{
  extern Class_Descriptor cd_S8183C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,18)];
    init_test(&cd_S8183C1, buf);
    S8183C1 *dp, &lv = *(dp=new (buf) S8183C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,68), "sizeof(S8183C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8183C1)");
    check_base_class_offset(lv, (S8183C2*), 0, "S8183C1");
    check_field_offset(lv, s8183c1f0, ABISELECT(48,32), "S8183C1.s8183c1f0");
    check_field_offset(lv, s8183c1f1, ABISELECT(60,44), "S8183C1.s8183c1f1");
    check_field_offset(lv, s8183c1f2, ABISELECT(64,48), "S8183C1.s8183c1f2");
    test_class_info(&lv, &cd_S8183C1);
    dp->~S8183C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8183C1(Test_S8183C1, "S8183C1", ABISELECT(88,68));

#else // __cplusplus

extern void _ZN7S8183C1C1Ev();
extern void _ZN7S8183C1D1Ev();
Name_Map name_map_S8183C1[] = {
  NSPAIR(_ZN7S8183C1C1Ev),
  NSPAIR(_ZN7S8183C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8183C2;
extern VTBL_ENTRY _ZTI7S8183C2[];
extern  VTBL_ENTRY _ZTV7S8183C2[];
static Base_Class bases_S8183C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8183C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8183C1[];
extern void _ZN7S8183C1D1Ev();
extern void _ZN7S8183C1D0Ev();
static  VTBL_ENTRY vtc_S8183C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8183C1[0]),
  (VTBL_ENTRY)&_ZN7S8183C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8183C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8183C1[];
extern  VTBL_ENTRY _ZTV7S8183C1[];
Class_Descriptor cd_S8183C1 = {  "S8183C1", // class name
  bases_S8183C1, 1,
  &(vtc_S8183C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,68), // object size
  NSPAIRA(_ZTI7S8183C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8183C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15421C1  {
  ::S4206C24_nt s15421c1f0;
  int s15421c1f1;
  ::S7913C7_nt s15421c1f2;
  void  mf15421c1(); // _ZN8S15421C19mf15421c1Ev
};
//SIG(1 S15421C1) C1{ m FC2{ BC3{ m Fp Fi FC4{ m} FC5{ m}}} Fi FC6{ m FL[4]}}


void  S15421C1 ::mf15421c1(){}

static void Test_S15421C1()
{
  {
    init_simple_test("S15421C1");
    S15421C1 lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S15421C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15421C1)");
    check_field_offset(lv, s15421c1f0, 0, "S15421C1.s15421c1f0");
    check_field_offset(lv, s15421c1f1, ABISELECT(16,12), "S15421C1.s15421c1f1");
    check_field_offset(lv, s15421c1f2, ABISELECT(24,16), "S15421C1.s15421c1f2");
  }
}
static Arrange_To_Call_Me vS15421C1(Test_S15421C1, "S15421C1", ABISELECT(56,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S969C3  : S16113C2_nt {
  int s969c3f0;
};
//SIG(-1 S969C3) C1{ BC2{ m Fi} Fi}



static void Test_S969C3()
{
  extern Class_Descriptor cd_S969C3;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S969C3, buf);
    S969C3 &lv = *(new (buf) S969C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S969C3)");
    check2(__alignof__(lv), 4, "__alignof__(S969C3)");
    check_base_class_offset(lv, (S16113C2_nt*), 0, "S969C3");
    check_field_offset(lv, s969c3f0, 4, "S969C3.s969c3f0");
    test_class_info(&lv, &cd_S969C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS969C3(Test_S969C3, "S969C3", 8);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
static Base_Class bases_S969C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S969C3 = {  "S969C3", // class name
  bases_S969C3, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S969C6_nt  {
  int s969c6f0;
  void  mf969c6(); // _ZN9S969C6_nt7mf969c6Ev
};
//SIG(-1 S969C6_nt) C1{ m Fi}


void  S969C6_nt ::mf969c6(){}

//skip512 S969C6_nt

#else // __cplusplus

Class_Descriptor cd_S969C6_nt = {  "S969C6_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S969C5  : S969C6_nt {
  int s969c5f0;
};
//SIG(-1 S969C5) C1{ BC2{ m Fi} Fi}



static void Test_S969C5()
{
  extern Class_Descriptor cd_S969C5;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S969C5, buf);
    S969C5 &lv = *(new (buf) S969C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S969C5)");
    check2(__alignof__(lv), 4, "__alignof__(S969C5)");
    check_base_class_offset(lv, (S969C6_nt*), 0, "S969C5");
    check_field_offset(lv, s969c5f0, 4, "S969C5.s969c5f0");
    test_class_info(&lv, &cd_S969C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS969C5(Test_S969C5, "S969C5", 8);

#else // __cplusplus

extern Class_Descriptor cd_S969C6_nt;
static Base_Class bases_S969C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S969C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S969C5 = {  "S969C5", // class name
  bases_S969C5, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S969C2  : S969C3 , S969C5 {
};
//SIG(-1 S969C2) C1{ BC2{ BC3{ m Fi} Fi} BC4{ BC5{ m Fi} Fi}}



static void Test_S969C2()
{
  extern Class_Descriptor cd_S969C2;
  void *lvp;
  {
    int buf[5];
    init_test(&cd_S969C2, buf);
    S969C2 &lv = *(new (buf) S969C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 16, "sizeof(S969C2)");
    check2(__alignof__(lv), 4, "__alignof__(S969C2)");
    check_base_class_offset(lv, (S16113C2_nt*)(S969C3*), 0, "S969C2");
    check_base_class_offset(lv, (S969C3*), 0, "S969C2");
    check_base_class_offset(lv, (S969C6_nt*)(S969C5*), 8, "S969C2");
    check_base_class_offset(lv, (S969C5*), 8, "S969C2");
    test_class_info(&lv, &cd_S969C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS969C2(Test_S969C2, "S969C2", 16);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S969C3;
extern Class_Descriptor cd_S969C6_nt;
extern Class_Descriptor cd_S969C5;
static Base_Class bases_S969C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S969C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S969C6_nt,    8, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S969C5,    8, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S969C2 = {  "S969C2", // class name
  bases_S969C2, 4,
  0, // no vftv
  0, //no vtt
  16, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S969C7  {
  int s969c7f0;
  void  mf969c7(); // _ZN6S969C77mf969c7Ev
};
//SIG(-1 S969C7) C1{ m Fi}


void  S969C7 ::mf969c7(){}

static void Test_S969C7()
{
  {
    init_simple_test("S969C7");
    S969C7 lv;
    check2(sizeof(lv), 4, "sizeof(S969C7)");
    check2(__alignof__(lv), 4, "__alignof__(S969C7)");
    check_field_offset(lv, s969c7f0, 0, "S969C7.s969c7f0");
  }
}
static Arrange_To_Call_Me vS969C7(Test_S969C7, "S969C7", 4);

#else // __cplusplus

Class_Descriptor cd_S969C7 = {  "S969C7", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S969C1  : S969C2 , S969C7 {
};
//SIG(1 S969C1) C1{ BC2{ BC3{ BC4{ m Fi} Fi} BC5{ BC6{ m Fi} Fi}} BC7{ m Fi}}



static void Test_S969C1()
{
  extern Class_Descriptor cd_S969C1;
  void *lvp;
  {
    int buf[6];
    init_test(&cd_S969C1, buf);
    S969C1 &lv = *(new (buf) S969C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 20, "sizeof(S969C1)");
    check2(__alignof__(lv), 4, "__alignof__(S969C1)");
    check_base_class_offset(lv, (S16113C2_nt*)(S969C3*)(S969C2*), 0, "S969C1");
    check_base_class_offset(lv, (S969C3*)(S969C2*), 0, "S969C1");
    check_base_class_offset(lv, (S969C6_nt*)(S969C5*)(S969C2*), 8, "S969C1");
    check_base_class_offset(lv, (S969C5*)(S969C2*), 8, "S969C1");
    check_base_class_offset(lv, (S969C2*), 0, "S969C1");
    check_base_class_offset(lv, (S969C7*), 16, "S969C1");
    test_class_info(&lv, &cd_S969C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS969C1(Test_S969C1, "S969C1", 20);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S969C3;
extern Class_Descriptor cd_S969C6_nt;
extern Class_Descriptor cd_S969C5;
extern Class_Descriptor cd_S969C2;
extern Class_Descriptor cd_S969C7;
static Base_Class bases_S969C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S969C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S969C6_nt,    8, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S969C5,    8, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S969C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S969C7,    16, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S969C1 = {  "S969C1", // class name
  bases_S969C1, 6,
  0, // no vftv
  0, //no vtt
  20, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12385C1  {
  int s12385c1f0;
  ::S9901C5_nt s12385c1f1;
  ::S12377C4_nt s12385c1f2;
  ::S9901C5_nt s12385c1f3;
  int s12385c1f4[4];
};
//SIG(1 S12385C1) C1{ Fi FC2{ FC3{ Fc[20]} Fc[16]} FC4{ Fc[12]} FC2 Fi[4]}



static void Test_S12385C1()
{
  {
    init_simple_test("S12385C1");
    S12385C1 lv;
    check2(sizeof(lv), 104, "sizeof(S12385C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12385C1)");
    check_field_offset(lv, s12385c1f0, 0, "S12385C1.s12385c1f0");
    check_field_offset(lv, s12385c1f1, 4, "S12385C1.s12385c1f1");
    check_field_offset(lv, s12385c1f2, 40, "S12385C1.s12385c1f2");
    check_field_offset(lv, s12385c1f3, 52, "S12385C1.s12385c1f3");
    check_field_offset(lv, s12385c1f4, 88, "S12385C1.s12385c1f4");
  }
}
static Arrange_To_Call_Me vS12385C1(Test_S12385C1, "S12385C1", 104);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16232C1  {
  ::S16113C5_nt s16232c1f0;
  ::S16113C5_nt s16232c1f1;
  void *s16232c1f2;
  int s16232c1f3[2];
  char s16232c1f4[3];
  void *s16232c1f5[4];
  void  mf16232c1(); // _ZN8S16232C19mf16232c1Ev
};
//SIG(1 S16232C1) C1{ m FC2{ m Fp Fi FC3{ m}} FC2 Fp Fi[2] Fc[3] Fp[4]}


void  S16232C1 ::mf16232c1(){}

static void Test_S16232C1()
{
  {
    init_simple_test("S16232C1");
    S16232C1 lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S16232C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16232C1)");
    check_field_offset(lv, s16232c1f0, 0, "S16232C1.s16232c1f0");
    check_field_offset(lv, s16232c1f1, ABISELECT(16,12), "S16232C1.s16232c1f1");
    check_field_offset(lv, s16232c1f2, ABISELECT(32,24), "S16232C1.s16232c1f2");
    check_field_offset(lv, s16232c1f3, ABISELECT(40,28), "S16232C1.s16232c1f3");
    check_field_offset(lv, s16232c1f4, ABISELECT(48,36), "S16232C1.s16232c1f4");
    check_field_offset(lv, s16232c1f5, ABISELECT(56,40), "S16232C1.s16232c1f5");
  }
}
static Arrange_To_Call_Me vS16232C1(Test_S16232C1, "S16232C1", ABISELECT(88,56));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14186C1  {
  void *s14186c1f0;
  int s14186c1f1;
  ::S13749C2 s14186c1f2;
  ::S13749C3 s14186c1f3;
};
//SIG(1 S14186C1) C1{ Fp Fi FC2{ Fp Fi[3]} FC3{ Fi[3] Fp[3] Fl Fc[8]}}



static void Test_S14186C1()
{
  {
    init_simple_test("S14186C1");
    S14186C1 lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S14186C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14186C1)");
    check_field_offset(lv, s14186c1f0, 0, "S14186C1.s14186c1f0");
    check_field_offset(lv, s14186c1f1, ABISELECT(8,4), "S14186C1.s14186c1f1");
    check_field_offset(lv, s14186c1f2, ABISELECT(16,8), "S14186C1.s14186c1f2");
    check_field_offset(lv, s14186c1f3, ABISELECT(40,24), "S14186C1.s14186c1f3");
  }
}
static Arrange_To_Call_Me vS14186C1(Test_S14186C1, "S14186C1", ABISELECT(96,60));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20132C2  {
  int s20132c2f0[2];
  void *s20132c2f1;
  virtual void  v3(); // _ZN8S20132C22v3Ev
  virtual void  v4(); // _ZN8S20132C22v4Ev
  virtual void  v5(); // _ZN8S20132C22v5Ev
  virtual void  v6(); // _ZN8S20132C22v6Ev
  virtual void  v7(); // _ZN8S20132C22v7Ev
  ~S20132C2(); // tgen
  S20132C2(); // tgen
};
//SIG(-1 S20132C2) C1{ v1 v2 v3 v4 v5 Fi[2] Fp}


void  S20132C2 ::v3(){vfunc_called(this, "_ZN8S20132C22v3Ev");}
void  S20132C2 ::v4(){vfunc_called(this, "_ZN8S20132C22v4Ev");}
void  S20132C2 ::v5(){vfunc_called(this, "_ZN8S20132C22v5Ev");}
void  S20132C2 ::v6(){vfunc_called(this, "_ZN8S20132C22v6Ev");}
void  S20132C2 ::v7(){vfunc_called(this, "_ZN8S20132C22v7Ev");}
S20132C2 ::~S20132C2(){ note_dtor("S20132C2", this);} // tgen
S20132C2 ::S20132C2(){ note_ctor("S20132C2", this);} // tgen

static void Test_S20132C2()
{
  extern Class_Descriptor cd_S20132C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20132C2, buf);
    S20132C2 *dp, &lv = *(dp=new (buf) S20132C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20132C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20132C2)");
    check_field_offset(lv, s20132c2f0, ABISELECT(8,4), "S20132C2.s20132c2f0");
    check_field_offset(lv, s20132c2f1, ABISELECT(16,12), "S20132C2.s20132c2f1");
    test_class_info(&lv, &cd_S20132C2);
    dp->~S20132C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20132C2(Test_S20132C2, "S20132C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20132C2C1Ev();
extern void _ZN8S20132C2D1Ev();
Name_Map name_map_S20132C2[] = {
  NSPAIR(_ZN8S20132C2C1Ev),
  NSPAIR(_ZN8S20132C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20132C2[];
extern void _ZN8S20132C22v3Ev();
extern void _ZN8S20132C22v4Ev();
extern void _ZN8S20132C22v5Ev();
extern void _ZN8S20132C22v6Ev();
extern void _ZN8S20132C22v7Ev();
static  VTBL_ENTRY vtc_S20132C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20132C2[0]),
  (VTBL_ENTRY)&_ZN8S20132C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20132C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20132C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20132C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20132C22v7Ev,
};
extern VTBL_ENTRY _ZTI8S20132C2[];
extern  VTBL_ENTRY _ZTV8S20132C2[];
Class_Descriptor cd_S20132C2 = {  "S20132C2", // class name
  0,0,//no base classes
  &(vtc_S20132C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20132C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20132C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20132C1  : virtual S20132C2 {
  int  :0;
  ::S20132C2 s20132c1f1;
  virtual void  v1(); // _ZN8S20132C12v1Ev
  virtual void  v2(); // _ZN8S20132C12v2Ev
  ~S20132C1(); // tgen
  S20132C1(); // tgen
};
//SIG(1 S20132C1) C1{ VBC2{ v3 v4 v5 v6 v7 Fi[2] Fp} v1 v2 Fi:0 FC2}


void  S20132C1 ::v1(){vfunc_called(this, "_ZN8S20132C12v1Ev");}
void  S20132C1 ::v2(){vfunc_called(this, "_ZN8S20132C12v2Ev");}
S20132C1 ::~S20132C1(){ note_dtor("S20132C1", this);} // tgen
S20132C1 ::S20132C1(){ note_ctor("S20132C1", this);} // tgen

static void Test_S20132C1()
{
  extern Class_Descriptor cd_S20132C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S20132C1, buf);
    S20132C1 *dp, &lv = *(dp=new (buf) S20132C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S20132C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20132C1)");
    check_base_class_offset(lv, (S20132C2*), ABISELECT(32,20), "S20132C1");
    check_field_offset(lv, s20132c1f1, ABISELECT(8,4), "S20132C1.s20132c1f1");
    test_class_info(&lv, &cd_S20132C1);
    dp->~S20132C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20132C1(Test_S20132C1, "S20132C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S20132C1C1Ev();
extern void _ZN8S20132C1D1Ev();
Name_Map name_map_S20132C1[] = {
  NSPAIR(_ZN8S20132C1C1Ev),
  NSPAIR(_ZN8S20132C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20132C2;
extern VTBL_ENTRY _ZTI8S20132C2[];
extern  VTBL_ENTRY _ZTV8S20132C2[];
static Base_Class bases_S20132C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20132C2,    ABISELECT(32,20), //bcp->offset
    5, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20132C1[];
extern void _ZN8S20132C12v1Ev();
extern void _ZN8S20132C12v2Ev();
extern void _ZN8S20132C22v3Ev();
extern void _ZN8S20132C22v4Ev();
extern void _ZN8S20132C22v5Ev();
extern void _ZN8S20132C22v6Ev();
extern void _ZN8S20132C22v7Ev();
static  VTBL_ENTRY vtc_S20132C1[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20132C1[0]),
  (VTBL_ENTRY)&_ZN8S20132C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20132C12v2Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20132C1[0]),
  (VTBL_ENTRY)&_ZN8S20132C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20132C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20132C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20132C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20132C22v7Ev,
};
extern VTBL_ENTRY _ZTV8S20132C1[];
static  VTT_ENTRY vtt_S20132C1[] = {
  {&(_ZTV8S20132C1[3]),  3,17},
  {&(_ZTV8S20132C1[12]),  12,17},
};
extern VTBL_ENTRY _ZTI8S20132C1[];
extern  VTBL_ENTRY _ZTV8S20132C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20132C1[];
Class_Descriptor cd_S20132C1 = {  "S20132C1", // class name
  bases_S20132C1, 1,
  &(vtc_S20132C1[0]), // expected_vtbl_contents
  &(vtt_S20132C1[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S20132C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20132C1),17, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20132C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13210C1  {
  int s13210c1f0[2];
  void *s13210c1f1;
  int s13210c1f2[5];
  void *s13210c1f3[3];
  int s13210c1f4;
  __tsi64 s13210c1f5;
  int s13210c1f6;
  void *s13210c1f7[4];
  char s13210c1f8[192];
};
//SIG(1 S13210C1) C1{ Fi[2] Fp Fi[5] Fp[3] Fi FL Fi Fp[4] Fc[192]}



static void Test_S13210C1()
{
  {
    init_simple_test("S13210C1");
    S13210C1 lv;
    check2(sizeof(lv), ABISELECT(312,268), "sizeof(S13210C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13210C1)");
    check_field_offset(lv, s13210c1f0, 0, "S13210C1.s13210c1f0");
    check_field_offset(lv, s13210c1f1, 8, "S13210C1.s13210c1f1");
    check_field_offset(lv, s13210c1f2, ABISELECT(16,12), "S13210C1.s13210c1f2");
    check_field_offset(lv, s13210c1f3, ABISELECT(40,32), "S13210C1.s13210c1f3");
    check_field_offset(lv, s13210c1f4, ABISELECT(64,44), "S13210C1.s13210c1f4");
    check_field_offset(lv, s13210c1f5, ABISELECT(72,48), "S13210C1.s13210c1f5");
    check_field_offset(lv, s13210c1f6, ABISELECT(80,56), "S13210C1.s13210c1f6");
    check_field_offset(lv, s13210c1f7, ABISELECT(88,60), "S13210C1.s13210c1f7");
    check_field_offset(lv, s13210c1f8, ABISELECT(120,76), "S13210C1.s13210c1f8");
  }
}
static Arrange_To_Call_Me vS13210C1(Test_S13210C1, "S13210C1", ABISELECT(312,268));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4597C3  {
  virtual  ~S4597C3(); // _ZN7S4597C3D1Ev
  virtual void  v2(); // _ZN7S4597C32v2Ev
  S4597C3(); // tgen
};
//SIG(-1 S4597C3) C1{ vd v1}


 S4597C3 ::~S4597C3(){ note_dtor("S4597C3", this);}
void  S4597C3 ::v2(){vfunc_called(this, "_ZN7S4597C32v2Ev");}
S4597C3 ::S4597C3(){ note_ctor("S4597C3", this);} // tgen

static void Test_S4597C3()
{
  extern Class_Descriptor cd_S4597C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4597C3, buf);
    S4597C3 *dp, &lv = *(dp=new (buf) S4597C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4597C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4597C3)");
    test_class_info(&lv, &cd_S4597C3);
    dp->~S4597C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4597C3(Test_S4597C3, "S4597C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4597C3C1Ev();
extern void _ZN7S4597C3D1Ev();
Name_Map name_map_S4597C3[] = {
  NSPAIR(_ZN7S4597C3C1Ev),
  NSPAIR(_ZN7S4597C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4597C3[];
extern void _ZN7S4597C3D1Ev();
extern void _ZN7S4597C3D0Ev();
extern void _ZN7S4597C32v2Ev();
static  VTBL_ENTRY vtc_S4597C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4597C3[0]),
  (VTBL_ENTRY)&_ZN7S4597C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4597C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4597C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4597C3[];
extern  VTBL_ENTRY _ZTV7S4597C3[];
Class_Descriptor cd_S4597C3 = {  "S4597C3", // class name
  0,0,//no base classes
  &(vtc_S4597C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4597C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4597C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4597C2_nt  : S4597C3 {
  virtual  ~S4597C2_nt(); // _ZN10S4597C2_ntD1Ev
  S4597C2_nt(); // tgen
};
//SIG(-1 S4597C2_nt) C1{ BC2{ vd v1} vd}


 S4597C2_nt ::~S4597C2_nt(){ note_dtor("S4597C2_nt", this);}
S4597C2_nt ::S4597C2_nt(){ note_ctor("S4597C2_nt", this);} // tgen

//skip512 S4597C2_nt

#else // __cplusplus

extern void _ZN10S4597C2_ntC1Ev();
extern void _ZN10S4597C2_ntD1Ev();
Name_Map name_map_S4597C2_nt[] = {
  NSPAIR(_ZN10S4597C2_ntC1Ev),
  NSPAIR(_ZN10S4597C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4597C3;
extern VTBL_ENTRY _ZTI7S4597C3[];
extern  VTBL_ENTRY _ZTV7S4597C3[];
static Base_Class bases_S4597C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4597C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4597C2_nt[];
extern void _ZN10S4597C2_ntD1Ev();
extern void _ZN10S4597C2_ntD0Ev();
extern void _ZN7S4597C32v2Ev();
static  VTBL_ENTRY vtc_S4597C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4597C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4597C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4597C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S4597C32v2Ev,
};
extern VTBL_ENTRY _ZTI10S4597C2_nt[];
VTBL_ENTRY *P__ZTI10S4597C2_nt = _ZTI10S4597C2_nt; 
extern  VTBL_ENTRY _ZTV10S4597C2_nt[];
Class_Descriptor cd_S4597C2_nt = {  "S4597C2_nt", // class name
  bases_S4597C2_nt, 1,
  &(vtc_S4597C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4597C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4597C2_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4597C1  : S4597C2_nt {
  ::S16113C5_nt s4597c1f0;
  ::S16113C5_nt s4597c1f1;
  virtual void  v1(); // _ZN7S4597C12v1Ev
  ~S4597C1(); // tgen
  S4597C1(); // tgen
};
//SIG(1 S4597C1) C1{ BC2{ BC3{ vd v2} vd} v1 FC4{ m Fp Fi FC5{ m}} FC4}


void  S4597C1 ::v1(){vfunc_called(this, "_ZN7S4597C12v1Ev");}
S4597C1 ::~S4597C1(){ note_dtor("S4597C1", this);} // tgen
S4597C1 ::S4597C1(){ note_ctor("S4597C1", this);} // tgen

static void Test_S4597C1()
{
  extern Class_Descriptor cd_S4597C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4597C1, buf);
    S4597C1 *dp, &lv = *(dp=new (buf) S4597C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4597C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4597C1)");
    check_base_class_offset(lv, (S4597C3*)(S4597C2_nt*), 0, "S4597C1");
    check_base_class_offset(lv, (S4597C2_nt*), 0, "S4597C1");
    check_field_offset(lv, s4597c1f0, ABISELECT(8,4), "S4597C1.s4597c1f0");
    check_field_offset(lv, s4597c1f1, ABISELECT(24,16), "S4597C1.s4597c1f1");
    test_class_info(&lv, &cd_S4597C1);
    dp->~S4597C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4597C1(Test_S4597C1, "S4597C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4597C1C1Ev();
extern void _ZN7S4597C1D1Ev();
Name_Map name_map_S4597C1[] = {
  NSPAIR(_ZN7S4597C1C1Ev),
  NSPAIR(_ZN7S4597C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4597C3;
extern VTBL_ENTRY _ZTI7S4597C3[];
extern  VTBL_ENTRY _ZTV7S4597C3[];
extern Class_Descriptor cd_S4597C2_nt;
extern VTBL_ENTRY _ZTI10S4597C2_nt[];
extern  VTBL_ENTRY _ZTV10S4597C2_nt[];
static Base_Class bases_S4597C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4597C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4597C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4597C1[];
extern void _ZN7S4597C1D1Ev();
extern void _ZN7S4597C1D0Ev();
extern void _ZN7S4597C32v2Ev();
extern void _ZN7S4597C12v1Ev();
static  VTBL_ENTRY vtc_S4597C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4597C1[0]),
  (VTBL_ENTRY)&_ZN7S4597C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4597C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4597C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4597C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4597C1[];
extern  VTBL_ENTRY _ZTV7S4597C1[];
Class_Descriptor cd_S4597C1 = {  "S4597C1", // class name
  bases_S4597C1, 2,
  &(vtc_S4597C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4597C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4597C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4042C4_nt  {
  void *s4042c4f0[2];
};
//SIG(-1 S4042C4_nt) C1{ Fp[2]}



//skip512 S4042C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4042C2  : S1850C4_nt {
  void *s4042c2f0;
  ::S4042C4_nt s4042c2f1;
  virtual  ~S4042C2(); // _ZN7S4042C2D1Ev
  S4042C2(); // tgen
};
//SIG(-1 S4042C2) C1{ BC2{ vd m} vd Fp FC3{ Fp[2]}}


 S4042C2 ::~S4042C2(){ note_dtor("S4042C2", this);}
S4042C2 ::S4042C2(){ note_ctor("S4042C2", this);} // tgen

static void Test_S4042C2()
{
  extern Class_Descriptor cd_S4042C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S4042C2, buf);
    S4042C2 *dp, &lv = *(dp=new (buf) S4042C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S4042C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4042C2)");
    check_base_class_offset(lv, (S1850C4_nt*), 0, "S4042C2");
    check_field_offset(lv, s4042c2f0, ABISELECT(8,4), "S4042C2.s4042c2f0");
    check_field_offset(lv, s4042c2f1, ABISELECT(16,8), "S4042C2.s4042c2f1");
    test_class_info(&lv, &cd_S4042C2);
    dp->~S4042C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4042C2(Test_S4042C2, "S4042C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S4042C2C1Ev();
extern void _ZN7S4042C2D1Ev();
Name_Map name_map_S4042C2[] = {
  NSPAIR(_ZN7S4042C2C1Ev),
  NSPAIR(_ZN7S4042C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
static Base_Class bases_S4042C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4042C2[];
extern void _ZN7S4042C2D1Ev();
extern void _ZN7S4042C2D0Ev();
static  VTBL_ENTRY vtc_S4042C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4042C2[0]),
  (VTBL_ENTRY)&_ZN7S4042C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4042C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S4042C2[];
extern  VTBL_ENTRY _ZTV7S4042C2[];
Class_Descriptor cd_S4042C2 = {  "S4042C2", // class name
  bases_S4042C2, 1,
  &(vtc_S4042C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S4042C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4042C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4042C1  : S4042C2 {
  void *s4042c1f0;
  int s4042c1f1[2];
  virtual  ~S4042C1(); // _ZN7S4042C1D1Ev
  S4042C1(); // tgen
};
//SIG(1 S4042C1) C1{ BC2{ BC3{ vd m} vd Fp FC4{ Fp[2]}} vd Fp Fi[2]}


 S4042C1 ::~S4042C1(){ note_dtor("S4042C1", this);}
S4042C1 ::S4042C1(){ note_ctor("S4042C1", this);} // tgen

static void Test_S4042C1()
{
  extern Class_Descriptor cd_S4042C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S4042C1, buf);
    S4042C1 *dp, &lv = *(dp=new (buf) S4042C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S4042C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4042C1)");
    check_base_class_offset(lv, (S1850C4_nt*)(S4042C2*), 0, "S4042C1");
    check_base_class_offset(lv, (S4042C2*), 0, "S4042C1");
    check_field_offset(lv, s4042c1f0, ABISELECT(32,16), "S4042C1.s4042c1f0");
    check_field_offset(lv, s4042c1f1, ABISELECT(40,20), "S4042C1.s4042c1f1");
    test_class_info(&lv, &cd_S4042C1);
    dp->~S4042C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4042C1(Test_S4042C1, "S4042C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S4042C1C1Ev();
extern void _ZN7S4042C1D1Ev();
Name_Map name_map_S4042C1[] = {
  NSPAIR(_ZN7S4042C1C1Ev),
  NSPAIR(_ZN7S4042C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1850C4_nt;
extern VTBL_ENTRY _ZTI10S1850C4_nt[];
extern  VTBL_ENTRY _ZTV10S1850C4_nt[];
extern Class_Descriptor cd_S4042C2;
extern VTBL_ENTRY _ZTI7S4042C2[];
extern  VTBL_ENTRY _ZTV7S4042C2[];
static Base_Class bases_S4042C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1850C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4042C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4042C1[];
extern void _ZN7S4042C1D1Ev();
extern void _ZN7S4042C1D0Ev();
static  VTBL_ENTRY vtc_S4042C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4042C1[0]),
  (VTBL_ENTRY)&_ZN7S4042C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4042C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S4042C1[];
extern  VTBL_ENTRY _ZTV7S4042C1[];
Class_Descriptor cd_S4042C1 = {  "S4042C1", // class name
  bases_S4042C1, 2,
  &(vtc_S4042C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S4042C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4042C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S970C3  : S16113C2_nt {
  int s970c3f0;
};
//SIG(-1 S970C3) C1{ BC2{ m Fi} Fi}



static void Test_S970C3()
{
  extern Class_Descriptor cd_S970C3;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S970C3, buf);
    S970C3 &lv = *(new (buf) S970C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S970C3)");
    check2(__alignof__(lv), 4, "__alignof__(S970C3)");
    check_base_class_offset(lv, (S16113C2_nt*), 0, "S970C3");
    check_field_offset(lv, s970c3f0, 4, "S970C3.s970c3f0");
    test_class_info(&lv, &cd_S970C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS970C3(Test_S970C3, "S970C3", 8);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
static Base_Class bases_S970C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S970C3 = {  "S970C3", // class name
  bases_S970C3, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S970C2  : S970C3 {
  int s970c2f0;
};
//SIG(-1 S970C2) C1{ BC2{ BC3{ m Fi} Fi} Fi}



static void Test_S970C2()
{
  extern Class_Descriptor cd_S970C2;
  void *lvp;
  {
    int buf[4];
    init_test(&cd_S970C2, buf);
    S970C2 &lv = *(new (buf) S970C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 12, "sizeof(S970C2)");
    check2(__alignof__(lv), 4, "__alignof__(S970C2)");
    check_base_class_offset(lv, (S16113C2_nt*)(S970C3*), 0, "S970C2");
    check_base_class_offset(lv, (S970C3*), 0, "S970C2");
    check_field_offset(lv, s970c2f0, 8, "S970C2.s970c2f0");
    test_class_info(&lv, &cd_S970C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS970C2(Test_S970C2, "S970C2", 12);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S970C3;
static Base_Class bases_S970C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S970C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S970C2 = {  "S970C2", // class name
  bases_S970C2, 2,
  0, // no vftv
  0, //no vtt
  12, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S970C6  : S16113C2_nt {
  int s970c6f0;
};
//SIG(-1 S970C6) C1{ BC2{ m Fi} Fi}



static void Test_S970C6()
{
  extern Class_Descriptor cd_S970C6;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S970C6, buf);
    S970C6 &lv = *(new (buf) S970C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S970C6)");
    check2(__alignof__(lv), 4, "__alignof__(S970C6)");
    check_base_class_offset(lv, (S16113C2_nt*), 0, "S970C6");
    check_field_offset(lv, s970c6f0, 4, "S970C6.s970c6f0");
    test_class_info(&lv, &cd_S970C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS970C6(Test_S970C6, "S970C6", 8);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
static Base_Class bases_S970C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S970C6 = {  "S970C6", // class name
  bases_S970C6, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S970C5  : S970C6 {
  int s970c5f0;
};
//SIG(-1 S970C5) C1{ BC2{ BC3{ m Fi} Fi} Fi}



static void Test_S970C5()
{
  extern Class_Descriptor cd_S970C5;
  void *lvp;
  {
    int buf[4];
    init_test(&cd_S970C5, buf);
    S970C5 &lv = *(new (buf) S970C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), 12, "sizeof(S970C5)");
    check2(__alignof__(lv), 4, "__alignof__(S970C5)");
    check_base_class_offset(lv, (S16113C2_nt*)(S970C6*), 0, "S970C5");
    check_base_class_offset(lv, (S970C6*), 0, "S970C5");
    check_field_offset(lv, s970c5f0, 8, "S970C5.s970c5f0");
    test_class_info(&lv, &cd_S970C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS970C5(Test_S970C5, "S970C5", 12);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S970C6;
static Base_Class bases_S970C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S970C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S970C5 = {  "S970C5", // class name
  bases_S970C5, 2,
  0, // no vftv
  0, //no vtt
  12, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S970C1  : S970C2 , S970C5 {
};
//SIG(1 S970C1) C1{ BC2{ BC3{ BC4{ m Fi} Fi} Fi} BC5{ BC6{ BC4 Fi} Fi}}



static void Test_S970C1()
{
  extern Class_Descriptor cd_S970C1;
  void *lvp;
  {
    int buf[7];
    init_test(&cd_S970C1, buf);
    S970C1 &lv = *(new (buf) S970C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 24, "sizeof(S970C1)");
    check2(__alignof__(lv), 4, "__alignof__(S970C1)");
    check_base_class_offset(lv, (S16113C2_nt*)(S970C3*)(S970C2*), 0, "S970C1");
    check_base_class_offset(lv, (S970C3*)(S970C2*), 0, "S970C1");
    check_base_class_offset(lv, (S970C2*), 0, "S970C1");
    check_base_class_offset(lv, (S16113C2_nt*)(S970C6*)(S970C5*), 12, "S970C1");
    check_base_class_offset(lv, (S970C6*)(S970C5*), 12, "S970C1");
    check_base_class_offset(lv, (S970C5*), 12, "S970C1");
    test_class_info(&lv, &cd_S970C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS970C1(Test_S970C1, "S970C1", 24);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S970C3;
extern Class_Descriptor cd_S970C2;
extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S970C6;
extern Class_Descriptor cd_S970C5;
static Base_Class bases_S970C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S970C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S970C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S16113C2_nt,    12, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S970C6,    12, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S970C5,    12, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S970C1 = {  "S970C1", // class name
  bases_S970C1, 6,
  0, // no vftv
  0, //no vtt
  24, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2549C4  : S16113C2_nt {
  int s2549c4f0;
};
//SIG(-1 S2549C4) C1{ BC2{ m Fi} Fi}



static void Test_S2549C4()
{
  extern Class_Descriptor cd_S2549C4;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S2549C4, buf);
    S2549C4 &lv = *(new (buf) S2549C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S2549C4)");
    check2(__alignof__(lv), 4, "__alignof__(S2549C4)");
    check_base_class_offset(lv, (S16113C2_nt*), 0, "S2549C4");
    check_field_offset(lv, s2549c4f0, 4, "S2549C4.s2549c4f0");
    test_class_info(&lv, &cd_S2549C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2549C4(Test_S2549C4, "S2549C4", 8);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
static Base_Class bases_S2549C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2549C4 = {  "S2549C4", // class name
  bases_S2549C4, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2549C2  : S16113C2_nt , S2549C4 {
  int s2549c2f0;
  ::S2549C4 s2549c2f1;
};
//SIG(-1 S2549C2) C1{ BC2{ m Fi} BC3{ BC2 Fi} Fi FC3}



static void Test_S2549C2()
{
  extern Class_Descriptor cd_S2549C2;
  void *lvp;
  {
    int buf[7];
    init_test(&cd_S2549C2, buf);
    S2549C2 &lv = *(new (buf) S2549C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 24, "sizeof(S2549C2)");
    check2(__alignof__(lv), 4, "__alignof__(S2549C2)");
    /*is_ambiguous_... S2549C2::S16113C2_nt */ AMB_check_base_class_offset(lv, (S16113C2_nt*), 0, "S2549C2");
    check_base_class_offset(lv, (S16113C2_nt*)(S2549C4*), 4, "S2549C2");
    check_base_class_offset(lv, (S2549C4*), 4, "S2549C2");
    check_field_offset(lv, s2549c2f0, 12, "S2549C2.s2549c2f0");
    check_field_offset(lv, s2549c2f1, 16, "S2549C2.s2549c2f1");
    test_class_info(&lv, &cd_S2549C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2549C2(Test_S2549C2, "S2549C2", 24);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S2549C4;
static Base_Class bases_S2549C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S16113C2_nt,    4, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2549C4,    4, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2549C2 = {  "S2549C2", // class name
  bases_S2549C2, 3,
  0, // no vftv
  0, //no vtt
  24, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2549C1  : S2549C2 , S16113C2_nt {
  int s2549c1f0;
  ::S16113C2_nt s2549c1f1;
};
//SIG(1 S2549C1) C1{ BC2{ BC3{ m Fi} BC4{ BC3 Fi} Fi FC4} BC3 Fi FC3}



static void Test_S2549C1()
{
  extern Class_Descriptor cd_S2549C1;
  void *lvp;
  {
    int buf[10];
    init_test(&cd_S2549C1, buf);
    S2549C1 &lv = *(new (buf) S2549C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 36, "sizeof(S2549C1)");
    check2(__alignof__(lv), 4, "__alignof__(S2549C1)");
    /*is_ambiguous_... S2549C2::S16113C2_nt */ AMB_check_base_class_offset(lv, (S16113C2_nt*)(S2549C2*), 0, "S2549C1");
    check_base_class_offset(lv, (S16113C2_nt*)(S2549C4*)(S2549C2*), 4, "S2549C1");
    check_base_class_offset(lv, (S2549C4*)(S2549C2*), 4, "S2549C1");
    check_base_class_offset(lv, (S2549C2*), 0, "S2549C1");
    /*is_ambiguous_... S2549C1::S16113C2_nt */ AMB_check_base_class_offset(lv, (S16113C2_nt*), 24, "S2549C1");
    check_field_offset(lv, s2549c1f0, 28, "S2549C1.s2549c1f0");
    check_field_offset(lv, s2549c1f1, 32, "S2549C1.s2549c1f1");
    test_class_info(&lv, &cd_S2549C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2549C1(Test_S2549C1, "S2549C1", 36);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S2549C4;
extern Class_Descriptor cd_S2549C2;
extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
static Base_Class bases_S2549C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S16113C2_nt,    4, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2549C4,    4, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2549C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S16113C2_nt,    24, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2549C1 = {  "S2549C1", // class name
  bases_S2549C1, 5,
  0, // no vftv
  0, //no vtt
  36, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18051C2  {
  ::S8511C10_nt s18051c2f0;
  int s18051c2f1[2];
  void  mf18051c2(); // _ZN8S18051C29mf18051c2Ev
  virtual  ~S18051C2(); // _ZN8S18051C2D1Ev
  S18051C2(); // tgen
};
//SIG(-1 S18051C2) C1{ vd m FC2{ m FC3{ m FL}} Fi[2]}


void  S18051C2 ::mf18051c2(){}
 S18051C2 ::~S18051C2(){ note_dtor("S18051C2", this);}
S18051C2 ::S18051C2(){ note_ctor("S18051C2", this);} // tgen

static void Test_S18051C2()
{
  extern Class_Descriptor cd_S18051C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S18051C2, buf);
    S18051C2 *dp, &lv = *(dp=new (buf) S18051C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S18051C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18051C2)");
    check_field_offset(lv, s18051c2f0, ABISELECT(8,4), "S18051C2.s18051c2f0");
    check_field_offset(lv, s18051c2f1, ABISELECT(16,12), "S18051C2.s18051c2f1");
    test_class_info(&lv, &cd_S18051C2);
    dp->~S18051C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18051C2(Test_S18051C2, "S18051C2", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN8S18051C2C1Ev();
extern void _ZN8S18051C2D1Ev();
Name_Map name_map_S18051C2[] = {
  NSPAIR(_ZN8S18051C2C1Ev),
  NSPAIR(_ZN8S18051C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18051C2[];
extern void _ZN8S18051C2D1Ev();
extern void _ZN8S18051C2D0Ev();
static  VTBL_ENTRY vtc_S18051C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18051C2[0]),
  (VTBL_ENTRY)&_ZN8S18051C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18051C2D0Ev,
};
extern VTBL_ENTRY _ZTI8S18051C2[];
extern  VTBL_ENTRY _ZTV8S18051C2[];
Class_Descriptor cd_S18051C2 = {  "S18051C2", // class name
  0,0,//no base classes
  &(vtc_S18051C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI8S18051C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18051C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18051C1  {
  void *s18051c1f0[2];
  ::S18051C2 s18051c1f1;
  void  mf18051c1(); // _ZN8S18051C19mf18051c1Ev
};
//SIG(1 S18051C1) C1{ m Fp[2] FC2{ vd m FC3{ m FC4{ m FL}} Fi[2]}}


void  S18051C1 ::mf18051c1(){}

static void Test_S18051C1()
{
  {
    init_simple_test("S18051C1");
    S18051C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S18051C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18051C1)");
    check_field_offset(lv, s18051c1f0, 0, "S18051C1.s18051c1f0");
    check_field_offset(lv, s18051c1f1, ABISELECT(16,8), "S18051C1.s18051c1f1");
  }
}
static Arrange_To_Call_Me vS18051C1(Test_S18051C1, "S18051C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5504C2_nt  {
  int s5504c2f0;
  void *s5504c2f1[7];
  short s5504c2f2;
  char s5504c2f3[10];
};
//SIG(-1 S5504C2_nt) C1{ Fi Fp[7] Fs Fc[10]}



//skip512 S5504C2_nt

#else // __cplusplus

Class_Descriptor cd_S5504C2_nt = {  "S5504C2_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(80,44), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5504C1  : S5504C2_nt {
  ::S16963C3 s5504c1f0;
};
//SIG(1 S5504C1) C1{ BC2{ Fi Fp[7] Fs Fc[10]} FC3{ BC4{ m} Fp[2]}}



static void Test_S5504C1()
{
  extern Class_Descriptor cd_S5504C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S5504C1, buf);
    S5504C1 &lv = *(new (buf) S5504C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S5504C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5504C1)");
    check_base_class_offset(lv, (S5504C2_nt*), 0, "S5504C1");
    check_field_offset(lv, s5504c1f0, ABISELECT(80,44), "S5504C1.s5504c1f0");
    test_class_info(&lv, &cd_S5504C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5504C1(Test_S5504C1, "S5504C1", ABISELECT(96,52));

#else // __cplusplus

extern Class_Descriptor cd_S5504C2_nt;
static Base_Class bases_S5504C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5504C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5504C1 = {  "S5504C1", // class name
  bases_S5504C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(96,52), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12365C1  {
  int s12365c1f0;
  ::S11277C5 s12365c1f1;
};
//SIG(1 S12365C1) C1{ Fi FC2{ Fc[5] FC3{ Fi} FC4{ FL} Fc[817] Fi}}



static void Test_S12365C1()
{
  {
    init_simple_test("S12365C1");
    S12365C1 lv;
    check2(sizeof(lv), ABISELECT(856,848), "sizeof(S12365C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12365C1)");
    check_field_offset(lv, s12365c1f0, 0, "S12365C1.s12365c1f0");
    check_field_offset(lv, s12365c1f1, ABISELECT(8,4), "S12365C1.s12365c1f1");
  }
}
static Arrange_To_Call_Me vS12365C1(Test_S12365C1, "S12365C1", ABISELECT(856,848));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12364C1  {
  int s12364c1f0;
  ::S11276C5 s12364c1f1;
};
//SIG(1 S12364C1) C1{ Fi FC2{ Fc[5] FC3{ Fi} FC4{ Fl} Fc[817] Fi}}



static void Test_S12364C1()
{
  {
    init_simple_test("S12364C1");
    S12364C1 lv;
    check2(sizeof(lv), ABISELECT(856,844), "sizeof(S12364C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12364C1)");
    check_field_offset(lv, s12364c1f0, 0, "S12364C1.s12364c1f0");
    check_field_offset(lv, s12364c1f1, ABISELECT(8,4), "S12364C1.s12364c1f1");
  }
}
static Arrange_To_Call_Me vS12364C1(Test_S12364C1, "S12364C1", ABISELECT(856,844));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16363C1  {
  ::S10275C6_nt s16363c1f0;
  ::S16963C3 s16363c1f1;
  void *s16363c1f2;
  int s16363c1f3[2];
  void  mf16363c1(); // _ZN8S16363C19mf16363c1Ev
};
//SIG(1 S16363C1) C1{ m FC2{ m Fp[2]} FC3{ BC4{ m} Fp[2]} Fp Fi[2]}


void  S16363C1 ::mf16363c1(){}

static void Test_S16363C1()
{
  {
    init_simple_test("S16363C1");
    S16363C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S16363C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16363C1)");
    check_field_offset(lv, s16363c1f0, 0, "S16363C1.s16363c1f0");
    check_field_offset(lv, s16363c1f1, ABISELECT(16,8), "S16363C1.s16363c1f1");
    check_field_offset(lv, s16363c1f2, ABISELECT(32,16), "S16363C1.s16363c1f2");
    check_field_offset(lv, s16363c1f3, ABISELECT(40,20), "S16363C1.s16363c1f3");
  }
}
static Arrange_To_Call_Me vS16363C1(Test_S16363C1, "S16363C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5824C3  : S16113C2_nt {
  int s5824c3f0;
};
//SIG(-1 S5824C3) C1{ BC2{ m Fi} Fi}



static void Test_S5824C3()
{
  extern Class_Descriptor cd_S5824C3;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S5824C3, buf);
    S5824C3 &lv = *(new (buf) S5824C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S5824C3)");
    check2(__alignof__(lv), 4, "__alignof__(S5824C3)");
    check_base_class_offset(lv, (S16113C2_nt*), 0, "S5824C3");
    check_field_offset(lv, s5824c3f0, 4, "S5824C3.s5824c3f0");
    test_class_info(&lv, &cd_S5824C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5824C3(Test_S5824C3, "S5824C3", 8);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
static Base_Class bases_S5824C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5824C3 = {  "S5824C3", // class name
  bases_S5824C3, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5824C4  : S16113C2_nt {
  int s5824c4f0;
};
//SIG(-1 S5824C4) C1{ BC2{ m Fi} Fi}



static void Test_S5824C4()
{
  extern Class_Descriptor cd_S5824C4;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S5824C4, buf);
    S5824C4 &lv = *(new (buf) S5824C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S5824C4)");
    check2(__alignof__(lv), 4, "__alignof__(S5824C4)");
    check_base_class_offset(lv, (S16113C2_nt*), 0, "S5824C4");
    check_field_offset(lv, s5824c4f0, 4, "S5824C4.s5824c4f0");
    test_class_info(&lv, &cd_S5824C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5824C4(Test_S5824C4, "S5824C4", 8);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
static Base_Class bases_S5824C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5824C4 = {  "S5824C4", // class name
  bases_S5824C4, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5824C1  : S16113C2_nt , S5824C3 , S5824C4 {
  int s5824c1f0[2];
};
//SIG(1 S5824C1) C1{ BC2{ m Fi} BC3{ BC2 Fi} BC4{ BC2 Fi} Fi[2]}



static void Test_S5824C1()
{
  extern Class_Descriptor cd_S5824C1;
  void *lvp;
  {
    int buf[8];
    init_test(&cd_S5824C1, buf);
    S5824C1 &lv = *(new (buf) S5824C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 28, "sizeof(S5824C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5824C1)");
    /*is_ambiguous_... S5824C1::S16113C2_nt */ AMB_check_base_class_offset(lv, (S16113C2_nt*), 0, "S5824C1");
    check_base_class_offset(lv, (S16113C2_nt*)(S5824C3*), 4, "S5824C1");
    check_base_class_offset(lv, (S5824C3*), 4, "S5824C1");
    check_base_class_offset(lv, (S16113C2_nt*)(S5824C4*), 12, "S5824C1");
    check_base_class_offset(lv, (S5824C4*), 12, "S5824C1");
    check_field_offset(lv, s5824c1f0, 20, "S5824C1.s5824c1f0");
    test_class_info(&lv, &cd_S5824C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5824C1(Test_S5824C1, "S5824C1", 28);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S5824C3;
extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S5824C4;
static Base_Class bases_S5824C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S16113C2_nt,    4, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S5824C3,    4, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S16113C2_nt,    12, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S5824C4,    12, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5824C1 = {  "S5824C1", // class name
  bases_S5824C1, 5,
  0, // no vftv
  0, //no vtt
  28, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7424C2_nt  : virtual S16113C2_nt {
  ~S7424C2_nt(); // tgen
  S7424C2_nt(); // tgen
};
//SIG(-1 S7424C2_nt) C1{ VBC2{ m Fi}}


S7424C2_nt ::~S7424C2_nt(){ note_dtor("S7424C2_nt", this);} // tgen
S7424C2_nt ::S7424C2_nt(){ note_ctor("S7424C2_nt", this);} // tgen

//skip512 S7424C2_nt

#else // __cplusplus

extern void _ZN10S7424C2_ntC1Ev();
extern void _ZN10S7424C2_ntD1Ev();
Name_Map name_map_S7424C2_nt[] = {
  NSPAIR(_ZN10S7424C2_ntC1Ev),
  NSPAIR(_ZN10S7424C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
static Base_Class bases_S7424C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI10S7424C2_nt[];
static  VTBL_ENTRY vtc_S7424C2_nt[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI10S7424C2_nt[0]),
};
extern VTBL_ENTRY _ZTV10S7424C2_nt[];
static  VTT_ENTRY vtt_S7424C2_nt[] = {
  {&(_ZTV10S7424C2_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI10S7424C2_nt[];
VTBL_ENTRY *P__ZTI10S7424C2_nt = _ZTI10S7424C2_nt; 
extern  VTBL_ENTRY _ZTV10S7424C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7424C2_nt[];
Class_Descriptor cd_S7424C2_nt = {  "S7424C2_nt", // class name
  bases_S7424C2_nt, 1,
  &(vtc_S7424C2_nt[0]), // expected_vtbl_contents
  &(vtt_S7424C2_nt[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S7424C2_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV10S7424C2_nt),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S7424C2_nt),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7424C4  : virtual S16113C2_nt {
  ~S7424C4(); // tgen
  S7424C4(); // tgen
};
//SIG(-1 S7424C4) C1{ VBC2{ m Fi}}


S7424C4 ::~S7424C4(){ note_dtor("S7424C4", this);} // tgen
S7424C4 ::S7424C4(){ note_ctor("S7424C4", this);} // tgen

static void Test_S7424C4()
{
  extern Class_Descriptor cd_S7424C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7424C4, buf);
    S7424C4 *dp, &lv = *(dp=new (buf) S7424C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7424C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7424C4)");
    check_base_class_offset(lv, (S16113C2_nt*), ABISELECT(8,4), "S7424C4");
    test_class_info(&lv, &cd_S7424C4);
    dp->~S7424C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7424C4(Test_S7424C4, "S7424C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7424C4C1Ev();
extern void _ZN7S7424C4D1Ev();
Name_Map name_map_S7424C4[] = {
  NSPAIR(_ZN7S7424C4C1Ev),
  NSPAIR(_ZN7S7424C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
static Base_Class bases_S7424C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7424C4[];
static  VTBL_ENTRY vtc_S7424C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7424C4[0]),
};
extern VTBL_ENTRY _ZTV7S7424C4[];
static  VTT_ENTRY vtt_S7424C4[] = {
  {&(_ZTV7S7424C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7424C4[];
extern  VTBL_ENTRY _ZTV7S7424C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7424C4[];
Class_Descriptor cd_S7424C4 = {  "S7424C4", // class name
  bases_S7424C4, 1,
  &(vtc_S7424C4[0]), // expected_vtbl_contents
  &(vtt_S7424C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7424C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7424C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7424C4),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7424C5  : S16113C2_nt {
  int s7424c5f0;
};
//SIG(-1 S7424C5) C1{ BC2{ m Fi} Fi}



static void Test_S7424C5()
{
  extern Class_Descriptor cd_S7424C5;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S7424C5, buf);
    S7424C5 &lv = *(new (buf) S7424C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S7424C5)");
    check2(__alignof__(lv), 4, "__alignof__(S7424C5)");
    check_base_class_offset(lv, (S16113C2_nt*), 0, "S7424C5");
    check_field_offset(lv, s7424c5f0, 4, "S7424C5.s7424c5f0");
    test_class_info(&lv, &cd_S7424C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7424C5(Test_S7424C5, "S7424C5", 8);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
static Base_Class bases_S7424C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7424C5[];
Class_Descriptor cd_S7424C5 = {  "S7424C5", // class name
  bases_S7424C5, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  NSPAIRA(_ZTI7S7424C5),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7424C1  : S7424C2_nt , S7424C4 , S7424C5 {
  ~S7424C1(); // tgen
  S7424C1(); // tgen
};
//SIG(1 S7424C1) C1{ BC2{ VBC3{ m Fi}} BC4{ VBC3} BC5{ BC3 Fi}}


S7424C1 ::~S7424C1(){ note_dtor("S7424C1", this);} // tgen
S7424C1 ::S7424C1(){ note_ctor("S7424C1", this);} // tgen

static void Test_S7424C1()
{
  extern Class_Descriptor cd_S7424C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7424C1, buf);
    S7424C1 *dp, &lv = *(dp=new (buf) S7424C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7424C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7424C1)");
    check_base_class_offset(lv, (S16113C2_nt*)(S7424C2_nt*), ABISELECT(24,16), "S7424C1");
    check_base_class_offset(lv, (S16113C2_nt*)(S7424C4*), ABISELECT(24,16), "S7424C1");
    check_base_class_offset(lv, (S7424C2_nt*), 0, "S7424C1");
    check_base_class_offset(lv, (S7424C4*), ABISELECT(8,4), "S7424C1");
    check_base_class_offset(lv, (S16113C2_nt*)(S7424C5*), ABISELECT(16,8), "S7424C1");
    check_base_class_offset(lv, (S7424C5*), ABISELECT(16,8), "S7424C1");
    test_class_info(&lv, &cd_S7424C1);
    dp->~S7424C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7424C1(Test_S7424C1, "S7424C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S7424C1C1Ev();
extern void _ZN7S7424C1D1Ev();
Name_Map name_map_S7424C1[] = {
  NSPAIR(_ZN7S7424C1C1Ev),
  NSPAIR(_ZN7S7424C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S7424C2_nt;
extern VTBL_ENTRY _ZTI10S7424C2_nt[];
extern  VTBL_ENTRY _ZTV10S7424C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7424C2_nt[];
extern Class_Descriptor cd_S7424C4;
extern VTBL_ENTRY _ZTI7S7424C4[];
extern  VTBL_ENTRY _ZTV7S7424C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7424C4[];
extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S7424C5;
extern VTBL_ENTRY _ZTI7S7424C5[];
static Base_Class bases_S7424C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7424C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7424C4,    ABISELECT(8,4), //bcp->offset
    3, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S16113C2_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7424C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7424C1[];
static  VTBL_ENTRY vtc_S7424C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7424C1[0]),
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7424C1[0]),
};
extern VTBL_ENTRY _ZTV7S7424C1[];
static  VTBL_ENTRY _tg__ZTV10S7424C2_nt__7S7424C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI10S7424C2_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7424C4__7S7424C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7424C4[0]),
};
static  VTT_ENTRY vtt_S7424C1[] = {
  {&(_ZTV7S7424C1[3]),  3,6},
  {&(_tg__ZTV10S7424C2_nt__7S7424C1[3]),  3,3},
  {&(_tg__ZTV7S7424C4__7S7424C1[3]),  3,3},
  {&(_ZTV7S7424C1[6]),  6,6},
};
extern VTBL_ENTRY _ZTI7S7424C1[];
extern  VTBL_ENTRY _ZTV7S7424C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7424C1[];
Class_Descriptor cd_S7424C1 = {  "S7424C1", // class name
  bases_S7424C1, 5,
  &(vtc_S7424C1[0]), // expected_vtbl_contents
  &(vtt_S7424C1[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S7424C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7424C1),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7424C1),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12038C1  {
  ::S9588C4_nt s12038c1f0;
  char s12038c1f1;
  ::S16750C6_nt s12038c1f2;
};
//SIG(1 S12038C1) C1{ FC2{ m Fi[2]} Fc FC3{ BC4{ m Fp Fi[2]}}}



static void Test_S12038C1()
{
  {
    init_simple_test("S12038C1");
    S12038C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S12038C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12038C1)");
    check_field_offset(lv, s12038c1f0, 0, "S12038C1.s12038c1f0");
    check_field_offset(lv, s12038c1f1, 8, "S12038C1.s12038c1f1");
    check_field_offset(lv, s12038c1f2, ABISELECT(16,12), "S12038C1.s12038c1f2");
  }
}
static Arrange_To_Call_Me vS12038C1(Test_S12038C1, "S12038C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17694C1  {
  void *s17694c1f0;
  int s17694c1f1;
  char s17694c1f2[4];
  __tsi64 s17694c1f3;
  int s17694c1f4[2];
  void *s17694c1f5;
  int s17694c1f6;
  void *s17694c1f7;
  char s17694c1f8;
  void  mf17694c1(); // _ZN8S17694C19mf17694c1Ev
};
//SIG(1 S17694C1) C1{ m Fp Fi Fc[4] FL Fi[2] Fp Fi Fp Fc}


void  S17694C1 ::mf17694c1(){}

static void Test_S17694C1()
{
  {
    init_simple_test("S17694C1");
    S17694C1 lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S17694C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17694C1)");
    check_field_offset(lv, s17694c1f0, 0, "S17694C1.s17694c1f0");
    check_field_offset(lv, s17694c1f1, ABISELECT(8,4), "S17694C1.s17694c1f1");
    check_field_offset(lv, s17694c1f2, ABISELECT(12,8), "S17694C1.s17694c1f2");
    check_field_offset(lv, s17694c1f3, ABISELECT(16,12), "S17694C1.s17694c1f3");
    check_field_offset(lv, s17694c1f4, ABISELECT(24,20), "S17694C1.s17694c1f4");
    check_field_offset(lv, s17694c1f5, ABISELECT(32,28), "S17694C1.s17694c1f5");
    check_field_offset(lv, s17694c1f6, ABISELECT(40,32), "S17694C1.s17694c1f6");
    check_field_offset(lv, s17694c1f7, ABISELECT(48,36), "S17694C1.s17694c1f7");
    check_field_offset(lv, s17694c1f8, ABISELECT(56,40), "S17694C1.s17694c1f8");
  }
}
static Arrange_To_Call_Me vS17694C1(Test_S17694C1, "S17694C1", ABISELECT(64,44));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2559C2  : S16113C2_nt {
  int s2559c2f0;
};
//SIG(-1 S2559C2) C1{ BC2{ m Fi} Fi}



static void Test_S2559C2()
{
  extern Class_Descriptor cd_S2559C2;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S2559C2, buf);
    S2559C2 &lv = *(new (buf) S2559C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S2559C2)");
    check2(__alignof__(lv), 4, "__alignof__(S2559C2)");
    check_base_class_offset(lv, (S16113C2_nt*), 0, "S2559C2");
    check_field_offset(lv, s2559c2f0, 4, "S2559C2.s2559c2f0");
    test_class_info(&lv, &cd_S2559C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2559C2(Test_S2559C2, "S2559C2", 8);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
static Base_Class bases_S2559C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2559C2 = {  "S2559C2", // class name
  bases_S2559C2, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2559C4  : S969C7 {
  int s2559c4f0;
};
//SIG(-1 S2559C4) C1{ BC2{ m Fi} Fi}



static void Test_S2559C4()
{
  extern Class_Descriptor cd_S2559C4;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S2559C4, buf);
    S2559C4 &lv = *(new (buf) S2559C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S2559C4)");
    check2(__alignof__(lv), 4, "__alignof__(S2559C4)");
    check_base_class_offset(lv, (S969C7*), 0, "S2559C4");
    check_field_offset(lv, s2559c4f0, 4, "S2559C4.s2559c4f0");
    test_class_info(&lv, &cd_S2559C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2559C4(Test_S2559C4, "S2559C4", 8);

#else // __cplusplus

extern Class_Descriptor cd_S969C7;
static Base_Class bases_S2559C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S969C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2559C4 = {  "S2559C4", // class name
  bases_S2559C4, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2559C1  : S2559C2 , S2559C4 {
  int s2559c1f0;
};
//SIG(1 S2559C1) C1{ BC2{ BC3{ m Fi} Fi} BC4{ BC5{ m Fi} Fi} Fi}



static void Test_S2559C1()
{
  extern Class_Descriptor cd_S2559C1;
  void *lvp;
  {
    int buf[6];
    init_test(&cd_S2559C1, buf);
    S2559C1 &lv = *(new (buf) S2559C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 20, "sizeof(S2559C1)");
    check2(__alignof__(lv), 4, "__alignof__(S2559C1)");
    check_base_class_offset(lv, (S16113C2_nt*)(S2559C2*), 0, "S2559C1");
    check_base_class_offset(lv, (S2559C2*), 0, "S2559C1");
    check_base_class_offset(lv, (S969C7*)(S2559C4*), 8, "S2559C1");
    check_base_class_offset(lv, (S2559C4*), 8, "S2559C1");
    check_field_offset(lv, s2559c1f0, 16, "S2559C1.s2559c1f0");
    test_class_info(&lv, &cd_S2559C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2559C1(Test_S2559C1, "S2559C1", 20);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S2559C2;
extern Class_Descriptor cd_S969C7;
extern Class_Descriptor cd_S2559C4;
static Base_Class bases_S2559C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2559C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S969C7,    8, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2559C4,    8, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2559C1 = {  "S2559C1", // class name
  bases_S2559C1, 4,
  0, // no vftv
  0, //no vtt
  20, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17075C1  {
  int s17075c1f0[2];
  ::S16750C5_nt s17075c1f1;
  void  mf17075c1(); // _ZN8S17075C19mf17075c1Ev
};
//SIG(1 S17075C1) C1{ m Fi[2] FC2{ BC3{ BC4{ m Fp Fi[2]}}}}


void  S17075C1 ::mf17075c1(){}

static void Test_S17075C1()
{
  {
    init_simple_test("S17075C1");
    S17075C1 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S17075C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17075C1)");
    check_field_offset(lv, s17075c1f0, 0, "S17075C1.s17075c1f0");
    check_field_offset(lv, s17075c1f1, 8, "S17075C1.s17075c1f1");
  }
}
static Arrange_To_Call_Me vS17075C1(Test_S17075C1, "S17075C1", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11527C2  {
  int s11527c2f0[2];
  char s11527c2f1[136];
  int s11527c2f2;
  char s11527c2f3[272];
};
//SIG(1 S11527C2) C1{ Fi[2] Fc[136] Fi Fc[272]}



static void Test_S11527C2()
{
  {
    init_simple_test("S11527C2");
    S11527C2 lv;
    check2(sizeof(lv), 420, "sizeof(S11527C2)");
    check2(__alignof__(lv), 4, "__alignof__(S11527C2)");
    check_field_offset(lv, s11527c2f0, 0, "S11527C2.s11527c2f0");
    check_field_offset(lv, s11527c2f1, 8, "S11527C2.s11527c2f1");
    check_field_offset(lv, s11527c2f2, 144, "S11527C2.s11527c2f2");
    check_field_offset(lv, s11527c2f3, 148, "S11527C2.s11527c2f3");
  }
}
static Arrange_To_Call_Me vS11527C2(Test_S11527C2, "S11527C2", 420);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11527C1  {
  ::S11527C2 s11527c1f0[6];
};
//SIG(1 S11527C1) C1{ FC2{ Fi[2] Fc[136] Fi Fc[272]}[6]}



static void Test_S11527C1()
{
  {
    init_simple_test("S11527C1");
    S11527C1 lv;
    check2(sizeof(lv), 2520, "sizeof(S11527C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11527C1)");
    check_field_offset(lv, s11527c1f0, 0, "S11527C1.s11527c1f0");
  }
}
static Arrange_To_Call_Me vS11527C1(Test_S11527C1, "S11527C1", 2520);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15129C1  {
  char s15129c1f0;
  void *s15129c1f1;
  int s15129c1f2;
  void *s15129c1f3[2];
  ::S7909C8_nt s15129c1f4;
  void *s15129c1f5[3];
  void  mf15129c1(); // _ZN8S15129C19mf15129c1Ev
};
//SIG(1 S15129C1) C1{ m Fc Fp Fi Fp[2] FC2{ Fl[4]} Fp[3]}


void  S15129C1 ::mf15129c1(){}

static void Test_S15129C1()
{
  {
    init_simple_test("S15129C1");
    S15129C1 lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S15129C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15129C1)");
    check_field_offset(lv, s15129c1f0, 0, "S15129C1.s15129c1f0");
    check_field_offset(lv, s15129c1f1, ABISELECT(8,4), "S15129C1.s15129c1f1");
    check_field_offset(lv, s15129c1f2, ABISELECT(16,8), "S15129C1.s15129c1f2");
    check_field_offset(lv, s15129c1f3, ABISELECT(24,12), "S15129C1.s15129c1f3");
    check_field_offset(lv, s15129c1f4, ABISELECT(40,20), "S15129C1.s15129c1f4");
    check_field_offset(lv, s15129c1f5, ABISELECT(72,36), "S15129C1.s15129c1f5");
  }
}
static Arrange_To_Call_Me vS15129C1(Test_S15129C1, "S15129C1", ABISELECT(96,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11417C2_nt  {
  int s11417c2f0;
  void *s11417c2f1[3];
  int s11417c2f2;
  void *s11417c2f3;
  int s11417c2f4[17];
};
//SIG(-1 S11417C2_nt) C1{ Fi Fp[3] Fi Fp Fi[17]}



//skip512 S11417C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11417C1  {
  ::S11417C2_nt s11417c1f0;
  int s11417c1f1[8];
};
//SIG(1 S11417C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fi[8]}



static void Test_S11417C1()
{
  {
    init_simple_test("S11417C1");
    S11417C1 lv;
    check2(sizeof(lv), ABISELECT(152,124), "sizeof(S11417C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11417C1)");
    check_field_offset(lv, s11417c1f0, 0, "S11417C1.s11417c1f0");
    check_field_offset(lv, s11417c1f1, ABISELECT(120,92), "S11417C1.s11417c1f1");
  }
}
static Arrange_To_Call_Me vS11417C1(Test_S11417C1, "S11417C1", ABISELECT(152,124));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2560C2  : S16113C2_nt {
  int s2560c2f0;
};
//SIG(-1 S2560C2) C1{ BC2{ m Fi} Fi}



static void Test_S2560C2()
{
  extern Class_Descriptor cd_S2560C2;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S2560C2, buf);
    S2560C2 &lv = *(new (buf) S2560C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S2560C2)");
    check2(__alignof__(lv), 4, "__alignof__(S2560C2)");
    check_base_class_offset(lv, (S16113C2_nt*), 0, "S2560C2");
    check_field_offset(lv, s2560c2f0, 4, "S2560C2.s2560c2f0");
    test_class_info(&lv, &cd_S2560C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2560C2(Test_S2560C2, "S2560C2", 8);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
static Base_Class bases_S2560C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2560C2 = {  "S2560C2", // class name
  bases_S2560C2, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2560C1  : S2560C2 , S969C7 {
  int s2560c1f0[4];
};
//SIG(1 S2560C1) C1{ BC2{ BC3{ m Fi} Fi} BC4{ m Fi} Fi[4]}



static void Test_S2560C1()
{
  extern Class_Descriptor cd_S2560C1;
  void *lvp;
  {
    int buf[8];
    init_test(&cd_S2560C1, buf);
    S2560C1 &lv = *(new (buf) S2560C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 28, "sizeof(S2560C1)");
    check2(__alignof__(lv), 4, "__alignof__(S2560C1)");
    check_base_class_offset(lv, (S16113C2_nt*)(S2560C2*), 0, "S2560C1");
    check_base_class_offset(lv, (S2560C2*), 0, "S2560C1");
    check_base_class_offset(lv, (S969C7*), 8, "S2560C1");
    check_field_offset(lv, s2560c1f0, 12, "S2560C1.s2560c1f0");
    test_class_info(&lv, &cd_S2560C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2560C1(Test_S2560C1, "S2560C1", 28);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S2560C2;
extern Class_Descriptor cd_S969C7;
static Base_Class bases_S2560C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2560C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S969C7,    8, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2560C1 = {  "S2560C1", // class name
  bases_S2560C1, 3,
  0, // no vftv
  0, //no vtt
  28, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16958C1  {
  int s16958c1f0;
  void *s16958c1f1[2];
  ::S15150C2_nt s16958c1f2;
  ::S15150C2_nt s16958c1f3;
  void  mf16958c1(); // _ZN8S16958C19mf16958c1Ev
};
//SIG(1 S16958C1) C1{ m Fi Fp[2] FC2{ m FC3{ m Fp}} FC2}


void  S16958C1 ::mf16958c1(){}

static void Test_S16958C1()
{
  {
    init_simple_test("S16958C1");
    S16958C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S16958C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16958C1)");
    check_field_offset(lv, s16958c1f0, 0, "S16958C1.s16958c1f0");
    check_field_offset(lv, s16958c1f1, ABISELECT(8,4), "S16958C1.s16958c1f1");
    check_field_offset(lv, s16958c1f2, ABISELECT(24,12), "S16958C1.s16958c1f2");
    check_field_offset(lv, s16958c1f3, ABISELECT(32,16), "S16958C1.s16958c1f3");
  }
}
static Arrange_To_Call_Me vS16958C1(Test_S16958C1, "S16958C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12689C1  {
  int s12689c1f0;
  void *s12689c1f1;
  int s12689c1f2;
  void *s12689c1f3[2];
  int s12689c1f4;
  void *s12689c1f5;
  int s12689c1f6[2];
  __tsi64 s12689c1f7;
};
//SIG(1 S12689C1) C1{ Fi Fp Fi Fp[2] Fi Fp Fi[2] FL}



static void Test_S12689C1()
{
  {
    init_simple_test("S12689C1");
    S12689C1 lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S12689C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12689C1)");
    check_field_offset(lv, s12689c1f0, 0, "S12689C1.s12689c1f0");
    check_field_offset(lv, s12689c1f1, ABISELECT(8,4), "S12689C1.s12689c1f1");
    check_field_offset(lv, s12689c1f2, ABISELECT(16,8), "S12689C1.s12689c1f2");
    check_field_offset(lv, s12689c1f3, ABISELECT(24,12), "S12689C1.s12689c1f3");
    check_field_offset(lv, s12689c1f4, ABISELECT(40,20), "S12689C1.s12689c1f4");
    check_field_offset(lv, s12689c1f5, ABISELECT(48,24), "S12689C1.s12689c1f5");
    check_field_offset(lv, s12689c1f6, ABISELECT(56,28), "S12689C1.s12689c1f6");
    check_field_offset(lv, s12689c1f7, ABISELECT(64,36), "S12689C1.s12689c1f7");
  }
}
static Arrange_To_Call_Me vS12689C1(Test_S12689C1, "S12689C1", ABISELECT(72,44));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2558C2  : S16113C2_nt {
  int s2558c2f0;
};
//SIG(-1 S2558C2) C1{ BC2{ m Fi} Fi}



static void Test_S2558C2()
{
  extern Class_Descriptor cd_S2558C2;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S2558C2, buf);
    S2558C2 &lv = *(new (buf) S2558C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S2558C2)");
    check2(__alignof__(lv), 4, "__alignof__(S2558C2)");
    check_base_class_offset(lv, (S16113C2_nt*), 0, "S2558C2");
    check_field_offset(lv, s2558c2f0, 4, "S2558C2.s2558c2f0");
    test_class_info(&lv, &cd_S2558C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2558C2(Test_S2558C2, "S2558C2", 8);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
static Base_Class bases_S2558C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2558C2 = {  "S2558C2", // class name
  bases_S2558C2, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2558C4  : S16113C2_nt {
  int s2558c4f0;
};
//SIG(-1 S2558C4) C1{ BC2{ m Fi} Fi}



static void Test_S2558C4()
{
  extern Class_Descriptor cd_S2558C4;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S2558C4, buf);
    S2558C4 &lv = *(new (buf) S2558C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S2558C4)");
    check2(__alignof__(lv), 4, "__alignof__(S2558C4)");
    check_base_class_offset(lv, (S16113C2_nt*), 0, "S2558C4");
    check_field_offset(lv, s2558c4f0, 4, "S2558C4.s2558c4f0");
    test_class_info(&lv, &cd_S2558C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2558C4(Test_S2558C4, "S2558C4", 8);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
static Base_Class bases_S2558C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2558C4 = {  "S2558C4", // class name
  bases_S2558C4, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2558C1  : S2558C2 , S2558C4 {
  int s2558c1f0;
};
//SIG(1 S2558C1) C1{ BC2{ BC3{ m Fi} Fi} BC4{ BC3 Fi} Fi}



static void Test_S2558C1()
{
  extern Class_Descriptor cd_S2558C1;
  void *lvp;
  {
    int buf[6];
    init_test(&cd_S2558C1, buf);
    S2558C1 &lv = *(new (buf) S2558C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 20, "sizeof(S2558C1)");
    check2(__alignof__(lv), 4, "__alignof__(S2558C1)");
    check_base_class_offset(lv, (S16113C2_nt*)(S2558C2*), 0, "S2558C1");
    check_base_class_offset(lv, (S2558C2*), 0, "S2558C1");
    check_base_class_offset(lv, (S16113C2_nt*)(S2558C4*), 8, "S2558C1");
    check_base_class_offset(lv, (S2558C4*), 8, "S2558C1");
    check_field_offset(lv, s2558c1f0, 16, "S2558C1.s2558c1f0");
    test_class_info(&lv, &cd_S2558C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2558C1(Test_S2558C1, "S2558C1", 20);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S2558C2;
extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S2558C4;
static Base_Class bases_S2558C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2558C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S16113C2_nt,    8, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2558C4,    8, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2558C1 = {  "S2558C1", // class name
  bases_S2558C1, 4,
  0, // no vftv
  0, //no vtt
  20, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17511C1  {
  void *s17511c1f0;
  ::S16963C3 s17511c1f1;
  void *s17511c1f2;
  int s17511c1f3[2];
  void  mf17511c1(); // _ZN8S17511C19mf17511c1Ev
};
//SIG(1 S17511C1) C1{ m Fp FC2{ BC3{ m} Fp[2]} Fp Fi[2]}


void  S17511C1 ::mf17511c1(){}

static void Test_S17511C1()
{
  {
    init_simple_test("S17511C1");
    S17511C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S17511C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17511C1)");
    check_field_offset(lv, s17511c1f0, 0, "S17511C1.s17511c1f0");
    check_field_offset(lv, s17511c1f1, ABISELECT(8,4), "S17511C1.s17511c1f1");
    check_field_offset(lv, s17511c1f2, ABISELECT(24,12), "S17511C1.s17511c1f2");
    check_field_offset(lv, s17511c1f3, ABISELECT(32,16), "S17511C1.s17511c1f3");
  }
}
static Arrange_To_Call_Me vS17511C1(Test_S17511C1, "S17511C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17880C1  {
  void *s17880c1f0[2];
  ::S16750C6_nt s17880c1f1;
  void  mf17880c1(); // _ZN8S17880C19mf17880c1Ev
};
//SIG(1 S17880C1) C1{ m Fp[2] FC2{ BC3{ m Fp Fi[2]}}}


void  S17880C1 ::mf17880c1(){}

static void Test_S17880C1()
{
  {
    init_simple_test("S17880C1");
    S17880C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S17880C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17880C1)");
    check_field_offset(lv, s17880c1f0, 0, "S17880C1.s17880c1f0");
    check_field_offset(lv, s17880c1f1, ABISELECT(16,8), "S17880C1.s17880c1f1");
  }
}
static Arrange_To_Call_Me vS17880C1(Test_S17880C1, "S17880C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13605C1  {
  int s13605c1f0[7];
  long s13605c1f1;
  int s13605c1f2[11];
  long s13605c1f3[2];
  int s13605c1f4[2];
};
//SIG(1 S13605C1) C1{ Fi[7] Fl Fi[11] Fl[2] Fi[2]}



static void Test_S13605C1()
{
  {
    init_simple_test("S13605C1");
    S13605C1 lv;
    check2(sizeof(lv), ABISELECT(112,92), "sizeof(S13605C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13605C1)");
    check_field_offset(lv, s13605c1f0, 0, "S13605C1.s13605c1f0");
    check_field_offset(lv, s13605c1f1, ABISELECT(32,28), "S13605C1.s13605c1f1");
    check_field_offset(lv, s13605c1f2, ABISELECT(40,32), "S13605C1.s13605c1f2");
    check_field_offset(lv, s13605c1f3, ABISELECT(88,76), "S13605C1.s13605c1f3");
    check_field_offset(lv, s13605c1f4, ABISELECT(104,84), "S13605C1.s13605c1f4");
  }
}
static Arrange_To_Call_Me vS13605C1(Test_S13605C1, "S13605C1", ABISELECT(112,92));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8824C2_nt  {
  void *s8824c2f0[2];
  virtual  ~S8824C2_nt(); // _ZN10S8824C2_ntD1Ev
  virtual void  v2(); // _ZN10S8824C2_nt2v2Ev
  S8824C2_nt(); // tgen
};
//SIG(-1 S8824C2_nt) C1{ vd v1 Fp[2]}


 S8824C2_nt ::~S8824C2_nt(){ note_dtor("S8824C2_nt", this);}
void  S8824C2_nt ::v2(){vfunc_called(this, "_ZN10S8824C2_nt2v2Ev");}
S8824C2_nt ::S8824C2_nt(){ note_ctor("S8824C2_nt", this);} // tgen

//skip512 S8824C2_nt

#else // __cplusplus

extern void _ZN10S8824C2_ntC1Ev();
extern void _ZN10S8824C2_ntD1Ev();
Name_Map name_map_S8824C2_nt[] = {
  NSPAIR(_ZN10S8824C2_ntC1Ev),
  NSPAIR(_ZN10S8824C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8824C2_nt[];
extern void _ZN10S8824C2_ntD1Ev();
extern void _ZN10S8824C2_ntD0Ev();
extern void _ZN10S8824C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S8824C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8824C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8824C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8824C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8824C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S8824C2_nt[];
VTBL_ENTRY *P__ZTI10S8824C2_nt = _ZTI10S8824C2_nt; 
extern  VTBL_ENTRY _ZTV10S8824C2_nt[];
Class_Descriptor cd_S8824C2_nt = {  "S8824C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8824C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S8824C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8824C2_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8824C1  : S8824C2_nt {
  void *s8824c1f0[3];
  virtual  ~S8824C1(); // _ZN7S8824C1D1Ev
  virtual void  v1(); // _ZN7S8824C12v1Ev
  S8824C1(); // tgen
};
//SIG(1 S8824C1) C1{ BC2{ vd v2 Fp[2]} vd v1 Fp[3]}


 S8824C1 ::~S8824C1(){ note_dtor("S8824C1", this);}
void  S8824C1 ::v1(){vfunc_called(this, "_ZN7S8824C12v1Ev");}
S8824C1 ::S8824C1(){ note_ctor("S8824C1", this);} // tgen

static void Test_S8824C1()
{
  extern Class_Descriptor cd_S8824C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S8824C1, buf);
    S8824C1 *dp, &lv = *(dp=new (buf) S8824C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S8824C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8824C1)");
    check_base_class_offset(lv, (S8824C2_nt*), 0, "S8824C1");
    check_field_offset(lv, s8824c1f0, ABISELECT(24,12), "S8824C1.s8824c1f0");
    test_class_info(&lv, &cd_S8824C1);
    dp->~S8824C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8824C1(Test_S8824C1, "S8824C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S8824C1C1Ev();
extern void _ZN7S8824C1D1Ev();
Name_Map name_map_S8824C1[] = {
  NSPAIR(_ZN7S8824C1C1Ev),
  NSPAIR(_ZN7S8824C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8824C2_nt;
extern VTBL_ENTRY _ZTI10S8824C2_nt[];
extern  VTBL_ENTRY _ZTV10S8824C2_nt[];
static Base_Class bases_S8824C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8824C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8824C1[];
extern void _ZN7S8824C1D1Ev();
extern void _ZN7S8824C1D0Ev();
extern void _ZN10S8824C2_nt2v2Ev();
extern void _ZN7S8824C12v1Ev();
static  VTBL_ENTRY vtc_S8824C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8824C1[0]),
  (VTBL_ENTRY)&_ZN7S8824C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8824C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8824C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S8824C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8824C1[];
extern  VTBL_ENTRY _ZTV7S8824C1[];
Class_Descriptor cd_S8824C1 = {  "S8824C1", // class name
  bases_S8824C1, 1,
  &(vtc_S8824C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S8824C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8824C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2561C2  : S16113C2_nt {
  int s2561c2f0;
};
//SIG(-1 S2561C2) C1{ BC2{ m Fi} Fi}



static void Test_S2561C2()
{
  extern Class_Descriptor cd_S2561C2;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S2561C2, buf);
    S2561C2 &lv = *(new (buf) S2561C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S2561C2)");
    check2(__alignof__(lv), 4, "__alignof__(S2561C2)");
    check_base_class_offset(lv, (S16113C2_nt*), 0, "S2561C2");
    check_field_offset(lv, s2561c2f0, 4, "S2561C2.s2561c2f0");
    test_class_info(&lv, &cd_S2561C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2561C2(Test_S2561C2, "S2561C2", 8);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
static Base_Class bases_S2561C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2561C2 = {  "S2561C2", // class name
  bases_S2561C2, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2561C1  : S2561C2 , S969C7 {
  int s2561c1f0;
};
//SIG(1 S2561C1) C1{ BC2{ BC3{ m Fi} Fi} BC4{ m Fi} Fi}



static void Test_S2561C1()
{
  extern Class_Descriptor cd_S2561C1;
  void *lvp;
  {
    int buf[5];
    init_test(&cd_S2561C1, buf);
    S2561C1 &lv = *(new (buf) S2561C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 16, "sizeof(S2561C1)");
    check2(__alignof__(lv), 4, "__alignof__(S2561C1)");
    check_base_class_offset(lv, (S16113C2_nt*)(S2561C2*), 0, "S2561C1");
    check_base_class_offset(lv, (S2561C2*), 0, "S2561C1");
    check_base_class_offset(lv, (S969C7*), 8, "S2561C1");
    check_field_offset(lv, s2561c1f0, 12, "S2561C1.s2561c1f0");
    test_class_info(&lv, &cd_S2561C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2561C1(Test_S2561C1, "S2561C1", 16);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S2561C2;
extern Class_Descriptor cd_S969C7;
static Base_Class bases_S2561C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2561C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S969C7,    8, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2561C1 = {  "S2561C1", // class name
  bases_S2561C1, 3,
  0, // no vftv
  0, //no vtt
  16, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18044C1  {
  void *s18044c1f0[2];
  ::S3593C21_nt s18044c1f1;
  ::S1865C15 s18044c1f2;
  void  mf18044c1(); // _ZN8S18044C19mf18044c1Ev
};
//SIG(1 S18044C1) C1{ m Fp[2] FC2{ m Fp} FC3{ m Fp}}


void  S18044C1 ::mf18044c1(){}

static void Test_S18044C1()
{
  {
    init_simple_test("S18044C1");
    S18044C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S18044C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18044C1)");
    check_field_offset(lv, s18044c1f0, 0, "S18044C1.s18044c1f0");
    check_field_offset(lv, s18044c1f1, ABISELECT(16,8), "S18044C1.s18044c1f1");
    check_field_offset(lv, s18044c1f2, ABISELECT(24,12), "S18044C1.s18044c1f2");
  }
}
static Arrange_To_Call_Me vS18044C1(Test_S18044C1, "S18044C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15564C2_nt  {
  int s15564c2f0[3];
};
//SIG(1 S15564C2_nt) C1{ Fi[3]}



//skip512 S15564C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15564C1  {
  ::S15564C2_nt s15564c1f0[16];
  void *s15564c1f1;
  int s15564c1f2[2];
  void  mf15564c1(); // _ZN8S15564C19mf15564c1Ev
};
//SIG(1 S15564C1) C1{ m FC2{ Fi[3]}[16] Fp Fi[2]}


void  S15564C1 ::mf15564c1(){}

static void Test_S15564C1()
{
  {
    init_simple_test("S15564C1");
    S15564C1 lv;
    check2(sizeof(lv), ABISELECT(208,204), "sizeof(S15564C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15564C1)");
    check_field_offset(lv, s15564c1f0, 0, "S15564C1.s15564c1f0");
    check_field_offset(lv, s15564c1f1, 192, "S15564C1.s15564c1f1");
    check_field_offset(lv, s15564c1f2, ABISELECT(200,196), "S15564C1.s15564c1f2");
  }
}
static Arrange_To_Call_Me vS15564C1(Test_S15564C1, "S15564C1", ABISELECT(208,204));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5825C3  : S16113C2_nt {
  int s5825c3f0;
};
//SIG(-1 S5825C3) C1{ BC2{ m Fi} Fi}



static void Test_S5825C3()
{
  extern Class_Descriptor cd_S5825C3;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S5825C3, buf);
    S5825C3 &lv = *(new (buf) S5825C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S5825C3)");
    check2(__alignof__(lv), 4, "__alignof__(S5825C3)");
    check_base_class_offset(lv, (S16113C2_nt*), 0, "S5825C3");
    check_field_offset(lv, s5825c3f0, 4, "S5825C3.s5825c3f0");
    test_class_info(&lv, &cd_S5825C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5825C3(Test_S5825C3, "S5825C3", 8);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
static Base_Class bases_S5825C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5825C3 = {  "S5825C3", // class name
  bases_S5825C3, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5825C1  : S16113C2_nt , S5825C3 {
  int s5825c1f0[2];
};
//SIG(1 S5825C1) C1{ BC2{ m Fi} BC3{ BC2 Fi} Fi[2]}



static void Test_S5825C1()
{
  extern Class_Descriptor cd_S5825C1;
  void *lvp;
  {
    int buf[6];
    init_test(&cd_S5825C1, buf);
    S5825C1 &lv = *(new (buf) S5825C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 20, "sizeof(S5825C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5825C1)");
    /*is_ambiguous_... S5825C1::S16113C2_nt */ AMB_check_base_class_offset(lv, (S16113C2_nt*), 0, "S5825C1");
    check_base_class_offset(lv, (S16113C2_nt*)(S5825C3*), 4, "S5825C1");
    check_base_class_offset(lv, (S5825C3*), 4, "S5825C1");
    check_field_offset(lv, s5825c1f0, 12, "S5825C1.s5825c1f0");
    test_class_info(&lv, &cd_S5825C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5825C1(Test_S5825C1, "S5825C1", 20);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S5825C3;
static Base_Class bases_S5825C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S16113C2_nt,    4, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S5825C3,    4, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5825C1 = {  "S5825C1", // class name
  bases_S5825C1, 3,
  0, // no vftv
  0, //no vtt
  20, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18713C1  {
  ::S20334C2 s18713c1f0;
  char s18713c1f1;
  virtual void  v1(); // _ZN8S18713C12v1Ev
  virtual void  v2(); // _ZN8S18713C12v2Ev
  virtual void  v3(); // _ZN8S18713C12v3Ev
  virtual void  v4(); // _ZN8S18713C12v4Ev
  virtual void  v5(); // _ZN8S18713C12v5Ev
  ~S18713C1(); // tgen
  S18713C1(); // tgen
};
//SIG(1 S18713C1) C1{ v1 v2 v3 v4 v5 FC2{ v6} Fc}


void  S18713C1 ::v1(){vfunc_called(this, "_ZN8S18713C12v1Ev");}
void  S18713C1 ::v2(){vfunc_called(this, "_ZN8S18713C12v2Ev");}
void  S18713C1 ::v3(){vfunc_called(this, "_ZN8S18713C12v3Ev");}
void  S18713C1 ::v4(){vfunc_called(this, "_ZN8S18713C12v4Ev");}
void  S18713C1 ::v5(){vfunc_called(this, "_ZN8S18713C12v5Ev");}
S18713C1 ::~S18713C1(){ note_dtor("S18713C1", this);} // tgen
S18713C1 ::S18713C1(){ note_ctor("S18713C1", this);} // tgen

static void Test_S18713C1()
{
  extern Class_Descriptor cd_S18713C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18713C1, buf);
    S18713C1 *dp, &lv = *(dp=new (buf) S18713C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18713C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18713C1)");
    check_field_offset(lv, s18713c1f0, ABISELECT(8,4), "S18713C1.s18713c1f0");
    check_field_offset(lv, s18713c1f1, ABISELECT(16,8), "S18713C1.s18713c1f1");
    test_class_info(&lv, &cd_S18713C1);
    dp->~S18713C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18713C1(Test_S18713C1, "S18713C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S18713C1C1Ev();
extern void _ZN8S18713C1D1Ev();
Name_Map name_map_S18713C1[] = {
  NSPAIR(_ZN8S18713C1C1Ev),
  NSPAIR(_ZN8S18713C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18713C1[];
extern void _ZN8S18713C12v1Ev();
extern void _ZN8S18713C12v2Ev();
extern void _ZN8S18713C12v3Ev();
extern void _ZN8S18713C12v4Ev();
extern void _ZN8S18713C12v5Ev();
static  VTBL_ENTRY vtc_S18713C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18713C1[0]),
  (VTBL_ENTRY)&_ZN8S18713C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18713C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18713C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18713C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18713C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S18713C1[];
extern  VTBL_ENTRY _ZTV8S18713C1[];
Class_Descriptor cd_S18713C1 = {  "S18713C1", // class name
  0,0,//no base classes
  &(vtc_S18713C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S18713C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18713C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14759C1  {
  short s14759c1f0;
  char s14759c1f1[2];
  int s14759c1f2;
  long s14759c1f3;
  int s14759c1f4;
  char s14759c1f5[20];
};
//SIG(1 S14759C1) C1{ Fs Fc[2] Fi Fl Fi Fc[20]}



static void Test_S14759C1()
{
  {
    init_simple_test("S14759C1");
    S14759C1 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S14759C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14759C1)");
    check_field_offset(lv, s14759c1f0, 0, "S14759C1.s14759c1f0");
    check_field_offset(lv, s14759c1f1, 2, "S14759C1.s14759c1f1");
    check_field_offset(lv, s14759c1f2, 4, "S14759C1.s14759c1f2");
    check_field_offset(lv, s14759c1f3, 8, "S14759C1.s14759c1f3");
    check_field_offset(lv, s14759c1f4, ABISELECT(16,12), "S14759C1.s14759c1f4");
    check_field_offset(lv, s14759c1f5, ABISELECT(20,16), "S14759C1.s14759c1f5");
  }
}
static Arrange_To_Call_Me vS14759C1(Test_S14759C1, "S14759C1", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15814C1  {
  ::S4206C14_nt s15814c1f0;
  int s15814c1f1;
  void  mf15814c1(); // _ZN8S15814C19mf15814c1Ev
};
//SIG(1 S15814C1) C1{ m FC2{ m FC3{ m FL[2]}} Fi}


void  S15814C1 ::mf15814c1(){}

static void Test_S15814C1()
{
  {
    init_simple_test("S15814C1");
    S15814C1 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S15814C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15814C1)");
    check_field_offset(lv, s15814c1f0, 0, "S15814C1.s15814c1f0");
    check_field_offset(lv, s15814c1f1, 16, "S15814C1.s15814c1f1");
  }
}
static Arrange_To_Call_Me vS15814C1(Test_S15814C1, "S15814C1", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11650C2  {
  int s11650c2f0[5];
  char s11650c2f1[8];
};
//SIG(-1 S11650C2) C1{ Fi[5] Fc[8]}



static void Test_S11650C2()
{
  {
    init_simple_test("S11650C2");
    S11650C2 lv;
    check2(sizeof(lv), 28, "sizeof(S11650C2)");
    check2(__alignof__(lv), 4, "__alignof__(S11650C2)");
    check_field_offset(lv, s11650c2f0, 0, "S11650C2.s11650c2f0");
    check_field_offset(lv, s11650c2f1, 20, "S11650C2.s11650c2f1");
  }
}
static Arrange_To_Call_Me vS11650C2(Test_S11650C2, "S11650C2", 28);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11650C1  {
  ::S11650C2 s11650c1f0;
  ::S11277C4_nt s11650c1f1;
};
//SIG(1 S11650C1) C1{ FC2{ Fi[5] Fc[8]} FC3{ Fi}}



static void Test_S11650C1()
{
  {
    init_simple_test("S11650C1");
    S11650C1 lv;
    check2(sizeof(lv), 32, "sizeof(S11650C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11650C1)");
    check_field_offset(lv, s11650c1f0, 0, "S11650C1.s11650c1f0");
    check_field_offset(lv, s11650c1f1, 28, "S11650C1.s11650c1f1");
  }
}
static Arrange_To_Call_Me vS11650C1(Test_S11650C1, "S11650C1", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15585C1  {
  ::S7909C8_nt s15585c1f0;
  void *s15585c1f1;
  int s15585c1f2;
  void *s15585c1f3;
  int s15585c1f4;
  void  mf15585c1(); // _ZN8S15585C19mf15585c1Ev
};
//SIG(1 S15585C1) C1{ m FC2{ Fl[4]} Fp Fi Fp Fi}


void  S15585C1 ::mf15585c1(){}

static void Test_S15585C1()
{
  {
    init_simple_test("S15585C1");
    S15585C1 lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S15585C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15585C1)");
    check_field_offset(lv, s15585c1f0, 0, "S15585C1.s15585c1f0");
    check_field_offset(lv, s15585c1f1, ABISELECT(32,16), "S15585C1.s15585c1f1");
    check_field_offset(lv, s15585c1f2, ABISELECT(40,20), "S15585C1.s15585c1f2");
    check_field_offset(lv, s15585c1f3, ABISELECT(48,24), "S15585C1.s15585c1f3");
    check_field_offset(lv, s15585c1f4, ABISELECT(56,28), "S15585C1.s15585c1f4");
  }
}
static Arrange_To_Call_Me vS15585C1(Test_S15585C1, "S15585C1", ABISELECT(64,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11328C2  {
  ::S4042C4_nt s11328c2f0;
  int s11328c2f1;
  void *s11328c2f2;
};
//SIG(-1 S11328C2) C1{ FC2{ Fp[2]} Fi Fp}



static void Test_S11328C2()
{
  {
    init_simple_test("S11328C2");
    S11328C2 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S11328C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11328C2)");
    check_field_offset(lv, s11328c2f0, 0, "S11328C2.s11328c2f0");
    check_field_offset(lv, s11328c2f1, ABISELECT(16,8), "S11328C2.s11328c2f1");
    check_field_offset(lv, s11328c2f2, ABISELECT(24,12), "S11328C2.s11328c2f2");
  }
}
static Arrange_To_Call_Me vS11328C2(Test_S11328C2, "S11328C2", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11328C1  {
  ::S11328C2 s11328c1f0;
  void *s11328c1f1;
};
//SIG(1 S11328C1) C1{ FC2{ FC3{ Fp[2]} Fi Fp} Fp}



static void Test_S11328C1()
{
  {
    init_simple_test("S11328C1");
    S11328C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S11328C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11328C1)");
    check_field_offset(lv, s11328c1f0, 0, "S11328C1.s11328c1f0");
    check_field_offset(lv, s11328c1f1, ABISELECT(32,16), "S11328C1.s11328c1f1");
  }
}
static Arrange_To_Call_Me vS11328C1(Test_S11328C1, "S11328C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17210C1  {
  int s17210c1f0[3];
  short s17210c1f1[2];
  char s17210c1f2[289];
  void  mf17210c1(); // _ZN8S17210C19mf17210c1Ev
};
//SIG(1 S17210C1) C1{ m Fi[3] Fs[2] Fc[289]}


void  S17210C1 ::mf17210c1(){}

static void Test_S17210C1()
{
  {
    init_simple_test("S17210C1");
    S17210C1 lv;
    check2(sizeof(lv), 308, "sizeof(S17210C1)");
    check2(__alignof__(lv), 4, "__alignof__(S17210C1)");
    check_field_offset(lv, s17210c1f0, 0, "S17210C1.s17210c1f0");
    check_field_offset(lv, s17210c1f1, 12, "S17210C1.s17210c1f1");
    check_field_offset(lv, s17210c1f2, 16, "S17210C1.s17210c1f2");
  }
}
static Arrange_To_Call_Me vS17210C1(Test_S17210C1, "S17210C1", 308);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2563C2  : S16113C2_nt {
  int s2563c2f0;
};
//SIG(-1 S2563C2) C1{ BC2{ m Fi} Fi}



static void Test_S2563C2()
{
  extern Class_Descriptor cd_S2563C2;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S2563C2, buf);
    S2563C2 &lv = *(new (buf) S2563C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S2563C2)");
    check2(__alignof__(lv), 4, "__alignof__(S2563C2)");
    check_base_class_offset(lv, (S16113C2_nt*), 0, "S2563C2");
    check_field_offset(lv, s2563c2f0, 4, "S2563C2.s2563c2f0");
    test_class_info(&lv, &cd_S2563C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2563C2(Test_S2563C2, "S2563C2", 8);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
static Base_Class bases_S2563C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2563C2[];
Class_Descriptor cd_S2563C2 = {  "S2563C2", // class name
  bases_S2563C2, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  NSPAIRA(_ZTI7S2563C2),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2563C1  : S2563C2 {
  int s2563c1f0;
  virtual void  v1(); // _ZN7S2563C12v1Ev
  ~S2563C1(); // tgen
  S2563C1(); // tgen
};
//SIG(1 S2563C1) C1{ BC2{ BC3{ m Fi} Fi} v1 Fi}


void  S2563C1 ::v1(){vfunc_called(this, "_ZN7S2563C12v1Ev");}
S2563C1 ::~S2563C1(){ note_dtor("S2563C1", this);} // tgen
S2563C1 ::S2563C1(){ note_ctor("S2563C1", this);} // tgen

static void Test_S2563C1()
{
  extern Class_Descriptor cd_S2563C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S2563C1, buf);
    S2563C1 *dp, &lv = *(dp=new (buf) S2563C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2563C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2563C1)");
    check_base_class_offset(lv, (S16113C2_nt*)(S2563C2*), ABISELECT(8,4), "S2563C1");
    check_base_class_offset(lv, (S2563C2*), ABISELECT(8,4), "S2563C1");
    check_field_offset(lv, s2563c1f0, ABISELECT(16,12), "S2563C1.s2563c1f0");
    test_class_info(&lv, &cd_S2563C1);
    dp->~S2563C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2563C1(Test_S2563C1, "S2563C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S2563C1C1Ev();
extern void _ZN7S2563C1D1Ev();
Name_Map name_map_S2563C1[] = {
  NSPAIR(_ZN7S2563C1C1Ev),
  NSPAIR(_ZN7S2563C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S2563C2;
extern VTBL_ENTRY _ZTI7S2563C2[];
static Base_Class bases_S2563C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2563C2,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2563C1[];
extern void _ZN7S2563C12v1Ev();
static  VTBL_ENTRY vtc_S2563C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2563C1[0]),
  (VTBL_ENTRY)&_ZN7S2563C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S2563C1[];
extern  VTBL_ENTRY _ZTV7S2563C1[];
Class_Descriptor cd_S2563C1 = {  "S2563C1", // class name
  bases_S2563C1, 2,
  &(vtc_S2563C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S2563C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S2563C1),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10716C1  {
  char s10716c1f0[204800];
  int s10716c1f1;
  char s10716c1f2[12];
};
//SIG(1 S10716C1) C1{ Fc[204800] Fi Fc[12]}



static void Test_S10716C1()
{
  {
    init_simple_test("S10716C1");
    S10716C1 lv;
    check2(sizeof(lv), 204816, "sizeof(S10716C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10716C1)");
    check_field_offset(lv, s10716c1f0, 0, "S10716C1.s10716c1f0");
    check_field_offset(lv, s10716c1f1, 204800, "S10716C1.s10716c1f1");
    check_field_offset(lv, s10716c1f2, 204804, "S10716C1.s10716c1f2");
  }
}
static Arrange_To_Call_Me vS10716C1(Test_S10716C1, "S10716C1", 204816);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13473C1  {
  int s13473c1f0[4];
  long s13473c1f1;
  char s13473c1f2[4];
  int s13473c1f3[5];
};
//SIG(1 S13473C1) C1{ Fi[4] Fl Fc[4] Fi[5]}



static void Test_S13473C1()
{
  {
    init_simple_test("S13473C1");
    S13473C1 lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S13473C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13473C1)");
    check_field_offset(lv, s13473c1f0, 0, "S13473C1.s13473c1f0");
    check_field_offset(lv, s13473c1f1, 16, "S13473C1.s13473c1f1");
    check_field_offset(lv, s13473c1f2, ABISELECT(24,20), "S13473C1.s13473c1f2");
    check_field_offset(lv, s13473c1f3, ABISELECT(28,24), "S13473C1.s13473c1f3");
  }
}
static Arrange_To_Call_Me vS13473C1(Test_S13473C1, "S13473C1", ABISELECT(48,44));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11329C1  {
  ::S11328C2 s11329c1f0;
};
//SIG(1 S11329C1) C1{ FC2{ FC3{ Fp[2]} Fi Fp}}



static void Test_S11329C1()
{
  {
    init_simple_test("S11329C1");
    S11329C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S11329C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11329C1)");
    check_field_offset(lv, s11329c1f0, 0, "S11329C1.s11329c1f0");
  }
}
static Arrange_To_Call_Me vS11329C1(Test_S11329C1, "S11329C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12316C1  {
  int s12316c1f0;
  char s12316c1f1[60];
  int s12316c1f2;
  char s12316c1f3[32];
};
//SIG(1 S12316C1) C1{ Fi Fc[60] Fi Fc[32]}



static void Test_S12316C1()
{
  {
    init_simple_test("S12316C1");
    S12316C1 lv;
    check2(sizeof(lv), 100, "sizeof(S12316C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12316C1)");
    check_field_offset(lv, s12316c1f0, 0, "S12316C1.s12316c1f0");
    check_field_offset(lv, s12316c1f1, 4, "S12316C1.s12316c1f1");
    check_field_offset(lv, s12316c1f2, 64, "S12316C1.s12316c1f2");
    check_field_offset(lv, s12316c1f3, 68, "S12316C1.s12316c1f3");
  }
}
static Arrange_To_Call_Me vS12316C1(Test_S12316C1, "S12316C1", 100);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17356C1  {
  __tsi64 s17356c1f0;
  int s17356c1f1;
  void *s17356c1f2[2];
  int s17356c1f3[2];
  void  mf17356c1(); // _ZN8S17356C19mf17356c1Ev
};
//SIG(1 S17356C1) C1{ m FL Fi Fp[2] Fi[2]}


void  S17356C1 ::mf17356c1(){}

static void Test_S17356C1()
{
  {
    init_simple_test("S17356C1");
    S17356C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S17356C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17356C1)");
    check_field_offset(lv, s17356c1f0, 0, "S17356C1.s17356c1f0");
    check_field_offset(lv, s17356c1f1, 8, "S17356C1.s17356c1f1");
    check_field_offset(lv, s17356c1f2, ABISELECT(16,12), "S17356C1.s17356c1f2");
    check_field_offset(lv, s17356c1f3, ABISELECT(32,20), "S17356C1.s17356c1f3");
  }
}
static Arrange_To_Call_Me vS17356C1(Test_S17356C1, "S17356C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17924C2_nt  {
  int s17924c2f0[2];
};
//SIG(-1 S17924C2_nt) C1{ Fi[2]}



//skip512 S17924C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17924C1  {
  void *s17924c1f0[2];
  ::S17924C2_nt s17924c1f1;
  void  mf17924c1(); // _ZN8S17924C19mf17924c1Ev
};
//SIG(1 S17924C1) C1{ m Fp[2] FC2{ Fi[2]}}


void  S17924C1 ::mf17924c1(){}

static void Test_S17924C1()
{
  {
    init_simple_test("S17924C1");
    S17924C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S17924C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17924C1)");
    check_field_offset(lv, s17924c1f0, 0, "S17924C1.s17924c1f0");
    check_field_offset(lv, s17924c1f1, ABISELECT(16,8), "S17924C1.s17924c1f1");
  }
}
static Arrange_To_Call_Me vS17924C1(Test_S17924C1, "S17924C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10829C1  {
  char s10829c1f0[32];
  void *s10829c1f1;
  int s10829c1f2;
  void *s10829c1f3;
  int s10829c1f4;
};
//SIG(1 S10829C1) C1{ Fc[32] Fp Fi Fp Fi}



static void Test_S10829C1()
{
  {
    init_simple_test("S10829C1");
    S10829C1 lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S10829C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10829C1)");
    check_field_offset(lv, s10829c1f0, 0, "S10829C1.s10829c1f0");
    check_field_offset(lv, s10829c1f1, 32, "S10829C1.s10829c1f1");
    check_field_offset(lv, s10829c1f2, ABISELECT(40,36), "S10829C1.s10829c1f2");
    check_field_offset(lv, s10829c1f3, ABISELECT(48,40), "S10829C1.s10829c1f3");
    check_field_offset(lv, s10829c1f4, ABISELECT(56,44), "S10829C1.s10829c1f4");
  }
}
static Arrange_To_Call_Me vS10829C1(Test_S10829C1, "S10829C1", ABISELECT(64,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13065C2_nt  {
  char s13065c2f0[42];
};
//SIG(-1 S13065C2_nt) C1{ Fc[42]}



//skip512 S13065C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13065C1  {
  int s13065c1f0[2];
  ::S13065C2_nt s13065c1f1;
};
//SIG(1 S13065C1) C1{ Fi[2] FC2{ Fc[42]}}



static void Test_S13065C1()
{
  {
    init_simple_test("S13065C1");
    S13065C1 lv;
    check2(sizeof(lv), 52, "sizeof(S13065C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13065C1)");
    check_field_offset(lv, s13065c1f0, 0, "S13065C1.s13065c1f0");
    check_field_offset(lv, s13065c1f1, 8, "S13065C1.s13065c1f1");
  }
}
static Arrange_To_Call_Me vS13065C1(Test_S13065C1, "S13065C1", 52);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13577C1  {
  int s13577c1f0[6];
  __tsi64 s13577c1f1[2];
  int s13577c1f2[2];
};
//SIG(1 S13577C1) C1{ Fi[6] FL[2] Fi[2]}



static void Test_S13577C1()
{
  {
    init_simple_test("S13577C1");
    S13577C1 lv;
    check2(sizeof(lv), 48, "sizeof(S13577C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13577C1)");
    check_field_offset(lv, s13577c1f0, 0, "S13577C1.s13577c1f0");
    check_field_offset(lv, s13577c1f1, 24, "S13577C1.s13577c1f1");
    check_field_offset(lv, s13577c1f2, 40, "S13577C1.s13577c1f2");
  }
}
static Arrange_To_Call_Me vS13577C1(Test_S13577C1, "S13577C1", 48);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13173C1  {
  int s13173c1f0[2];
  __tsi64 s13173c1f1[3];
  int s13173c1f2[2];
};
//SIG(1 S13173C1) C1{ Fi[2] FL[3] Fi[2]}



static void Test_S13173C1()
{
  {
    init_simple_test("S13173C1");
    S13173C1 lv;
    check2(sizeof(lv), 40, "sizeof(S13173C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13173C1)");
    check_field_offset(lv, s13173c1f0, 0, "S13173C1.s13173c1f0");
    check_field_offset(lv, s13173c1f1, 8, "S13173C1.s13173c1f1");
    check_field_offset(lv, s13173c1f2, 32, "S13173C1.s13173c1f2");
  }
}
static Arrange_To_Call_Me vS13173C1(Test_S13173C1, "S13173C1", 40);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17810C1  {
  void *s17810c1f0;
  int s17810c1f1[3];
  long s17810c1f2;
  int s17810c1f3;
  void  mf17810c1(); // _ZN8S17810C19mf17810c1Ev
};
//SIG(1 S17810C1) C1{ m Fp Fi[3] Fl Fi}


void  S17810C1 ::mf17810c1(){}

static void Test_S17810C1()
{
  {
    init_simple_test("S17810C1");
    S17810C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S17810C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17810C1)");
    check_field_offset(lv, s17810c1f0, 0, "S17810C1.s17810c1f0");
    check_field_offset(lv, s17810c1f1, ABISELECT(8,4), "S17810C1.s17810c1f1");
    check_field_offset(lv, s17810c1f2, ABISELECT(24,16), "S17810C1.s17810c1f2");
    check_field_offset(lv, s17810c1f3, ABISELECT(32,20), "S17810C1.s17810c1f3");
  }
}
static Arrange_To_Call_Me vS17810C1(Test_S17810C1, "S17810C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14893C1  {
  short s14893c1f0[2];
  int s14893c1f1:8;
  char s14893c1f2[3];
};
//SIG(1 S14893C1) C1{ Fs[2] Fi:8 Fc[3]}



static void Test_S14893C1()
{
  {
    init_simple_test("S14893C1");
    static S14893C1 lv;
    check2(sizeof(lv), 8, "sizeof(S14893C1)");
    check2(__alignof__(lv), 4, "__alignof__(S14893C1)");
    check_field_offset(lv, s14893c1f0, 0, "S14893C1.s14893c1f0");
    set_bf_and_test(lv, s14893c1f1, 4, 0, 8, 1, "S14893C1");
    set_bf_and_test(lv, s14893c1f1, 4, 0, 8, hide_sll(1LL<<7), "S14893C1");
    check_field_offset(lv, s14893c1f2, 5, "S14893C1.s14893c1f2");
  }
}
static Arrange_To_Call_Me vS14893C1(Test_S14893C1, "S14893C1", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2564C2  : S16113C2_nt {
  int s2564c2f0;
};
//SIG(-1 S2564C2) C1{ BC2{ m Fi} Fi}



static void Test_S2564C2()
{
  extern Class_Descriptor cd_S2564C2;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S2564C2, buf);
    S2564C2 &lv = *(new (buf) S2564C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S2564C2)");
    check2(__alignof__(lv), 4, "__alignof__(S2564C2)");
    check_base_class_offset(lv, (S16113C2_nt*), 0, "S2564C2");
    check_field_offset(lv, s2564c2f0, 4, "S2564C2.s2564c2f0");
    test_class_info(&lv, &cd_S2564C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2564C2(Test_S2564C2, "S2564C2", 8);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
static Base_Class bases_S2564C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2564C2 = {  "S2564C2", // class name
  bases_S2564C2, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2564C1  : S2564C2 {
};
//SIG(1 S2564C1) C1{ BC2{ BC3{ m Fi} Fi}}



static void Test_S2564C1()
{
  extern Class_Descriptor cd_S2564C1;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S2564C1, buf);
    S2564C1 &lv = *(new (buf) S2564C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S2564C1)");
    check2(__alignof__(lv), 4, "__alignof__(S2564C1)");
    check_base_class_offset(lv, (S16113C2_nt*)(S2564C2*), 0, "S2564C1");
    check_base_class_offset(lv, (S2564C2*), 0, "S2564C1");
    test_class_info(&lv, &cd_S2564C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2564C1(Test_S2564C1, "S2564C1", 8);

#else // __cplusplus

extern Class_Descriptor cd_S16113C2_nt;
extern VTBL_ENTRY _ZTI11S16113C2_nt[];
extern Class_Descriptor cd_S2564C2;
static Base_Class bases_S2564C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16113C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2564C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2564C1 = {  "S2564C1", // class name
  bases_S2564C1, 2,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11080C1  {
  ::S7424C5 s11080c1f0;
};
//SIG(1 S11080C1) C1{ FC2{ BC3{ m Fi} Fi}}



static void Test_S11080C1()
{
  {
    init_simple_test("S11080C1");
    S11080C1 lv;
    check2(sizeof(lv), 8, "sizeof(S11080C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11080C1)");
    check_field_offset(lv, s11080c1f0, 0, "S11080C1.s11080c1f0");
  }
}
static Arrange_To_Call_Me vS11080C1(Test_S11080C1, "S11080C1", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13527C1  {
  int s13527c1f0[5];
  char s13527c1f1[1156];
};
//SIG(1 S13527C1) C1{ Fi[5] Fc[1156]}



static void Test_S13527C1()
{
  {
    init_simple_test("S13527C1");
    S13527C1 lv;
    check2(sizeof(lv), 1176, "sizeof(S13527C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13527C1)");
    check_field_offset(lv, s13527c1f0, 0, "S13527C1.s13527c1f0");
    check_field_offset(lv, s13527c1f1, 20, "S13527C1.s13527c1f1");
  }
}
static Arrange_To_Call_Me vS13527C1(Test_S13527C1, "S13527C1", 1176);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6234C1  : S2440C38 {
  void *s6234c1f0;
  int s6234c1f1[2];
};
//SIG(1 S6234C1) C1{ BC2{ m} Fp Fi[2]}



static void Test_S6234C1()
{
  extern Class_Descriptor cd_S6234C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6234C1, buf);
    S6234C1 &lv = *(new (buf) S6234C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6234C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6234C1)");
    check_base_class_offset(lv, (S2440C38*), 0, "S6234C1");
    check_field_offset(lv, s6234c1f0, 0, "S6234C1.s6234c1f0");
    check_field_offset(lv, s6234c1f1, ABISELECT(8,4), "S6234C1.s6234c1f1");
    test_class_info(&lv, &cd_S6234C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6234C1(Test_S6234C1, "S6234C1", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2440C38;
static Base_Class bases_S6234C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2440C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S6234C1 = {  "S6234C1", // class name
  bases_S6234C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14446C1  {
  void *s14446c1f0[2];
  char s14446c1f1;
  long s14446c1f2;
  char s14446c1f3;
};
//SIG(1 S14446C1) C1{ Fp[2] Fc Fl Fc}



static void Test_S14446C1()
{
  {
    init_simple_test("S14446C1");
    S14446C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S14446C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14446C1)");
    check_field_offset(lv, s14446c1f0, 0, "S14446C1.s14446c1f0");
    check_field_offset(lv, s14446c1f1, ABISELECT(16,8), "S14446C1.s14446c1f1");
    check_field_offset(lv, s14446c1f2, ABISELECT(24,12), "S14446C1.s14446c1f2");
    check_field_offset(lv, s14446c1f3, ABISELECT(32,16), "S14446C1.s14446c1f3");
  }
}
static Arrange_To_Call_Me vS14446C1(Test_S14446C1, "S14446C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16547C1  {
  int s16547c1f0;
  char s16547c1f1;
  int s16547c1f2;
  void *s16547c1f3;
  void  mf16547c1(); // _ZN8S16547C19mf16547c1Ev
};
//SIG(1 S16547C1) C1{ m Fi Fc Fi Fp}


void  S16547C1 ::mf16547c1(){}

static void Test_S16547C1()
{
  {
    init_simple_test("S16547C1");
    S16547C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S16547C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16547C1)");
    check_field_offset(lv, s16547c1f0, 0, "S16547C1.s16547c1f0");
    check_field_offset(lv, s16547c1f1, 4, "S16547C1.s16547c1f1");
    check_field_offset(lv, s16547c1f2, 8, "S16547C1.s16547c1f2");
    check_field_offset(lv, s16547c1f3, ABISELECT(16,12), "S16547C1.s16547c1f3");
  }
}
static Arrange_To_Call_Me vS16547C1(Test_S16547C1, "S16547C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11596C1  {
  ::S17924C2_nt s11596c1f0[2];
};
//SIG(1 S11596C1) C1{ FC2{ Fi[2]}[2]}



static void Test_S11596C1()
{
  {
    init_simple_test("S11596C1");
    S11596C1 lv;
    check2(sizeof(lv), 16, "sizeof(S11596C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11596C1)");
    check_field_offset(lv, s11596c1f0, 0, "S11596C1.s11596c1f0");
  }
}
static Arrange_To_Call_Me vS11596C1(Test_S11596C1, "S11596C1", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17724C1  {
  void *s17724c1f0;
  int s17724c1f1;
  long s17724c1f2;
  void *s17724c1f3;
  void  mf17724c1(); // _ZN8S17724C19mf17724c1Ev
};
//SIG(1 S17724C1) C1{ m Fp Fi Fl Fp}


void  S17724C1 ::mf17724c1(){}

static void Test_S17724C1()
{
  {
    init_simple_test("S17724C1");
    S17724C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S17724C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17724C1)");
    check_field_offset(lv, s17724c1f0, 0, "S17724C1.s17724c1f0");
    check_field_offset(lv, s17724c1f1, ABISELECT(8,4), "S17724C1.s17724c1f1");
    check_field_offset(lv, s17724c1f2, ABISELECT(16,8), "S17724C1.s17724c1f2");
    check_field_offset(lv, s17724c1f3, ABISELECT(24,12), "S17724C1.s17724c1f3");
  }
}
static Arrange_To_Call_Me vS17724C1(Test_S17724C1, "S17724C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16578C1  {
  int s16578c1f0;
  char s16578c1f1[132];
  void  mf16578c1(); // _ZN8S16578C19mf16578c1Ev
};
//SIG(1 S16578C1) C1{ m Fi Fc[132]}


void  S16578C1 ::mf16578c1(){}

static void Test_S16578C1()
{
  {
    init_simple_test("S16578C1");
    S16578C1 lv;
    check2(sizeof(lv), 136, "sizeof(S16578C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16578C1)");
    check_field_offset(lv, s16578c1f0, 0, "S16578C1.s16578c1f0");
    check_field_offset(lv, s16578c1f1, 4, "S16578C1.s16578c1f1");
  }
}
static Arrange_To_Call_Me vS16578C1(Test_S16578C1, "S16578C1", 136);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13825C1  {
  long s13825c1f0;
  __tsi64 s13825c1f1[2];
  long s13825c1f2;
};
//SIG(1 S13825C1) C1{ Fl FL[2] Fl}



static void Test_S13825C1()
{
  {
    init_simple_test("S13825C1");
    S13825C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S13825C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13825C1)");
    check_field_offset(lv, s13825c1f0, 0, "S13825C1.s13825c1f0");
    check_field_offset(lv, s13825c1f1, ABISELECT(8,4), "S13825C1.s13825c1f1");
    check_field_offset(lv, s13825c1f2, ABISELECT(24,20), "S13825C1.s13825c1f2");
  }
}
static Arrange_To_Call_Me vS13825C1(Test_S13825C1, "S13825C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13508C1  {
  int s13508c1f0[4];
  void *s13508c1f1[3];
};
//SIG(1 S13508C1) C1{ Fi[4] Fp[3]}



static void Test_S13508C1()
{
  {
    init_simple_test("S13508C1");
    S13508C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S13508C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13508C1)");
    check_field_offset(lv, s13508c1f0, 0, "S13508C1.s13508c1f0");
    check_field_offset(lv, s13508c1f1, 16, "S13508C1.s13508c1f1");
  }
}
static Arrange_To_Call_Me vS13508C1(Test_S13508C1, "S13508C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13931C1  {
  long s13931c1f0[2];
  int s13931c1f1[2];
};
//SIG(1 S13931C1) C1{ Fl[2] Fi[2]}



static void Test_S13931C1()
{
  {
    init_simple_test("S13931C1");
    S13931C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S13931C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13931C1)");
    check_field_offset(lv, s13931c1f0, 0, "S13931C1.s13931c1f0");
    check_field_offset(lv, s13931c1f1, ABISELECT(16,8), "S13931C1.s13931c1f1");
  }
}
static Arrange_To_Call_Me vS13931C1(Test_S13931C1, "S13931C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14660C1  {
  void *s14660c1f0[4];
  char s14660c1f1;
  int s14660c1f2;
};
//SIG(1 S14660C1) C1{ Fp[4] Fc Fi}



static void Test_S14660C1()
{
  {
    init_simple_test("S14660C1");
    S14660C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S14660C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14660C1)");
    check_field_offset(lv, s14660c1f0, 0, "S14660C1.s14660c1f0");
    check_field_offset(lv, s14660c1f1, ABISELECT(32,16), "S14660C1.s14660c1f1");
    check_field_offset(lv, s14660c1f2, ABISELECT(36,20), "S14660C1.s14660c1f2");
  }
}
static Arrange_To_Call_Me vS14660C1(Test_S14660C1, "S14660C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10366C1  : S2489C12_nt {
  int s10366c1f0[2];
};
//SIG(1 S10366C1) C1{ BC2{} Fi[2]}



static void Test_S10366C1()
{
  extern Class_Descriptor cd_S10366C1;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S10366C1, buf);
    S10366C1 &lv = *(new (buf) S10366C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S10366C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10366C1)");
    check_base_class_offset(lv, (S2489C12_nt*), 0, "S10366C1");
    check_field_offset(lv, s10366c1f0, 0, "S10366C1.s10366c1f0");
    test_class_info(&lv, &cd_S10366C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10366C1(Test_S10366C1, "S10366C1", 8);

#else // __cplusplus

extern Class_Descriptor cd_S2489C12_nt;
static Base_Class bases_S10366C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2489C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S10366C1 = {  "S10366C1", // class name
  bases_S10366C1, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10677C1  {
  char s10677c1f0[2];
  void *s10677c1f1;
};
//SIG(1 S10677C1) C1{ Fc[2] Fp}



static void Test_S10677C1()
{
  {
    init_simple_test("S10677C1");
    S10677C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10677C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10677C1)");
    check_field_offset(lv, s10677c1f0, 0, "S10677C1.s10677c1f0");
    check_field_offset(lv, s10677c1f1, ABISELECT(8,4), "S10677C1.s10677c1f1");
  }
}
static Arrange_To_Call_Me vS10677C1(Test_S10677C1, "S10677C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17393C1  {
  __tsi64 s17393c1f0[18];
  void  mf17393c1(); // _ZN8S17393C19mf17393c1Ev
};
//SIG(1 S17393C1) C1{ m FL[18]}


void  S17393C1 ::mf17393c1(){}

static void Test_S17393C1()
{
  {
    init_simple_test("S17393C1");
    S17393C1 lv;
    check2(sizeof(lv), 144, "sizeof(S17393C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17393C1)");
    check_field_offset(lv, s17393c1f0, 0, "S17393C1.s17393c1f0");
  }
}
static Arrange_To_Call_Me vS17393C1(Test_S17393C1, "S17393C1", 144);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13276C1  {
  int s13276c1f0[200];
};
//SIG(1 S13276C1) C1{ Fi[200]}



static void Test_S13276C1()
{
  {
    init_simple_test("S13276C1");
    S13276C1 lv;
    check2(sizeof(lv), 800, "sizeof(S13276C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13276C1)");
    check_field_offset(lv, s13276c1f0, 0, "S13276C1.s13276c1f0");
  }
}
static Arrange_To_Call_Me vS13276C1(Test_S13276C1, "S13276C1", 800);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13891C1  {
  long s13891c1f0;
  short s13891c1f1;
};
//SIG(1 S13891C1) C1{ Fl Fs}



static void Test_S13891C1()
{
  {
    init_simple_test("S13891C1");
    S13891C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S13891C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13891C1)");
    check_field_offset(lv, s13891c1f0, 0, "S13891C1.s13891c1f0");
    check_field_offset(lv, s13891c1f1, ABISELECT(8,4), "S13891C1.s13891c1f1");
  }
}
static Arrange_To_Call_Me vS13891C1(Test_S13891C1, "S13891C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

